如果3D游戏中按基于多边形来构建游戏引擎而不是基于光纤追踪(它可以很快的构建3D场景)。在计算漫反射时,从逻辑上讲是光能量衰减-》材质吸收->然后在计算在平面外法线向量的投影,
2./创建sin/cos查找表
目的:用初始化时间换得运行时更快的查找效率
3.碰撞检测也是属于运行时游戏引擎游戏性系统部分
4.看到书上一句话写的特别好:“3D图形学研究的不是DX和WIndows而是数学 数学还是数学”
深有体会 矩阵运算虐我千百遍。而且计算机图形学定义也是将数学模型利用公式参数和属性参数转换成像素点阵的过程。
5其实在我们上学期学DX 时候相当于直接用第三方软件包 去当做与图形硬件的沟通桥梁,相当于很底层的在做,
而游戏引擎我们也看那个运行时架构了吗 就是一个很多与DX同等级的 不过是负责物理碰撞 AI等的第三方软件包,
游戏引擎就是将这些包整合封装,组成自己的界面,再在他们的基础上 架构逻辑软件层级 比如高级的光影渲染啊,地形渲染啊
高级的骨骼动画啊,物理引擎啊 等等 现在我们实现一个简易线框引擎 就相当于 在做整合封装这些软件包的事情,
不过是不像U3D 虚幻那样有很好的用户界面 而且效果肯定也很低级很少 都只是代码库 但我们可以用。是这样的 搞清这个。
7.内联函数 不是属于类的那种可以包含在头文件中。C++不是内联函数的那种函数实现还可以放在头文件呢 这个当然可以。
“inline函数的特征是在调用的地方插入相应函数的代码,所以编译之后的目标文件里是没有inline函数体的,因为在要调用的地方它都已经用相应的语句替换掉了(当然这只限于内联成功的情况)。
如果我们将inline函数写在cpp文件里,但是绝大多数情况下,在我们用第三方类库的时候,我们只有头文件和目标文件(没有cpp文件),当你调用那个内联函数时,编译器没办法找到它。所以说将inline函数写在cpp文件中是没什么用的。 ”
8._asm {
mov eax, fp1 // move into eax fp2
imul fp2 // multiply fp1*fp2
shrd eax, edx, 16 // result is in 32:32 format
// residing at edx:eax
// shift it into eax alone 16:16
// result is sitting in eax
} // end asm
asm_
{}汇编语言块标识符
SM是C++中的一个关键字,用于在C++源码中内嵌汇编语言。ASM能写在任何C++合法语句中,目前asm还不是C的标准关键字,C11标准未加入正文,仅在Annex J中标记为“公共扩展”。
虽然asm并不是C的标准关键字(C11标准未加入正文,仅在Annex J中标记为“公共扩展”),但是大多数C实现都将其视为一个关键字。 [1]
下面介绍Visual C++中的asm关键字用法。
__asm关键字启动内联汇编并且能写在任何C++合法语句之处。它不能单独出现,必须接汇编指令、一组被大括号包含的指令或一对空括号。术语“__asm 块”在这里是任意一个指令或一组指令无论是否在括号内。 [3]
_asm { mov al, 2 mov dx, 0xD007 out al, dx }
另一种方法是,你可以在每个汇编指令前放置__asm
__asm mov al, 2
__asm mov dx, 0xD007
__asm out al, dx
因为__asm关键字是一个语句分隔符,你也可以将汇编指令放在同一行:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx
以上三个的例子产生相同的代码,但是第一种风格(把__asm块用括号括起来)有一些优势。括号可以清晰的将C或C++代码和汇编代码分开,并且避免了不必要的重复__asm关键字。括号也能避免模糊性。如果你想在__asm块的同一行放置一个C或C++语句,你必须将块用括号括起来。没有括号,编译器不能区分汇编代码在哪里停止以及C或C++代码在哪里开始。最后,因为在括号的文字有和原始MASM一样的格式,你能轻松的从一个已有的MASM源文件里剪切和黏贴文字到文件来。
9.啊啊啊啊 还有一件事 :就是转置矩阵和 逆矩阵是不一样的 我最近把二者搞混了,逆矩阵对应逆向变换操作
因为A*A的-1=单位矩阵,一个数乘单位矩阵没有变化,
就像a*3*1/3一样还是原来的a
OK结束
10还有他最后尽管我们绝大大大部分是以三角形图元为处理单位,
但最后从窗口坐标绘制时,我们不是有三角形三个顶点吗,
因为线段比多边形好裁剪,所以还是以条边一条边的变裁剪边绘制到帧缓冲