我尝试了解OpenGL模型视图矩阵。 我以为我理解它,但在我测试之后我很困惑。 为什么,如果我用
设置OpenGL MODELVIEW矩阵glMatrixMode(GL_MODELVIEW);
GLfloat model[] = { 1, 0, 0, -1,
0, 1, 0, -1,
0, 0, 1, 0,
0, 0, 0, 1 };
glLoadMatrixf(model);
glBegin(GL_TRIANGLES);
glVertex4f(0, 0, 0, 1);
glVertex4f(1, 0, 0, 1);
glVertex4f(0, 1, 0, 1);
glEnd();
,我画的所有东西都不是x上的-1和y轴上的-1,我只得到一个疯狂的结果? 我认为传递的顶点都与模型矩阵相乘。
答案 0 :(得分:1)
来自网站:http://www.opengl.org/archives/resources/faq/technical/transformations.htm
“翻译组件占据16元素矩阵的第13,14和15个元素,其中索引编号从1到16,如OpenGL 2.1规范的2.11.2节所述。”
在float数组中,转换组件是第4和第8个组件。
您应该将其更改为:
GLfloat model[] = { 1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
-1,-1, 0, 1 };
您创建的矩阵将导致剪辑坐标的w分量表示为:
gl_Position.w = (position.x * -1.0) + (position.y * -1.0) + 1
由于ndc = gl_Position / gl_Position.w,这将导致规范化设备坐标(ndc)为:
ndc.x = position.x / ( (position.x * -1.0) + (position.y * -1.0) + 1 )
ndc.y = position.y / ( (position.x * -1.0) + (position.y * -1.0) + 1 )
ndc.z = position.z / ( (position.x * -1.0) + (position.y * -1.0) + 1 )
我能想象的会导致一些奇怪的结果。