2013-06-27 148 views
0

我想用z坐标作为深度,这样当我绘制两个物体时,一个可以出现在另一个的后面。我试图用拉3个坐标线,但它失败了,相比2个协调行(我把Z坐标为0.0fopengl中2d和3d线的区别

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); 
} 
+1

你的绘图代码是什么样的? –

回答

1

比2个协调行

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

在你告诉你的OpenGL的“3D”案件的图纸,订单坐标,当我得到不同的线路,这些:

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

尝试改变即23在您的glVertexAttribPointer()呼叫。

+0

这是非常有用的genpfault。非常感谢。是否有可能发送只有一次所有顶点相同的坐标z? –

+0

当然,只需制定一条制服。 – genpfault