游戏邦在:
杂志专栏:
gamerboom.com订阅到鲜果订阅到抓虾google reader订阅到有道订阅到QQ邮箱订阅到帮看

新手学习3D编程技巧应实现的10个目标

发布时间:2013-07-04 16:27:03 Tags:,,,,,

作者:Vasily Tserekh

学习3D编程并非一桩容易实现的任务。这会涉及到许多新事物,包括选择编程语言以及正确的3D建模软件等。如果实现了以下10个目标(无论采用哪种语言,哪种渲染引擎),那就足以说明你是这方面的半个能手了。

1.创建自己的定制图像初始化函数

今天已经涌现各种3D引擎和平台,我们可以把这个任务交给这些平台来完成。在过去,你得初始化含所有窗口函数的OpenGL,自己处理窗口控键和加载资源。这有助于理解其内部运行原理,让你更了解自己在做的事情。我的建议是先去看看NEHE教程http://nehe.gamedev.net/,里面有许多用C语言编写的图像初始化函数,在第一章还带有窗口API。如果这已经足够你应付了,你还得看看C++对等函数,或者将其移植到处理C#、Java或Python等语言环境中。你可以在网络上找到大量范例。

mesh-paint(from 3dkingdoms.com)

mesh-paint(from 3dkingdoms.com)

2.部署自己的摄像机

你可以从网上复制和粘贴一个摄像机代码,这样用起来也没有太大问题,但你只有自己从头到尾创建摄像机,你才会完全了解矢量处理、转变矩阵、角度转换等概念。你应该从编写一个FPS(第一人称射击游戏)摄像机开始,它包含了一切你所需要的东西。之后如果你想制作自己的游戏,你就不能再用这种方法了,我推荐你去看看维基百科上http://en.wikipedia.org/wiki/Virtual_camera_system的相关知识,以了解哪种摄像机最符合自己的需求。

3.了解基本的3D概念

在我刚开始时,我才听说了诸如反锯齿、各向异性过滤、闭塞测试、z-缓存区、alpha测试、着色器语言、凹凸贴图等新词。也许你是个游戏玩家,你已经在设定自己的游戏图像设置时看过其中一些词。要确保你在这些概念上投入了足够的时间,因为这会让你较为全面地了解3D编程。

4.掌握与矢量和矩阵有关的知识

这是常被大家忽略的一点,若要正确处理摄像机、地形沿行、光线跟踪等事物,你就应该了解与之相关的一切。你还应该了解最小三角法基础。现在我已经意识到,当初如果我多花几小时研究这些,我就不用那么费劲了。

5.编写一个3D模型载入程序

我建议你从一个.OBJ文件or.STL文件着手,因为它们有一个ASCII格式的表示法。之后,你可以转向更复杂的格式,例如.3DS。这样,你不但要更了解3D模型如何保存,还得先学会绘制三角形,然后才会清楚如何用图像引擎绘制对象。

6.成功制作自己的碰撞算法

绘制内容是一回事,管理其几何体又是另一回事。在虚拟3D世界中不存在物理法则,所以你得自己创造。如果你希望一个对象无法穿墙,那么你就得创造该墙体的一个内部几何表示法,并自己进行所有的运算。我们有多个方法可以处理碰撞,我建议你从一个迷宫项目的二元碰撞入手。

7.部署一个小粒子引擎

每当我看到3D游戏中的火、烟、光线以及其他闪闪发亮的特效是由粒子构成,而这些粒子实际上是带有纹理,面向摄像机的位面时,我就觉得很失望。你添加的粒子越多,特效的视觉真实感就越强,但其运行效果也会大打折扣。我制作的第一个粒子引擎是针对火箭冒烟,并且当时没有参考任何粒子引擎教程。之后,我才发现自己其实并不需要这样从头到尾创建引擎,但我确实乐在其中。通过这种方法,你可以了解粒子发射器、粒子行为,以及bill boarding技巧等概念。

8.掌握3D建模软件的基本要素

要改变你想运用于自己应用的3D模型,你至少要了解转换、缩放、旋转、纹理、导出其他格式以及制作简单模型的操作方法。如果你不这么做,就可能得请求他人帮助完成你的首个项目。我用过一些建模软件,个人强烈推荐3D Max或Maya。

9.加载和播放动画

我认为在3D环境中最困难的部分就是加载和正确播放动画。我得完成反向工程,将其导入一个3D max .XAF文件。我还得学习骨骼分层、矩阵插值等知识。但最后,看着自己制作的模型能够自如移动真是一大快事。我建议从一个机器人动画入手,因为动物和人类的模型还需要你掌握另一项称为skinning的技巧。

10.编写2D定制图像用户界面(GUI)

当我用XNA开始编程时,我不得不自己创建GUI,因为XNA并没有植入任何窗口控制方式。这也让我得到了两个好处,首先就是获得了自己制定定制GUI控制方式的能力,另一个就是了解了事件处理、事件捕捉等概念。这并非易事,我做过的最困难的控制方式是一个列表框,但完成后你就可以运用于多个地方。

总结

在这个历程中,你将遇到不同问题。不管你有多聪明,你都将花费大量时间尝试运行代码。但我可以从一个程序员的角度告诉你,没有比看到自己的代码正常运行更令人欣慰了。我现在还记得自己首次编写一个OBJ模型载入程序时欣喜若狂的心情。当时我试着载入一张脸,折腾数小时后,终于在凌晨3:50突然看到一张奇怪的脸出现在屏幕上,当时真是把我的魂都吓出来了。这事想起来真好笑。

我相信你实现这10个目标后,就可以称得上掌握了基本的3D编程知识。我撰写此文的原因是,我刚开始摸索时真是费了好大的功夫,我希望大家都有一个简短可循的入门指南,让大家少走弯路。我的建议是开始动作制作一款小游戏,并在这个过程中不断进行调整。我认为这就是最好的方法,只有学以致用才会更有动力。之后你会发现,游戏并非你所想象的那样,你得花些时间思考如何解决一些技术问题。(本文为游戏邦/gamerboom.com编译,拒绝任何不保留版权的转载,如需转载请联系:游戏邦

Ten Things to Achieve When Starting 3D Programming UNDER REVIEW

By Vasily Tserekh

Starting 3D programming is not an easy task to accomplish. There are a lot of new things that come into play, and they vary from choosing a programming language to selecting the correct 3D modeling software. These 10 goals are the things that when they are done, no matter in what language and with what rendering engine, you can consider yourself a semi-expert on this matter.

#1: Build your own custom graphic initialization function

Today with the great variety of 3D engines and platforms, this task is always delegated to those. I still remember the times when you had to initialize OpenGL with all the windows functions, and how you had to manage windows handles and resource loading yourself. This is useful to understand how things are managed internally and will give you more comprehension of what you are doing. My advice is to start looking at NEHE tutorials, it has a graphic initialization function written in C and with windows APIs in chapter one. If this is a lot for you to handle, you should look at C++ equivalent functions or try to port them to managed languages like C#, Java or Python. There are plenty of examples on the internet.

#2: Implement your own camera

You can copy and paste a camera code from the internet, and use it without major problems, but it is not until you make your own camera from scratch that you will fully understand some concepts like vector handling, translation matrices, angle conversion, etc. You should start by coding a FPS (First Person Shooter) camera; it has everything it needs to get you ready. Later if you want to make your own game and you can’t use it, I recommend you to read this article to find out the type of camera that best suits your needs.

#3: Understand primary 3D concepts

When I started, I began to hear a lot of new words like anti-aliasing, anisotropic filtering, occlusion testing, z-buffer, alpha testing, shader language, bump mapping, etc. Maybe if you are a gamer, you have seen some of them while configuring the graphic settings of your game. Make sure you spent some time reading about this, because it will give an overview of what 3D programming is.

#4: Learn everything you can about vectors and matrices

This is always underestimated, I strongly recommend that in order to correctly manage things like cameras, terrain following, ray tracing; you should know everything about this. You should also learn minimum trigonometry basis. Now I understand how easy my life would have been if I would had spent only a few hours studying this matter.

#5: Code yourself a 3D model loader

I recommend beginning with a .OBJ file or a .STL file because they have an ASCII format representation. Later, you can move to other more complex formats like .3DS. With this, you not only will understand more how 3D models are saved, you will have to draw it in its raw manner: triangles, and then you will understand how everything is drawn in a graphics engine.

#6: Successfully make your own collision algorithm

It is one thing to draw a world and another thing to manage its geometry. In a virtual 3D world, there are no physics laws, so you have to create them. If you want an object not to go through a wall, then you have to create an internal geometric representation of the wall and make all the calculations yourself. There are several approaches to handle collisions; I recommend starting with binary collisions with a labyrinth project. Try this link for more information.

#7: Implement a small particle engine

I was disappointed when I found out that fire, smoke, some lighting and other stunning effects that you see in 3D games are made by particles and that particles are in essence planes with textures facing the camera. The more particles you add, the more realistic the effect looks but the performance is more compromised. The first particle engine I made was for rocket smoke and I did it without looking at a particle engine tutorial. Later I realized I had reinvented the wheel but I was really into this. By carrying out this, you will understand concepts like particle emitters, particle behavior and bill boarding techniques, among others.

#8: Learn the basics in a 3D modeling software

In order to make changes to the 3D models you want to use in your application, you should at least know operations like translating, scaling, rotating, texturing, exporting to other formats and making simple models. If you don’t do that, you will suffer from depending on other people to do your first game. I’ve worked with a few modeling software and I strongly recommend 3D Max or Maya.

#9: Load and play an animation

Loading and correctly playing an animation was the most difficult thing in 3D that I ever did. I had to do reverse engineering to a 3D max .XAF file. I had to also learn stuff like bone hierarchy, matrix interpolation, among others. At the end, it was very gratifying to look at your own models moving by themselves. I recommend starting with animating a robot since models like animals and people require another technique called skinning.

#10: Code a 2D custom Graphic User Interface (GUI)

When I began programming in XNA; I was forced to build my own GUI because XNA does not have implemented any windows controls. This gave me two things, the first one was the ability to make my custom GUI controls and the other one was the understanding of concepts like event handling and event capturing. It is not easy, the most difficult control I have made is a listbox, but once it is made you can use it everywhere.

Conclusion

In this journey you will come across several issues. You will spend a lot of time trying your code to work no matter how smart you are. But I can tell you that from a programmer side of view there is nothing more comforting than seeing your own code working. I still remember the joy when I first coded an OBJ model loader. I was trying to load a face and after several hours on the task at 3:50am suddenly a very weird face appeared on the screen and scared the hell out of me, I laugh every time I remember that story.

I am sure when you manage to achieve these ten things, you can say you have the basic knowledge of 3D programming. I wrote this because I spent a lot of work and time to achieve them, and because I would like everyone to have a small guideline when starting in this world. My advice is to start making a small game and to try to adapt them on the go. I think this is the best way because trying to learn all this without the possibility to see it in action is not very motivating. You will see after a while that gaming won’t be same for you, because you will spend some time trying to figure out how they solved some technical issues that you faced before. Thats all for now I tried to keep this article clear and understandable, if you liked it, you can visit my blog for more stuff like this.(source:gamedev


上一篇:

下一篇: