我有一个三角形:
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f
};
我在z轴上翻译了三角形。然后我尝试围绕x和y轴旋转:
mat4 rotationMatrix = glm::rotate(mat4(1.0f), rotation, vec3(1.0f, 0.0f, 0.0f));
mat4 translationMatrix = glm::translate(mat4(1.0f), vec3(position.x, position.y, -2.3f));
mat4 projectionMatrix = glm::perspective(90.0f, WindowWidth/WindowHeight, 1.0f, 1000.0f);
这是我的顶点着色器:
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace;
uniform mat4 rotationMatrix;
uniform mat4 translationMatrix;
uniform mat4 projectionMatrix;
void main()
{
gl_Position = projectionMatrix*rotationMatrix*translationMatrix* vec4(vertexPosition_modelspace,1.0f);
}
因为我无法添加图片,所以我必须添加图片'链接:
没有转变: https://www.dropbox.com/s/1eompnmjauvll9x/3.png
围绕x轴旋转: https://www.dropbox.com/s/9bpqb6nfudruuhx/ilk.png
围绕y轴旋转: www.dropbox.com/s/xxk9ofxfp4zk8ta/2.png
这对我来说似乎是正常的。为什么会这样?
答案 0 :(得分:1)
这对我来说很正常。
由于您未使用视图矩阵,因此变换的结果(以及您在投影后在屏幕上看到的顶点坐标)将显示一个严重扭曲的三角形(变大)在Y方向上),当它向你旋转时,反过来,当它旋转离你时变小。
如果您想确保转换正确,请添加视图矩阵:
glm::mat4 viewMatrix = glm::lookAt(glm::vec3(5.0), glm::vec3(0.0), glm::vec3(0.0, 1.0, 0.0));
您可以将它作为制服发送到着色器,并使其看起来像这样:
gl_Position = projectionMatrix*viewMatrix*rotationMatrix*translationMatrix* vec4(vertexPosition_modelspace,1.0f);
如果您仍然可以看到失真效果,那么问题确实存在,但是从您的代码来看,我的猜测是它已经全部运转良好:)