24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1185  |  回复: 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

木虫 (小有名气)

引用回帖:
5楼: Originally posted by conanwj at 2012-09-11 09:06:43
编译过程中,
void polygon(int a, int b, int c , int d)函数的
glVertex3fv(vertices);此句错误,
应改为glVertex3fv(vertices);

在鼠标左键拖动立方体后,光照会造成立方体局部黑暗。
LZ所说的那句代码是 ...

这个立方体是一个半透明(alpha=0.5)的立方体,没有加光照,只开了混合,所以无论点鼠标的哪一个键,看到的都应该是一个六面颜色不同的旋转正方体,不需要加光照。但是如果加上那一句全局变量,得到的旋转立方体最终会变得一团黑。
比菜鸟强一点点
9楼2012-09-11 13:23:47
已阅   回复此楼   关注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的回帖

小鸟袅袅

新虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
glVertex3fv(vertices);
glutCreateWindow("colorcube";
修改为:
  glVertex3fv(vertices);
glutCreateWindow("colorcube";
其他任何地方不修改,结果显示一个旋转的正方形
(这与你设置的窗口有关系,如果为视图窗口显示为立方体)
4楼2012-09-11 09:03:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 湖南大学刘巧玲课题组2026年第二批次博士研究生招生信息 +3 南风观火 2026-04-18 3/150 2026-04-19 21:44 by 淡雅人生27
[考研] 通信工程求调剂!!! +7 zlb770521 2026-04-14 7/350 2026-04-19 20:56 by Equinoxhua
[考研] 289 分105500药学专硕求调剂(找B区学校) +5 白云123456789 2026-04-13 5/250 2026-04-19 18:12 by Equinoxhua
[考研] 求调剂推荐 +9 小聂爱学习 2026-04-14 9/450 2026-04-19 17:03 by 中豫男
[考研] 求调剂 +10 小聂爱学习 2026-04-16 12/600 2026-04-19 16:51 by 中豫男
[考研] 085404 22408 309分求调剂 +10 lzmk 2026-04-14 11/550 2026-04-19 16:42 by 中豫男
[考研] 求调剂 +6 苦命人。。。 2026-04-18 7/350 2026-04-19 16:27 by 中豫男
[论文投稿] 有没有接收比较快的sci期刊呀,最好在一个月之内的,研三孩子求毕业 20+4 之护着 2026-04-16 6/300 2026-04-19 13:00 by Aaron_zyn
[考研] 327求调剂 +27 Xxjc1107. 2026-04-13 30/1500 2026-04-19 08:22 by cuisz
[考研] 300求调剂 +12 橙a777 2026-04-15 12/600 2026-04-18 23:51 by 路病情
[考研] 接受任何调剂 +6 也就是栗子 2026-04-17 7/350 2026-04-18 17:20 by 涵竹刘
[考研] 急需调剂 +9 绝不放弃22 2026-04-15 10/500 2026-04-18 08:09 by chixmc
[考研] 一志愿中科大材料与化工,353分还有调剂学校吗 +10 否极泰来2026 2026-04-15 12/600 2026-04-17 17:54 by mapenggao
[考研] 295分求调剂 +5 ?要上岸? 2026-04-17 5/250 2026-04-17 16:51 by fenglj492
[考研] 322求调剂 +6 tekuzu 2026-04-17 6/300 2026-04-17 13:48 by Espannnnnol
[考研] 求调剂学校 +14 不会吃肉 2026-04-13 16/800 2026-04-15 21:59 by noqvsozv
[考研] 各位老师好,求调剂,本科211,一志愿天津大学生物与医药学硕,差两名录取。 +11 路六六jjj 2026-04-13 11/550 2026-04-14 16:01 by zs92450
[考研] 考研调剂 +13 长弓傲 2026-04-13 14/700 2026-04-14 14:44 by zs92450
[考研] 085408光电信息工程专硕355一志愿长春光机所调剂 +6 王ymaa 2026-04-13 13/650 2026-04-14 11:33 by 王ymaa
[考研] 085600材料与化工329分求调剂 +24 叶zilin 2026-04-13 25/1250 2026-04-14 09:20 by 试管破裂
信息提示
请填处理意见