opengl glDrawElements问题

时间:2016-04-03 17:47:26

标签: c opengl drawing

嗯,非常确定问题相当简单,但我没有看到问题,调试器也没有帮助我。无论如何,我试图画一架飞机,而我得到的只是黑色。老实说,我不确定它是否吸引它,但是太小而无法看到。

int index[][3] = {{0,1,4}, {0,3,4}, {1,2,5}, {1,4,5}};
double VertexA[][3] = {{0.0 , 0.0 , -.0415}, {0.5, 0.0, .6543}, {1.0,0,-.0415},
                       {0.0, 0.5, .093}, {0.5, 0.5, -.070}, {1.0, 0.5 , .093},
                       {0.0,1.0, -.0415}, {0.5, 1.0, .6543}, {1.0,1.0,-.0415}}

 void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_DOUBLE, 24, VertexA);
    glDrawElements(GL_TRIANGLES, 4, GL_UNSIGNED_INT, index);
    glDisableClientState(GL_VERTEX_ARRAY);
    glutSwapBuffers();
 }
 void reshape(int w, int h) {
    if (w <= h) {
      glViewport(0,(h-w)/2, w,w);
    }
    else {
      glViewport((w-h)/2,0,h,h);
    }
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(30.0, w/h, 10.0, 100.0);
    glMatrixMode(GL_MODELVIEW);

 }

这是使用定义的VertexA / Index数组修改的代码片段。我非常确定index / vertexArray是正确获取的,它绘制它的部分是我得到问题的地方。我猜测我误用了glDrawElement或者gluPerspective。老实说,我不确定。我需要ColorArray吗?如果我没有首先定义颜色,它应该是白色的吗?任何问题,或者你想要更多的片段问题,但我有一种感觉问题是在片段内。

2 个答案:

答案 0 :(得分:3)

你的物体完全不在观察视锥中。您使用标识矩阵作为ModelView,gluPrespective使用near=10far=100作为投影。因此,视图体积将从z = -10到z = -100,而您的对象位于z = -0.1到z = 0.1,因此它们会被近平面剪切。

答案 1 :(得分:2)

函数gluPerspective需要aspect的浮点参数。你的行是

gluPerspective(30.0, w/h, 10.0, 100.0);

但计算w/h是整数除法。我建议您使用(double)w / h(GLdouble)w / h