Opengl程序不正常!太邪门了!求帮忙啊该如何处理

Opengl程序不正常!太邪门了!求帮忙啊!C/C++ code#includestdio.h#includegl\glut.hvoid display(){glC

Opengl程序不正常!太邪门了!求帮忙啊!

C/C++ code
#include<stdio.h>#include<gl\glut.h>void display(){    glClear(GL_COLOR_BUFFER_BIT);    glColor3b(255,255,0);     //无论怎么改变数值,多边形都是黑色的    glBegin(GL_POLYGON);        glVertex3f(0.25,0.25,0.0);        glVertex3f(0.75,0.25,0.0);        glVertex3f(0.75,0.75,0.0);        glVertex3f(0.6,0.80,0.0);        glVertex3f(0.25,0.75,0.0);    glEnd();    glFlush();}void initlize(){    glClearColor(1.0,1.0,0.0,0.0);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);    //glMatrixMode(GL_MODELVIEW);}void display2(){}int main(int argc,char** argv){    glutInit(&argc,argv);    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);    glutInitWindowSize(250,250);    glutInitWindowPosition(100,100);    glutCreateWindow("hello my gl!");    initlize();    glutDisplayFunc(display);    glutMainLoop();    return 0;}


操作系统是Win7 64位, 编译环境VS2010

可以调节背景颜色,但是,无法给绘制的多边形着色。这是为什么呢?
1.首先,排除OpenGl不被显卡支持的可能,因为vtk是基于Opengl封装的,而我的电脑上能够完全正常运行基于vtk的程序。

[解决办法]
我以前用过opengl,但看不出你的问题在哪儿。我刚学opengl时调试都很顺利,不用灯光和材质,画直线颜色都正常。建议你再画点别的试试,三角形,球体等,一般加入灯光,材质后,颜色肯定会出来。
[解决办法]
改成 glColor3b(127,0,0); 试试吧
GLbyte 定义成 signed char, 不是 unsigned char 的, 255 超出范围了.

[解决办法]
OpenGL内部都是用浮点型来表示颜色的,这样glColor3f(0.2, 0.8, 0.1)设置就可以了,可能是驱动的问题,不过颜色最好直接用浮点型的。
[解决办法]
多边形是有正面反面的。纯属瞎猜啊。
[解决办法]
那些软件应该都是用glColor3f,就算你用整型,最终内部也是需要转成浮点的。


探讨

引用:

OpenGL内部都是用浮点型来表示颜色的,这样glColor3f(0.2, 0.8, 0.1)设置就可以了,可能是驱动的问题,不过颜色最好直接用浮点型的。


你说是驱动的问题,那为什么那些其他基于OpenGl的软件如vtk和3dslider都能在我的机子上正常运行呢?

[解决办法]
nene 教程都是这么开头的:
C/C++ code
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // 清除屏幕及深度缓存    glLoadIdentity();                    // 重置模型观察矩阵    glTranslatef(-1.5f,0.0f,-6.0f);        // 左移 1.5 单位,并移入屏幕 6.0    glBegin(GL_TRIANGLES);                    // 绘制三角形glColor3f(1.0f,0.0f,0.0f);            // 设置当前色为红色        glVertex3f( 0.0f, 1.0f, 0.0f);                // 上顶点
[解决办法]
我想你glColor3f是不是应该放在glBegin里面啊...
[解决办法]
C/C++ code
//清除屏幕和深度缓存       glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);      //重置模型视图矩阵       glLoadIdentity();          glTranslatef(0.0f,0.0f,-5.0f);//移入屏幕5个单位