OpenGL 中的正交投影问题
Problem with orthographic projection in OpenGL
所以我是 OpenGL 的新手,我试图创建正交投影,但问题是当我这样做时
glm::mat4 ortho;
ortho = glm::ortho(-(float)WINDOW_WIDTH / 2.0f, (float)WINDOW_WIDTH / 2.0f, -(float)WINDOW_HEIGHT / 2.0f, (float)WINDOW_HEIGHT / 2.0f, -1.f, 1.f);
它工作正常但是 0, 0 点在屏幕中间
我想做的是在 window 的左下角设置 0、0 点,但是当我这样做时
glm::mat4 ortho;
ortho = glm::ortho(0.0f, (float)WINDOW_WIDTH, 0.0f, (float)WINDOW_HEIGHT, -1.0f, 1.0f);
结果是这样的
我搜索了这么久,所以现在我只是寻求帮助
这些是我的矩形的顶点位置
float positions[8] =
{
-100.0f, -100.0f,
100.0f, -100.0f,
100.0f, 100.0f,
-100.0f, 100.0f,
};
我也是用index buffer画的
unsigned indices[6] =
{
0, 1, 2,
2, 3, 0
};
这些是我的缓冲区
unsigned buffer = 0;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(float), positions, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
unsigned ibo = 0;
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(unsigned), indices, GL_STATIC_DRAW);
它是使用
绘制的
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr);
所以我做错的是在着色器中我将位置乘以正投影而不是正投影乘以位置所以
不要这样做:
gl_Position = position * u_MVP;
这样做:
gl_Position = u_MVP * position;
所以我是 OpenGL 的新手,我试图创建正交投影,但问题是当我这样做时
glm::mat4 ortho;
ortho = glm::ortho(-(float)WINDOW_WIDTH / 2.0f, (float)WINDOW_WIDTH / 2.0f, -(float)WINDOW_HEIGHT / 2.0f, (float)WINDOW_HEIGHT / 2.0f, -1.f, 1.f);
它工作正常但是 0, 0 点在屏幕中间
我想做的是在 window 的左下角设置 0、0 点,但是当我这样做时
glm::mat4 ortho;
ortho = glm::ortho(0.0f, (float)WINDOW_WIDTH, 0.0f, (float)WINDOW_HEIGHT, -1.0f, 1.0f);
结果是这样的
我搜索了这么久,所以现在我只是寻求帮助
这些是我的矩形的顶点位置
float positions[8] =
{
-100.0f, -100.0f,
100.0f, -100.0f,
100.0f, 100.0f,
-100.0f, 100.0f,
};
我也是用index buffer画的
unsigned indices[6] =
{
0, 1, 2,
2, 3, 0
};
这些是我的缓冲区
unsigned buffer = 0;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(float), positions, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
unsigned ibo = 0;
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(unsigned), indices, GL_STATIC_DRAW);
它是使用
绘制的glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, nullptr);
所以我做错的是在着色器中我将位置乘以正投影而不是正投影乘以位置所以
不要这样做:
gl_Position = position * u_MVP;
这样做:
gl_Position = u_MVP * position;