我的简单着色器有问题。 我计划用彩色绘制一个三角形(一个用于开始)。我想要的是:我为三角形的每个节点加入颜色并将其赋予顶点着色器,然后传递给fragmant并获得一个五颜六色的三角形。我得到的是什么 - 没有三角形。所以我决定简化一个小工具 - 我给着色器提供参数,但我不使用它们。我得到了相同的结果。它的C ++代码:
QVector4D colors[3];
...
glBegin(GL_TRIANGLES);
invers_sh.setAttributeValue("b_color", colors[1]);
glVertex2d(0, 0);
invers_sh.setAttributeValue("b_color", colors[1]);
glVertex2d(2.0, 0);
invers_sh.setAttributeValue("b_color", colors[2]);
glVertex2d(0, 2.0);
glEnd();
顶点着色器:
in vec4 vertex;
attribute vec4 b_color;
varying vec4 color_v;
uniform mat4 qt_ModelViewProjectionMatrix;
void main( void )
{
gl_Position = qt_ModelViewProjectionMatrix * vertex;
color_v = b_color;
}
片段着色器:
varying vec4 color_v;
void main( void )
{
gl_FragColor = vec4(1.0, 0, 0, 0);
}
如果我在C ++代码和行中注释所有setAttributeValue,我想我得到了我的红色三角形
color_v = b_color;
在顶点着色器中。 帮助我。
答案 0 :(得分:0)
您可以测试以下invers_sh.setAttributeValue("b_color", colors[0]);
=>用
替换该行invers_sh.setAttributeValue(b_colorLocation, colors[1]);
为colorLocation设置全局
int b_colorLocation;
并将其添加到编译着色器的位置获取b_color的位置:
b_colorLocation = invers_sh.attributeLocation("b_color");