查看: 1408  |  回复: 8
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

sukiyq

木虫 (小有名气)

[求助] OpenGL里全局变量引起的奇怪的问题

下边是一个光照的OpenGL示例程序,运行有错误,把程序里完全没有用到的全局变量“GLfloat light_pos[] = {1.0, 2.0, 3.0, 0.0};”一行删除运行就正常了。这是为什么?明明这个全局变量并没有用到,但是设置了它程序就会出错,好奇怪。

#include
        GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},
        {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},
        {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};


        GLfloat colors[][4] = {{1.0,0.0,0.0,0.5},
        {0.0,1.0,1.0,0.5}, {1.0,1.0,0.0,0.5},
        {0.0,1.0,0.0,0.5}, {0.0,0.0,1.0,0.5}, {1.0,0.0,1.0,0.5}};
        GLfloat light_pos[] = {1.0, 2.0, 3.0, 0.0};

void polygon(int a, int b, int c , int d)
{
        glColor4fv(colors[a]);
        if(colors[a][4] != 1.0) glDepthMask(GL_TRUE);
                else glDepthMask(GL_FALSE);
        glBegin(GL_POLYGON);
                glVertex3fv(vertices[a]);
                glVertex3fv(vertices);
                glVertex3fv(vertices[c]);
                glVertex3fv(vertices[d]);
        glEnd();
}

void cube()
{
        polygon(0,3,2,1);
        polygon(2,3,7,6);
        polygon(3,0,4,7);
        polygon(1,2,6,5);
        polygon(4,5,6,7);
        polygon(5,4,0,1);
}

static GLfloat theta[] = {0.0,0.0,0.0};
static GLint axis = 2;

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        glRotatef(theta[0], 1.0, 0.0, 0.0);
        glRotatef(theta[1], 0.0, 1.0, 0.0);
        glRotatef(theta[2], 0.0, 0.0, 1.0);
        cube();
        glutSwapBuffers();
}

void spinCube()
{
        theta[axis] += 2.0;
        if( theta[axis] > 360.0 ) theta[axis] -= 360.0;
        glutPostRedisplay();
}

void mouse(int btn, int state, int x, int y)
{
        if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) axis = 0;
        if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) axis = 1;
        if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2;
}

void myReshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
        glOrtho(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w,
            2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0);
    else
        glOrtho(-2.0 * (GLfloat) w / (GLfloat) h,
            2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0, -10.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
}

void
main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(500, 500);
    glutCreateWindow("colorcube";
    glutReshapeFunc(myReshape);
    glutDisplayFunc(display);
    glutIdleFunc(spinCube);
    glutMouseFunc(mouse);
    glEnable(GL_DEPTH_TEST); /* Enable hidden--surface--removal */
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glutMainLoop();
}
回复此楼
比菜鸟强一点点
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

小鸟袅袅

新虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
glVertex3fv(vertices);
glutCreateWindow("colorcube";
修改为:
  glVertex3fv(vertices);
glutCreateWindow("colorcube";
其他任何地方不修改,结果显示一个旋转的正方形
(这与你设置的窗口有关系,如果为视图窗口显示为立方体)
4楼2012-09-11 09:03:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

conanwj

版主 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
出错信息是什么?
请贴出来。
2楼2012-09-10 20:16:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sukiyq

木虫 (小有名气)

引用回帖:
2楼: Originally posted by conanwj at 2012-09-10 20:16:48
出错信息是什么?
请贴出来。

没有出错信息,就是加上上边那句,绘制的立方体不能正常显示,运动后旧面会被新面覆盖;不加上边那句就可以正常显示和刷新。
比菜鸟强一点点
3楼2012-09-10 22:12:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

conanwj

版主 (著名写手)

【答案】应助回帖

★ ★ ★
sukiyq: 金币+3, ★有帮助 2012-09-23 09:10:56
引用回帖:
3楼: Originally posted by sukiyq at 2012-09-10 22:12:04
没有出错信息,就是加上上边那句,绘制的立方体不能正常显示,运动后旧面会被新面覆盖;不加上边那句就可以正常显示和刷新。...

编译过程中,
void polygon(int a, int b, int c , int d)函数的
glVertex3fv(vertices);此句错误,
应改为glVertex3fv(vertices);

在鼠标左键拖动立方体后,光照会造成立方体局部黑暗。
LZ所说的那句代码是否加上效果都是一样的。
请检查代码,加入合适的光照不吧。。
5楼2012-09-11 09:06:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +4 wangyl_123 2026-10-10 8/400 2026-10-12 18:09 by wangyl_123
[硕博家园] 极限拉扯,如何抉择 +5 Isak0320 2026-10-12 7/350 2026-10-12 18:03 by 有人要害朕
[教师之家] 课题组会帮你通过考核么? +3 好运来~9527 2026-10-10 6/300 2026-10-12 14:55 by 简单化xn
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[基金申请] 入职后第一次管课题组的专利缴费,对账才发现官费比别人多掏了一倍 +5 13108017953 2026-10-08 5/250 2026-10-10 11:15 by wdwd123
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见