变换
//
0.设置相机位置
设置相机指向
设置相机远近裁剪面Z
设置视角角度
设置投影面的宽度和高度(2.0, 2.0*高度/宽度)
设置焦距(投影面的宽度和高度)d=(宽度/2)/tan(θ/2)
设置裁剪锥形框
都经过点:0.0.0
法线
右裁剪面:x=宽度/2,y=0,z=-(宽度/2)*(宽度/2)/d。
左裁剪面:x=-宽度/2,y=0,z=-(宽度/2)*(宽度/2)/d。
上裁剪面:x=0,y=0,z=-(宽度/2)*(宽度/2)/d。
左裁剪面:x=0,y=0,z=-(宽度/2)*(宽度/2)/d。
设置视口宽度高度
1.//重置 清空 渲染列表
2.将渲染的物体 加入到 渲染列表
3.旋转,移动矩阵 (本地旋转平移等)
4.本地坐标系转到世界坐标系
5.生成相机坐标系矩阵,主要是,平移,旋转求逆。(表现为 平移求负,旋转求负)
6.世界坐标系转到相机坐标系
7.相机坐标系转到投影
8.投影转到视口
9.画线或者画三角形或者画点
拾取
点击点:
视口坐标(屏幕)->
投影坐标->
相机坐标(原点(0,0,0) 射线经过投影面上的坐标点(x,y,d))
这时候,物体中心点到射线的距离就是 拾取 误差
或者 三角形面 与直线的交点就是点击位置(线面交点,再判断是否在三角形区域内(三角形可能要旋转))
动画:
骨骼 点
点相对于骨骼的坐标(即为:骨骼中心点平移到原点,再旋转与原点重合,此过程所有操作形成的矩阵,
称为在世界坐标系中点点相对于骨骼的矩阵,点的世界坐标再乘以这个矩阵即为:点相对于骨骼的
坐标)
点坐标动画后结果(世界坐标):= 点坐标*相对于骨骼1的矩阵*动画矩阵*相对于骨骼1的矩阵的逆*权重
+点坐标*相对于骨骼2的矩阵*动画矩阵*相对于骨骼2的矩阵的逆*权重
+点坐标*相对于骨骼3的矩阵*动画矩阵*相对于骨骼3的矩阵的逆*权重
+。。。。