65.9K
CodeProject 正在变化。 阅读更多。
Home

开始 3D 编程时要实现的十件事

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (14投票s)

2011 年 8 月 27 日

CPOL

5分钟阅读

viewsIcon

40714

开始 3D 编程时要实现的十件事。

引言

开始 3D 编程并非易事。有很多新东西需要学习,从选择编程语言到选择正确的 3D 建模软件,种类繁多。

当你完成这些事情后,无论使用何种语言和渲染引擎,都可以认为自己在这方面已是半个专家。

  1. 构建自己的自定义图形初始化函数

    如今,由于 3D 引擎和平台的种类繁多,这项任务总是被委托给它们。我还记得那些不得不通过所有窗口函数初始化 openGL 的日子,以及如何自己管理窗口句柄和资源加载。这有助于理解内部工作原理,并让你更深入地理解自己正在做什么。我的建议是开始查看 NEHE 教程,其中在第一章有一个用 C 和 windows API 编写的图形初始化函数。如果这对你来说太难,你应该看看 C++ 等效函数,或者尝试将其移植到 C#、Java 或 Python 等托管语言。网上有很多例子。

  2. 实现自己的相机

    你可以从网上复制粘贴相机代码并使用它而不会遇到大问题,但直到你自己从头开始制作相机,你才能完全理解诸如向量处理、变换矩阵、角度转换等概念。你应该从编写第一人称射击 (FPS) 相机开始;它包含了让你准备就绪所需的一切。之后,如果你想制作自己的游戏但又不能使用它,我建议你阅读这篇文章,以了解最适合你需求的相机类型。

  3. 理解主要的 3D 概念

    刚开始时,我开始听到很多新词,比如抗锯齿、各向异性过滤、遮挡剔除、z 缓冲、alpha 测试、着色器语言、凹凸贴图等。也许如果你是个游戏玩家,在配置游戏图形设置时见过其中一些。确保花些时间阅读这些内容,因为它将为你提供 3D 编程的概览。

  4. 学习所有关于向量和矩阵的知识

    这一点总是被低估。我强烈建议,为了正确管理相机、地形跟随、射线追踪等,你应该了解有关这方面的一切。你还应该学习基础的三角学。现在我明白了,如果我只花几个小时学习这方面的内容,我的生活会多么轻松。

  5. 自己编写 3D 模型加载器

    我建议从 .OBJ 文件或 .STL 文件开始,因为它们是 ASCII 格式表示。之后,你可以转向其他更复杂的格式,如 .3DS。通过这样做,你不仅能更多地了解 3D 模型是如何保存的,你还将以原始方式绘制它们:三角形,然后你就会理解图形引擎中的一切是如何绘制的。

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

    绘制一个世界是一回事,管理其几何图形是另一回事。在 3D 世界中没有物理定律,你必须自己创建它们。如果你不希望一个物体穿过墙壁,那么你必须创建墙壁的内部几何表示,并自己进行所有计算。有几种处理碰撞的方法;我建议从迷宫项目中的二进制碰撞开始。请参考这个链接获取更多信息。

  7. 实现一个小粒子引擎

    当我发现 3D 游戏中看到的火、烟、某些光照和其他令人惊叹的效果都是由粒子组成的,而粒子本质上是朝向摄像机的纹理平面时,我感到很失望。你添加的粒子越多,效果看起来越逼真,但性能也越受损。我制作的第一个粒子引擎是火箭烟雾,我没有看粒子引擎教程就完成了。后来,我意识到我重复造轮子了,但我真的很喜欢这个。通过完成这项工作,你将理解粒子发射器、粒子行为和公告板技术等概念。

  8. 学习 3D 建模软件的基础知识

    为了修改你想要在应用程序中使用的 3D 模型,你应该至少了解诸如平移、缩放、旋转、纹理贴图、导出到其他格式以及制作简单模型等操作。如果你不这样做,你将不得不依赖他人来制作你的第一个游戏。我使用过几种建模软件,我强烈推荐 3D Max 或 Maya。

  9. 加载和播放动画

    加载和正确播放动画是我做过的 3D 中最难的事情。我不得不对 3D max 的 .XAF 文件进行逆向工程。我还不得不学习骨骼层次、矩阵插值等内容。最后,看到自己的模型能够自己移动是非常令人欣慰的。我建议从制作机器人动画开始,因为像动物和人这样的模型需要另一种称为蒙皮的技术。

  10. 编写一个 2D 自定义图形用户界面 (GUI)

    当我开始用 XNA 编程时,我不得不自己构建 GUI,因为 XNA 没有实现任何窗口控件。这给了我两样东西:一是制作自定义 GUI 控件的能力,二是理解了事件处理和事件捕获等概念。这并不容易,我制作的最难的控件是 listbox,但一旦制作完成,你就可以在任何地方使用它。

我确信当你完成这十件事时,你可以说你已经掌握了 3D 编程的基础知识。我写这篇文章是因为我花了很多精力才完成它们,并且希望每个人在开始这个世界时都能有一个小小的指导。我的建议是开始制作一个小游戏,并在进行中尝试调整它们。我认为这是最好的方法,因为在无法看到实际效果的情况下学习所有这些内容并不太有动力。如果你喜欢这篇小文章,请在下方投票或留言。

历史

  • 2011 年 9 月 9 日:初始版本
© . All rights reserved.