Opengl Basic cube drawing, but cube draws in single color
我正在尝试绘制具有6种不同面颜色的5 * 5 * 5大小的立方体。但是,当我执行此操作时,它使用单色绘制,下面是多维数据集的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | void init(void) { glClearColor(0,0,0,0); glShadeModel(GL_FLAT); } void DrawCube(void) { glLoadIdentity(); gluLookAt(10, 10, 10, 0, 0, 0, 0, 1, 0); glBegin(GL_POLYGON); //face in xy plane glColor3f(0.82, 0.41, 0.12);//this the color with which complete cube is drawn. glVertex3f(0,0 ,0 ); glVertex3f(5, 0, 0); glVertex3f(5, 5, 0); glVertex3f(0, 5, 0); //face in yz plane glColor3f(1, 0, 0); glVertex3f(0, 0, 0); glVertex3f(0, 0, 5); glVertex3f(0, 5, 0); glVertex3f(0, 5, 5); //face in zx plance glColor3f(0, 1, 0); glVertex3f(0, 0, 0 ); glVertex3f(0, 0, 5); glVertex3f(5, 0, 5); glVertex3f(5, 0, 0); //|| to xy plane. glColor3f(0, 0, 1); glVertex3f(0, 0, 5); glVertex3f(5, 0, 5); glVertex3f(5, 5, 5); glVertex3f(0, 5, 5); //|| to yz plane glColor3f(0.73, 0.58, 0.58); glVertex3f(0,0 ,5 ); glVertex3f(5, 0, 5); glVertex3f(5, 5, 5); glVertex3f(0, 5, 5); //|| to zx plane glVertex3f(0.58, 0, 0.82); glVertex3f(0, 5, 0 ); glVertex3f(0, 5, 5); glVertex3f(5, 5, 5); glVertex3f(5, 5, 0); glEnd(); glFlush(); } void reshape(int w,int h){ glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1, 1, -1, 1, 1.5, 20); glMatrixMode(GL_MODELVIEW); } int main(int argc, char** argv){ glutInit(&argc, argv);//we initizlilze the glut. functions glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(DrawCube); glutReshapeFunc(reshape); glutMainLoop(); return 0; } |
问题是
1 | glBegin(GL_POLYGON); |
这意味着以下所有顶点均属于同一凸多边形。
更改为
1 | glBegin(GL_QUADS); |
应该解决您的问题。
通常,绝对不要使用GL_POLYGON,因为它通常非常慢。
使用GL_QUADS,如果我没记错的话,如果所有顶点不在同一平面上,则GL_POLYGON可能具有未定义的行为。另外,将GL_SMOOTH用于阴影模型,我认为GL_FLAT会为整个脸部使用第一种颜色,再次,如果我没记错的话,已经有一段时间了。