开始3D编程前需注意的十件事
http://www.csdn.net/article/2013-06-21/2815949-3d-programming
原文作者Vasily Tserekh是名3D编程爱好者,他发表了一篇博文《 Ten Things to Achieve When Starting 3D Programming》文中他分享了创建3D编程必做的十件事。
开发者想要启动3D编程也并非是件易事,它不仅需要许多新技术,而且还需要根据不同的项目来选择编程语言从而设置正确的3D软件模型。
3D编程语言提供了一种更加容易的编写3D应用程序的方法,因为你使用的是一种专门为3D游戏设计的脚本语言来编写DirectX界面。这种语言不受3D引擎速度和自由度的影响,并且避免了使用“真正”编程语言带来的问题。
一起来看下文中提及的这10件事,有了这些向导,无论你是采用哪种语言或者是何种引擎,即使成不了专家但至少也会让你告别“小白”。
#1:构建自定义图形初始化功能
现今有关3D引擎和平台种类繁多。记得以前,必须通过所有的Windows功能来初始化OpenGL并且你还要学会如何通过管理窗口句柄和资源加载。在开展新项目时了解项目是如何进行内部管理的,这一点非常重要。我的建议是查看NEHE教程,它是用C语言编写的图形初始化功能,在第一章节还介绍了Windows APIs。此外,你还可以查看C++等价函数,网上有许多相关的示例,比如C#、Java、Python等都可以查看。
#2:创建自己的摄像机功能
你可以从互联网上复制或者粘贴摄像机代码,虽然使用起来并不会有什么问题,但你完全可以创建一款属于自己的相机,这就需要从头开始了解向量处理、转换矩阵、角度转换等。
首先你应该从FPS (First Person Shooter) 相机编码开始,如果你想要创建自己的一款游戏,我建议你不要急着使用它,先了解下 Virtual camera system这篇文章,根据自己的需求找到最适合您的相机类型。
#3:了解初级3D概念
当我开始接触3D概念时,我听说许多新名词比如anti-aliasing(抗锯齿),anisotropic filtering(各向异性过滤,occlusion testing(遮罩测试),z-buffer(Z缓存),alpha testing(alpha测试),shader language(着色器语言),bump mapping(凹凸纹理映射)等。如果你是一名游戏玩家,当你为游戏配置图形设置时,这些名词也许对你来说并不感到陌生。
#4:学习向量和矩阵
很多开发者常会忽略这一点,我强烈建议为了正确的管理相机,光线追踪,地形追踪(terrain following)等,你应该好好了解这方面信息。此外,你还应该学习最小三角原理(minimum trigonometry basis)。
#5:为3D模型加载程序编码
我建议先从.OBJ file或者.STL file开始,这是因为它们拥有同样的ASCII格式表示法。等你熟悉掌握后再转换到其复杂的格式比如:.3DS.。基于此,你不仅可以了解3D模型是如何保存的,还能绘制出其原始模式:triangles(三角),紧接着你就会明白如何绘制出图形引擎。
#6:使用碰撞算法(collision algorithm)
绘制是一回事,而管理又是另外一回事。在虚拟的3D领域里,没有什么物理定律,因此你需要创建它们。如果你想要创建一个对象而又不想穿过这堵墙,那么你必须创建一个内部的几何表示法,使用所有的运算法,点击查看更多信息。
#7:执行迷你型的粒子引擎
当我发现火、烟雾、亮光以及其他一些令人惊艳的效果时我感到很失望。这些效果在粒子引擎打造的3D游戏中常会见到,而这些粒子本质上附在相机的表层纹理上。你添加的粒子越多,呈现出的效果越逼真,但是性能则相对较弱。我的第一个粒子引擎是为了制作火箭烟雾,起初我并没有看粒子引擎方面的教程。之后我才意识到,我已经彻底改造了轮子。但说实话我很乐意这样做。
#8:学习最基本的3D软件模型
为了在应用中使用更改的3D模型,你至少应该知道操作流程比如转换,缩放、旋转、变形,导出其他格式并且制作简单的模型。我曾做过一些软件模型,这里我强烈建议使用3D Max或Maya。
#9:加载和播放动画
在3D中想要加载并正确播放动画是比较困难的事情。我不得不给3D max .XAF文件采用反向工程( reverse engineering)。我必须去学习新的东西比如bone hierarchy,matrix interpolation(矩阵插值)等等。看到自己的模型在移动,我想这是件非常可喜的事情。我建议从动画机器人开始,这是因为该模型类似动物和人都需要另一种技术叫做Skinning。
#10:为2D自定义图形用户界面(GUI)编码
当我开始XNA编程时,我被迫创建自己的GUI,这是因为XNA无法兼容任何Windows控件。由此给我两点启示:一是,创建自己的自定义GUI控件;另一个则是理解概念,包括事件处理和事件追踪(事件捕捉)。这并不简单,最难的控件是我设置的列表框(listbox),但一旦当你完成创建后,你可以在任何地方使用。
图片来源于网络
网友Bigcoder在博客上发表了有关3D编程四个境界,笔者总结了以下几点:
- 第一阶段:初学者阶段。这个阶段主要是熟悉3D图形学的基本原理和基本API的使用。
- 第二阶段:进阶阶段。有人会选择直接学引擎,开发游戏;有人则会选择先学场景管理和高级渲染。
- 第三阶段:3D成熟阶段。了解硬件的资源管理方式,结合自己的需求,解决资源的不当占用和带宽的随意浪费的情况。深入熟悉硬件,彻底了解显卡流水线的特性,充分利用流水线的特性进行优化,这个阶段是最煎熬的阶段,也是最开心的阶段。
- 第四阶段:达人阶段。寻求解决方案,这个阶段技术已经不是唯一追求目的了,还有很多很多其他的方面他会关注。因为他的目的是让整个社会承认他的价值,只有技术是不够的。
看看你属于哪个阶段吧?
PS:也许3D模型我们并不陌生,但是3D编程对于笔者来说是个新词,文中出现了许多专业的词语,笔者也是抱着学习的态度进行翻译的,倘若你在这篇文章中发现了错误,或者认为翻译有误的地方,欢迎告之我,希望这篇文章对你有所帮助。
英文出自:Gamedev
开始3D编程前需注意的十件事的更多相关文章
- 从Oracle转到Mysql前需了解的50件事
我本人比较关心的几点: 1. 对子查询的优化表现不佳. 2. 对复杂查询的处理较弱 4. 性能优化工具与度量信息不足 12. 支持 SMP (对称多处理器),但是如果每个处理器超过 4 或 8 个核( ...
- 转载:关于 Token,你应该知道的十件事
关于 Token,你应该知道的十件事 原文地址:http://alvinzhu.me/blog/2014/08/26/10-things-you-should-know-about-tokens/ 原 ...
- Web API核查表:设计、测试、发布API时需思考的43件事[转]
Web API核查表:设计.测试.发布API时需思考的43件事 当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...
- Web前端新手想提升自身岗位竞争力,需做好这3件事!
Web前端开发行业的发展前景毋庸置疑,只要是互联网企业,几乎都需要Web前端开发工程师.虽然Web前端入行门槛低,但竞争逐渐激烈,想要取得高薪,就一定要具备强大的实力.那么,在重庆Web前端培训学习中 ...
- 拿到offer过后--大学最后时光最想做的那十件事
昨天--2014.10.26,历史性的一刻,激动的签了欢聚时代(YY)的前端开发offer,工作地点是我喜欢的珠海(仅仅由于那边有我所向往的海还有自行车队,如今想想都乐开怀了,绕着海边骑单车的感觉真妙 ...
- debian 9 安装后需做的几件事
debian 9 安装后需做的几件事 安装环境:X86 >> Debian 9 Linux/GNU apt源更新 注意连上有线网络 刚安装好的debian系统中,/etc/apt/sour ...
- 关于 C 语言,我喜欢和讨厌的十件事
前言:最近有个家伙抱怨道“为什么我还要再用C?”-虽然我不同意他的说法,但至少他随口提到如果你“在一台拇指大小的电脑”上编程,或者为一门语言写引导程序,那么可以用C语言.要我说,写设备驱动,或者特定平 ...
- Java编程中“为了性能”需做的26件事
1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: (1)控制资源的使用,通过线程同步来控制 ...
- 转载:Cocos2D-x 游戏接入 Windows 设备所需做的六件事
原文地址:http://msopentech.com/zh-hans/blog/2014/05/09/cocos2d-x-%E6%B8%B8%E6%88%8F%E6%8E%A5%E5%85%A5-wi ...
随机推荐
- 单片机设计与KeilC编程总结
1基本原则 质量是关键.没有人会对很差的工作感到满足.当完成高质量的工作时,你会为此而感到骄傲.不管你是否知道,你都会因为你的高质量工作而得到信誉.因此,要想为自己所做的事感到骄傲,就需要建立个 ...
- 玩转Google开源C++单元测试框架Google Test系列(转载)
越来越多公司采用敏捷开发,单元和回归测试越来越重要,GTest作为最佳C++单元测试工具越来越多的被使用.转自 http://www.cnblogs.com/coderzh/archive/2009/ ...
- rnqoj-28-合唱队形-最长上升子序列
想当年大一的时候,一个最长上升子序列的问题使得我的罚时上升了不少....当年还是图样啊 这道题目本质就是求最长上升子序列 #include<stdio.h> #include<str ...
- 技巧:Linux 动态库与静态库制作及使用详解
技巧:Linux 动态库与静态库制作及使用详解 标准库的三种连接方式及静态库制作与使用方法 Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 L ...
- 【KMP】Number Sequence
KMP算法 KMP的基处题目,数字数组的KMP算法应用. 主要是next[]数组的构造,next[]存储的是字符的当前字串,与子串前字符匹配的字符数. 移动位数 = 已匹配的字符数 - 对应的部分匹配 ...
- 认识ptrace函数
认识ptrace函数 这是man对于ptrace这个系统调用的解释 http://man7.org/linux/man-pages/man2/ptrace.2.html #include <sy ...
- Gulp 简单的开发环境搭建
//获取gulp //require()是 node (CommonJS)中获取模块的语法 var gulp=require('gulp'); //获取gulp-concat模块(用于合并文件):np ...
- libsvm java 调用说明
libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.9libsvm命名空间下主要使用类:svm_model 为模型类,通过训练或加载训练好的模型文件获 ...
- Codeforces 385C Bear and Prime Numbers
题目链接:Codeforces 385C Bear and Prime Numbers 这题告诉我仅仅有询问没有更新通常是不用线段树的.或者说还有比线段树更简单的方法. 用一个sum数组记录前n项和, ...
- Nested Class Templates
Templates can be defined within classes or class templates, in which case they are referred to as ...