2016-04-03 92 views
0

嗯,很确定问题很简单,但我没有看到问题和调试器没有帮助我。无论如何,我试图画一架飞机,而我得到的只是黑色。我真的不确定是否绘制它,但太小而无法看到。opengl glDrawElements问题

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吗?如果我没有在第一个地方定义颜色,它应该是白色的?任何问题或者你想要更多的片段都会问,但我有一个感觉是问题在片段之内。

+0

另:我的编译器在尝试用'.0.5'(你的第3行)初始化'double'时出现语法错误。 –

+0

修复它,这是一个错字,我不想发布整个代码,我得到的VertexA /索引数据 – Leruce

回答

2

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

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

但计算w/h是一个整数除法。我建议你使用(double)w/h或者(GLdouble)w/h

+0

int不会被迫翻倍吗?那么,我检查和测试。似乎没有帮助。 znear/zfar看起来不错?我不认为这是问题,但不确定如何确定理想的使用方法。 – Leruce

+1

对不起,它没有帮助。划分完成时不考虑目标类型:表达式根据它们包含的类型进行评估,然后根据需要转换为目标类型。 –

3

你的对象完全不在视角内。您正在使用身份矩阵作为模型视图,而gluPrespectivenear=10far=100作为投影。结果,视图体积将从z = -10到z = -100,而您的对象位于z = -0.1到z = 0.1,因此它们被近平面剪切。