3D编程的一些总结
来源:互联网 发布:java mongotemplate 编辑:程序博客网 时间:2024/05/19 18:47
以下是这段时间自己的一些理解,想法和总结:
渲染UI以及其他字体方式:在3D场景渲染完成以后,关闭z缓存,投影方式由原来的透视投影变为正交投影(在代码中表现为使用不同的投影矩阵进行顶点计算),然后开始渲染2D图像(比如UI,字体等),由于z缓存已经关闭,所以渲染2D的时候需要使用类似画家算法的方法按顺序把2D图像渲染到backbuffer中。还有值得注意的是,一般UI和字体的viewMatrix(视图变换矩阵)是不变的(不随摄像机的移动而变换,区别与3D场景中的一切),所以可以在初始化时就定义好。
视截体剔除(frustum culling): 这是提高3D场景渲染效率的一种方式。其实就是在渲染每一个3D模型之前,判断一下此模型(一般会给复杂的模型定义一个bounding volume代表此模型的边界,而不是使用模型的每一个三角面来进行测试,以此减少运算量)是否在视截体(就是近平面和远平面构成的一个立体的梯状体,共六个面,面的构建和检测算法貌似都得自己实现)中,如果检测结果为否,则不对此物体进行绘制操作。相比之下,如果不进行如前所述的方法,对3D场景中的每一个模型都进行渲染操作,则D3D在内部进行剔除操作时,会对场景中的每一个模型的每一个三角面进行剔除操作,显然这是非常笨拙和缓慢的做法(比如一个模型含有1W个三角面,需要进行1W次的三角面的测试剔除操作,如果使用bounding volume,通常只是一个立方体或者圆柱体或者其他简单的几何体来代表这个模型)。
D3D字体系统:字体的显示属于2D显示,和UI一样,渲染时需要关闭z缓存,使用正交投影,viewMatrix保持不变。D3D貌似提供API来进行字体绘制(据我了解D3D9是提供的),但大部分3d应用程序的字体系统都有很高的定制需求,所以会自己实现一套字体系统。基本原理就是使用贴图的方式(两个三角形构成一个正方形,把贴图放到此正方形中),把需要的字体渲染到场景中。
- 3D编程的一些总结
- J2ME 3D编程的一些资料
- J2ME 3D编程的一些资料
- 如何学好游戏3D引擎编程的一些经验
- 如何学好游戏3D引擎编程的一些经验
- K-D树算法的一些总结
- swing 编程的一些总结
- 网络编程的一些总结
- 3d优化总结和一些新思路
- Unity 3D 一些问题总结
- 刘徐阳总结的一些编程总结
- 一些3D的基本知识
- 一些python的3d
- windows direct 3d 编程总结
- Linux 3D 编程学习总结
- 使用sublime Text 3进行java编程的一些总结
- J2ME程序开发全方位基础讲解汇总--J2ME 3D编程的一些资料
- 关于如何学好游戏3D引擎编程的一些经验
- linux 下各errno的意义
- Dm8168 多核通信
- WebGL在Chrome和firefox中正常配置
- JAVA内存的一些总结(一) 内存的划分
- 错误处理——According to TLD or attribute directive in tag file, attribute test does not accept any expre
- 3D编程的一些总结
- git的简单使用(3)
- 我的组件之产生式编程
- 2013,重新起航
- 信息安全评价政策研究
- Android程序不在最近运行中显示
- ThinkPHP学习笔记(九)Thinkphp中的查询方式大综合
- 用eclipse开发xifre webservice
- JAVA内存的一些总结(二) 对象访问