坐标系作用----描述空间中确切的一个点。
构建三维坐标系后,空间某点可用(x,y,z)表示
流水线中坐标变换
WebGL里面的6大坐标系(同OpenGL):
1. Object or model coordinates(物体或模型坐标系)
2. World coordinates(世界坐标系)
3. Eye (or Camera) coordinates(眼(或相机)坐标系)
4. Clip coordinates(裁剪坐标系)
5. Normalized device coordinates(标准设备坐标系)
6. Window (or screen) coordinates(屏幕坐标系)
我们要在屏幕上看到一个物体一般要经过一下几个步骤:物体的坐标从object coordainates到world coordinates再到camera coordinate的变换,在OPENGL中统一称为model-view转换,眼坐标通过乘以GL_PROJECTION变成了裁剪坐标,再除以w,即透视除法,变到NDC,NDC坐标通过平移和缩放来适应渲染的屏幕,屏幕坐标最终传递给绘制流水线中的光栅化处理部分来变成片元。
模型文件中、mesh(unity3d)中顶点数据(vertexData)-------------------物体坐标系
unity3d中 位于世界中某transform 的localposition ------------------世界坐标系
演算变换过程:
vertexpos(物体vertex某个顶点) ----------------物体坐标系
worldpos=vertexpos*modelMatrix ----------------世界坐标系
eyepos=vertexpos*modelMatrix*viewMatrix ----------------相机坐标系
clippos=vertexpos*modelMatrix*viewMatrix*projectmatrix ------------------裁剪坐标系
坐标系常识
1. unity世界坐标系为左手坐标系。
2. 说opengl是右手坐标系是因为很多opengl程序使用右手坐标系,opengl/webgl在归一化空间是左手坐标系(见webgl 编程指南439页)
3. unity3d 屏幕坐标系 以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height)。
4. unity3d 视口坐标系 以屏幕的左下角为(0,0)点,右上角为(1,1)。
5. uv坐标系,webgl 左上为屏幕原点,unity左下为屏幕原点
unity3d uv坐标系坐标系计算相关
1. unity3d中transform localrotation和localscale都是相对物体本身、localpositon是物体相对于父物体的概念。于是 localpositon*parent.worldmatrix=worldpostion;当setworldpsotion 数学演算的时候,使用的是parent的而不是自己的worldmatrix;
2. 分解worldmatrix:
pos1 =p.localmat * pos ; --------------------物体p上某点pos在父物体p1坐标系中的坐标系(p.parent=p1)
pos2 = p1.localmat * p.localmat * pos --------------------物体p上某点pos在父物体p2坐标系中的坐标系(p1.parent=p2)
pos3 = p2.localmat * p1.localmat * p.localmat * pos --------------------物体p上某点pos在父物体p3坐标系中的坐标系(p2.parent=p3)
. ................................
物体p在世界坐标系中的位置:
p.worldpos=pn.localmat*............* p3.localmat * p2.localmat * p1.localmat * p.localpos;
3. 物体p的worldrot计算过程:
p.worldrot =pn.localrot*.............* p3.localrot * p2.localrot * p1.localrot * p.localrot;
坐标系思考
1.矩阵是怎么能够达到变换顶点的?
2.w分量存在的意义?
3.左右手坐标系有什么差别、对数学库或其他有什么影响?
网友评论