QT OpenGL正在将我的Vector绘制到无限

时间:2015-10-15 12:54:53

标签: matrix vector

我想在OpenGL和QT 5.5中创建一个简单的Cube of Lines。 问题是,如果我将一条简单的线绘制到另一个Z坐标(从z -1.0f到z 1.0f),该线看起来就像是z =无穷大。

Vertex stackVerts[] = {
        {QVector3D(-1.0f, -1.0f, 1.0f), // 0
        QVector3D(+1.0f, +0.0f, +0.0f)}, // Colour

        {QVector3D(1.0f, -1.0f, 1.0f), // 1
        QVector3D(+0.0f, +1.0f, +0.0f)}, // Colour

        {QVector3D(-1.0f, 1.0f, 1.0f), // 2
        QVector3D(+0.0f, +0.0f, +1.0f)}, // Colour

        {QVector3D(1.0f, 1.0f, 1.0f), // 3
        QVector3D(+1.0f, +1.0f, +1.0f)}, // Colour

        {QVector3D(-1.0f, -1.0f, -1.0f), // 4
        QVector3D(+1.0f, +0.0f, +0.0f)}, // Colour

        {QVector3D(1.0f, -1.0f, -1.0f), // 5
        QVector3D(+0.0f, +1.0f, +0.0f)}, // Colour

        {QVector3D(-1.0f, 1.0f, -1.0f), // 6
        QVector3D(+0.0f, +0.0f, +1.0f)}, // Colour

        {QVector3D(1.0f, 1.0f, -1.0f), // 7
        QVector3D(+1.0f, +1.0f, +1.0f)}, // Colour

};
GLushort stackIndices[] = {
    0,1,
    1,3,
    3,2,
    2,0,
    0,4,
};
...
glDrawElements(GL_LINES, 10, GL_UNSIGNED_SHORT, 0);

矩阵设置为Uniform:

_transMatrix.setToIdentity();
_transMatrix.perspective(60.0f, (float)(width()/height()), 0.1f, 100.0f);
_transMatrix.translate(0, 0, -3);
_transMatrix.rotate(64,0,1,0);
_program.setUniformValue("transMatrix",  _transMatrix);

Vertex.glsl:

#ifdef GL_ES
// Set default precision to medium
precision mediump int;
precision mediump float;
#endif

attribute vec3 a_position;
attribute vec3 a_color;

uniform mat4 transMatrix;

varying vec3 theColor;
void main()
{
    vec4 v = vec4 (a_position, 1.0);
    gl_Position = v * transMatrix;
    theColor = a_color;
}

GL_DEPTH_TEST已启用,如果我将z的转换更改为-1000,它仍会转到无穷大。

Translate z=-3 Translate z=-1000

0 个答案:

没有答案