24小时热门版块排行榜    

查看: 1108  |  回复: 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的回帖

sukiyq

木虫 (小有名气)

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

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

conanwj

版主 (著名写手)

【答案】应助回帖

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

小鸟袅袅

新虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
glVertex3fv(vertices);
glutCreateWindow("colorcube";
修改为:
  glVertex3fv(vertices);
glutCreateWindow("colorcube";
其他任何地方不修改,结果显示一个旋转的正方形
(这与你设置的窗口有关系,如果为视图窗口显示为立方体)
4楼2012-09-11 09:03:36
已阅   回复此楼   关注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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[公派出国] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 5lbyq5wrhb 2026-02-07 4/200 2026-02-08 08:47 by vs90ilomwc
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 5lbyq5wrhb 2026-02-07 4/200 2026-02-08 08:46 by vs90ilomwc
[论文投稿] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 3rkserf6qr 2026-02-07 5/250 2026-02-08 08:32 by vs90ilomwc
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +3 3rkserf6qr 2026-02-07 4/200 2026-02-08 08:27 by vs90ilomwc
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +5 2h7du0nuhk 2026-02-07 6/300 2026-02-08 08:26 by vs90ilomwc
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 6/300 2026-02-08 08:07 by vs90ilomwc
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 7/350 2026-02-08 08:06 by vs90ilomwc
[教师之家] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 7/350 2026-02-08 07:52 by vs90ilomwc
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 8/400 2026-02-08 07:27 by vs90ilomwc
[教师之家] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 8/400 2026-02-08 07:26 by vs90ilomwc
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全 +4 2h7du0nuhk 2026-02-07 8/400 2026-02-08 07:07 by vs90ilomwc
[硕博家园] 博士延得我,科研能力直往上蹿 +8 偏振片 2026-02-02 8/400 2026-02-08 06:52 by liyeqik
[教师之家] 有院领导为了换新车,用横向课题经费买了俩车 +7 瞬息宇宙 2026-02-04 7/350 2026-02-07 21:47 by tfang
[有机交流] 酰胺脱乙酰基 10+5 chibby 2026-02-03 12/600 2026-02-07 19:29 by 江东闲人
[基金申请] 同年申请2项不同项目,第1个项目里不写第2个项目的信息,可以吗 +4 hitsdu 2026-02-06 4/200 2026-02-07 13:07 by jurkat.1640
[基金申请] 有时候真觉得大城市人没有县城人甚至个体户幸福 +9 苏东坡二世 2026-02-04 10/500 2026-02-07 12:37 by 小毛球
[考博] 天津大学招2026.09的博士生,欢迎大家推荐交流(博导是本人) +4 a793625982 2026-02-05 5/250 2026-02-07 10:57 by a793625982
[公派出国] CSC & MSCA 博洛尼亚大学能源材料课题组博士/博士后招生|MSCA经费充足、排名优 +4 雨念 2026-02-01 6/300 2026-02-06 23:32 by MelissaPon
[基金申请] 面上项目申报 +3 Tide man 2026-02-01 3/150 2026-02-05 22:56 by god_tian
[教师之家] 遇见不省心的家人很难过 +18 otani 2026-02-03 22/1100 2026-02-04 11:06 by tangmnt
信息提示
请填处理意见