《3D游戏编程大师技巧》读书笔记

转转悠悠,这个坑,还没有爬出来,之前做游戏的时候以为不需要了,现在做渲染又绕回来,从另外一个角度说明,我面对的问题本质上是一类的。目录看了几遍,决定还是用“曳光弹”打法,从当前最需要的地方入手。这书翻译的不咋滴,以后看看原版—2020年4月23日 13点04分

第7章 渲染3D线框世界
  1. 线框引擎的总体体系结构
  • 1.1 数据结构和3D流水线
    物体->多边形->顶点->变换->光栅化->屏幕
    所有的物体都会转化成多边形,然而,在简单的引擎中,物体将原封不动作为实体进行处理和渲染
  • 1.2 主多边形列表
    (当游戏中涉及多个物体时,会形成列表,跳过不看)
  • 1.3 新的软件模块
    (没什么用,跳过不看。)
  1. 编写一个简单的3D文件加载器
    (主动忽视,我并不需要这一部分内容。)
  2. 建立3D流水线
  • 3.1 通用变换函数
    旋转、平移、投影

  • 3.2 局部坐标到世界坐标变换
    物体列表的局部坐标到世界坐标变换:手工变换、矩阵变换。
    渲染列表的局部坐标到世界坐标变换

  • 3.3 欧拉相机模型
    视距、视野、远近裁剪面、一定宽度和高度的视平面(表示实际的光栅窗口)。
    相机的结构:

typedef struct cam4dv1_typ
{
int state; //记录相机的状态
int attr;//定义相机属性

POINT4D pos;//相机在世界坐标系中的位置
VECTOR4D dir;//欧拉角度或UVN相机模型的注视方向
VECTOR4D u;//UVN相机模型的朝向向量
VECTOR4D v;
VECTOR4D n;
POINT4D target;//UVN模型的目标位置

float view_dist_h;//水平视距和垂直视距
float view_dist_v;

float fov; //水平方向和垂直方向的视野



……


MATAIX4X4 macm;//用于存储世界坐标到相机坐标变换矩阵
MATAIX4X4 mper;//用于存储相机坐标到透视坐标变换矩阵
MATAIX4X4 mscr;//用于存储透视坐标到屏幕坐标变换矩阵
}
  • 3.4 UVN相机模型
    基于球面坐标

  • 3.5 世界坐标到相机坐标变换
    相机模型根据相机的位置和朝向信息创建了一个矩阵,这包括两部:平移和旋转。第一步使用该矩阵的逆矩阵对世界中的所有物体、顶点和多边形等进行平移,这时所有的几何体都被平移到相机位于原点时的相对位置。第二部是旋转,依次执行三次旋转,欧拉相机中一般用YXZ或ZYX,

  • 3.6 物体剔除

  • 3.7 背面消除

  • 3.8 相机坐标到透视坐标变换
    两种方法:手工执行数学运算,矩阵执行变换。

  • 3.9 透视坐标到屏幕(视口)坐标变换
    视平面的中心为原点,其+x轴指向右方,+y轴指向上方。光栅屏幕的原点位于左上角,y轴方向与此相反。

  • 3.10 合并透视变换和屏幕变换

ps:所谓的网格绘制就是在重复的画三角形,画一个和画若干个的区别。

猜你喜欢

转载自blog.csdn.net/rabbitbride/article/details/105701807