【发布时间】:2015-07-08 16:04:39
【问题描述】:
我试图实现一个正交投影矩阵 - 目前,我要做的就是在屏幕上绘制一个三角形,没有矩阵也可以正常工作,但是只要将坐标乘以矩阵,三角形就不会' t 适合页面(很难解释,但一个点在中心,另外两个远离页面)。我已经尝试了一个不同的矩阵,其中有负坐标(所以屏幕的中心是原点)并且它工作正常 - 我在这里做错了什么吗?相关代码如下:
GLfloat vertices[] =
{
-1.0f, -1.0f, 0.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f,
0.0f, 1.0f, 0.0f, 1.0f,
};
glm::mat4 projectionMatrix = glm::ortho(0.0f, 960.0f, 640.0f, 0.0f, 1.0f, -1.0f);
glm::mat4 viewMatrix = glm::lookAt(glm::vec3(0,0,5),glm::vec3(0,0,0),glm::vec3(0,1,0));
glm::mat4 modelMatrix = glm::mat4(1.0f);
glm::mat4 PVM = projectionMatrix * viewMatrix * modelMatrix;
GLuint matrixID = glGetUniformLocation(shader.getShaderID(), "PVM");
然后是顶点着色器:
#version 130
in vec4 vertexPosition;
uniform mat4 PVM;
out vec4 position;
void main()
{
gl_Position = vertexPosition * PVM;
position = vertexPosition;
}
我刚刚包含了我认为相关的代码。
【问题讨论】:
-
您根据什么确定传递给
glm::ortho的值?例如,我看到“底部”大于“顶部”值(第三个参数大于第四个)。这是故意的吗? -
通常 glsl/glm 假设 M * v 形式的乘法。除非您在代码中的某处转置矩阵,否则
PVM * vertexPositionnicht 可以解决问题。 -
@Nasser,是的,这是故意的——所以原点在左上角,我认为这是 2d 游戏的标准(如果我错了,请纠正我)。
-
@BDL 是的,这似乎确实涉及问题,将其与应用其他建议的内容一起切换似乎可以解决问题。感谢您的帮助