0

2 つのオブジェクトを描画するときに、一方が他方の背後に表示されるように、深さとして z 座標を使用しようとしています。3つの座標を使用して線を描画しようとしましたが失敗し、2つの座標線の描画と比較すると異なる線が得られます(z座標を0.0fにします)

 GLfloat crossLine[] = {

        -1.0f, 0.2f,  // Vertex 1 (X, Y)
         0.0f, 0.2f,  // Vertex 2 (X, Y)

    };

 GLfloat crossLine[] = {

        -1.0f, 0.2f, 0.0f, // Vertex 1 (X, Y, Z)
         0.0f, 0.2f, 0.0f // Vertex 2 (X, Y, Z) 
    };

これはスナップショットです: http://img4.imageshack.us/img4/78/thwc.png

コードは次のとおりです。

void myWidget::initialize()
{
    m_program = new QOpenGLShaderProgram(this);
    m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
    m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
    m_program->link();
    m_posAttr = m_program->attributeLocation("posAttr");
    m_mycolor = m_program->uniformLocation("mycolor");
    m_source = m_program->uniformLocation("sourcePoint");
    m_matrixUniform = m_program->uniformLocation("matrix");

    glViewport(0, 0, width(), height());

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    m_program->bind();

    QMatrix4x4 matrix;
    matrix.perspective(60, 4.0/3.0, 0.1, 100.0);
    matrix.translate(0, 0, -2);
    matrix.rotate(100.0f * m_frame / screen()->refreshRate(), 0, 1, 0);

    m_program->setUniformValue(m_matrixUniform, matrix);


    glClearDepth(1.0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc( GL_LEQUAL );
    glEnable(GL_COLOR);

}

void myWidget::drawLine(GLfloat vertices[], GLint verticesNumber, GLfloat color[], GLfloat z)
{


    glUniform4fv(m_mycolor, 1, color);
    glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices);

    glEnableVertexAttribArray(0);
    glDrawArrays( GL_LINE_STRIP , 0, verticesNumber);
}
4

1 に答える 1

1

2 つの調整された線の描画と比較すると、異なる線が得られます

glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices);
                                 ^ whaaaat?

「3D」の場合、ライン座標が次のとおりであることを OpenGL に伝えています。

( -1.0f, 0.2f )
( 0.0f, 0.0f )

呼び出しでそれ2を a3に変更してみてください。glVertexAttribPointer()

于 2013-06-28T04:32:51.810 に答える