gpt4 book ai didi

c++ - OpenGL 顶点着色器运行时问题(不使用 VBO 或纹理)

转载 作者:行者123 更新时间:2023-11-30 04:31:22 25 4
gpt4 key购买 nike

我有以下顶点着色器:

uniform mat4 uMVP;
attribute vec4 aPosition;
attribute vec4 aNormal;
attribute vec2 aTexCoord;
varying vec2 vTexCoord;
varying vec4 vPrimaryColor;
void main() {
gl_Position = uMVP * aPosition;
vPrimaryColor = vec4(1.0, 1.0, 1.0, 1.0);
vTexCoord = aTexCoord;
}

以及以下片段着色器:

uniform sampler2D sTex;
varying vec2 vTexCoord;
varying vec4 vPrimaryColor;
void main() {
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
}

请注意,虽然我有 vTexCoord 和 vPrimaryColor,但片段着色器中都没有使用它们。 (它们存在的原因是它们最终会存在)。

现在,我也暂时将uMVP设置为单位矩阵,并使用以下代码进行绘制:

// Load the matrix
glUniformMatrix4fv(gvMVPHandle, 1, false, &mvPMatrix.matrix[0][0]);

// Draw the square to be textured
glVertexAttribPointer(gvPositionHandle, 2, GL_FLOAT, GL_FALSE, 0, gFullScreenQuad);
glEnableVertexAttribArray(gvPositionHandle);
glVertexAttribPointer(gvTexCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, gFullScreenQuad);
glDrawArrays(GL_QUADS, 0, 4);

广场在哪里:

const GLfloat PlotWidget::gFullScreenQuad[] = { -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f};

因此,当我运行这个程序时,出现黑屏。这似乎不像你期望的那样。然而,当我改变阴影中的线条时:

vTexCoord = aTexCoord;

vTexCoord = vec2(1.0, 1.0);

它工作得很好。所以我假设代码的问题出在那行代码上,但我想不出 opengl 中有什么会导致这个问题。另外,我在这个项目中使用 Qt,这意味着这个类正在使用 QGLWidget。我从来没有遇到过 OpenGL ES 2.0 的这个问题。

有什么建议吗?

很抱歉标题含糊不清,但我什至不知道这会是哪一类问题。

最佳答案

你在检查 glGetShaderInfoLogglGetProgramInfoLog在你的着色器编译期间?如果没有,那么我建议将其作为第一个停靠港。

接下来要检查的是纹理坐标的绑定(bind)。是否正确设置了属性?数据是否有效?

最后,开始通过自由喷洒 glGetError 单步执行您的代码电话。它几乎肯定会在 glDrawArrays 上失败,这对你没有多大帮助,但这通常是我感到绝望的时候!

你可以试试 gDEBugger .我主要使用它来查找瓶颈并确保我正确释放 OpenGL 资源,因此不能为调试器提供担保,但值得一试。

关于c++ - OpenGL 顶点着色器运行时问题(不使用 VBO 或纹理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com