【问题标题】:OpenGL weird renderingOpenGL奇怪的渲染
【发布时间】:2014-12-18 23:49:04
【问题描述】:

我正在尝试获得一个正常工作的 OpenGL 渲染器,但我被困在了一个奇怪的地方。我正在生成一个看起来正确的模型、视图和投影矩阵。 GLIntercept 给了我以下日志:

glClear(GL_COLOR_BUFFER_BIT)
glEnableVertexAttribArray(0)
glUniformMatrix4fv(0,1,false,[... see below ...])
glBindBuffer(GL_ARRAY_BUFFER,1)
glVertexAttribPointer(0,3,GL_FLOAT,false,0,0000000000000000)
glDrawArrays(GL_POLYGON,0,3) GLSL=3 
glDisableVertexAttribArray(0)
wglSwapBuffers(FFFFFFFF9D011AB3)=true 

我的MVP矩阵如下:

 [
   0,050000 0,000000 0,000000 0,500000
   0,000000 0,050000 0,000000 0,500000
   0,000000 0,000000 5,000000 0,000000
   0,000000 0,000000 -50,000000 1,000000
 ]

这是我正在使用的顶点着色器:

#version 330

layout (location = 0) in vec3 vertex;
uniform mat4 mvp;

out vec4 color;

void main() {
    gl_Position = mvp * vec4(vertex, 0.0);
    color = vec4(1, 1, 1, 1);
}

和片段着色器:

#version 330

in vec4 color;
out vec4 fragColor;

void main() {
    fragColor = color;
}

This是我计算投影矩阵的方式,坐标最简单 可能,一个扁平的立方体:

[
    new Vector3f(-1, -1, 0),
    new Vector3f(1, -1, 0),
    new Vector3f(1, 1, 0),
    new Vector3f(-1, 1, 0)
]

然而,这会导致一件奇怪的事情:

但是,如果我在应用程序中将矩阵与相同的坐标相乘,我会得到预期的结果:

(0,45 0,45 0,00 1,00)
(0,55 0,45 0,00 1,00)
(0,55 0,55 0,00 1,00)
(0,45 0,55 0,00 1,00)

有人可以指点我解决这个问题的方向吗?

【问题讨论】:

  • 您的矩阵看起来不正确。您有一排全为零的行。好像你将w 转换为 0.0,这会搞砸一切。
  • @derhass 查看编辑,我修复了(是吗?)MVP 矩阵计算,但结果仍然完全相同相同...另外,我特别对 GLSL 和应用内计算似乎不同的原因感兴趣。

标签: opengl rendering shader lwjgl renderer


【解决方案1】:

主要问题在于您的顶点着色器:

gl_Position = mvp * vec4(vertex, 0.0);

将常规 3D 坐标扩展为齐次坐标时,需要将 w 组件设置为 1.0。所以语句应该是这样的:

gl_Position = mvp * vec4(vertex, 1.0);

您有 4 个顶点也有点奇怪,但将 3 作为顶点数(最后一个参数)传递给绘图调用:

glDrawArrays(GL_POLYGON, 0, 3);

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多