如果我使用属性,Qt和OpenGL并绘制一个三角形

时间:2014-10-24 14:36:21

标签: c++ qt opengl glsl shader

我的简单着色器有问题。 我计划用彩色绘制一个三角形(一个用于开始)。我想要的是:我为三角形的每个节点加入颜色并将其赋予顶点着色器,然后传递给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;

在顶点着色器中。 帮助我。

1 个答案:

答案 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");