gpt4 book ai didi

c - 动态改变 Material 的颜色

转载 作者:行者123 更新时间:2023-11-30 15:53:06 25 4
gpt4 key购买 nike

在调用 glutMainLoop() 之前,我初始化灯光和 Material 颜色:

glShadeModel(GL_FLAT);

glMaterialfv(GL_FRONT, GL_AMBIENT, (const GLfloat[]){1,0.2,0} );
glMaterialfv(GL_FRONT, GL_DIFFUSE, (const GLfloat[]){1,0.6,0} );
glMaterialfv(GL_FRONT, GL_SPECULAR, (const GLfloat[]){1,0.8,0} );
glMaterialfv(GL_FRONT, GL_SHININESS, (const GLfloat[]){1,1,0} );

glLightfv(GL_LIGHT0, GL_AMBIENT, (const GLfloat[]){1,1,1});
glLightfv(GL_LIGHT0, GL_DIFFUSE, (const GLfloat[]){1,1,1});
glLightfv(GL_LIGHT0, GL_SPECULAR, (const GLfloat[]){1,1,1});

glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);

现在在程序执行期间我想更改 Material 颜色。
我有一个键盘函数,可以更改 Material 颜色,然后调用 glutPostRedisplay():

glMaterialfv(GL_FRONT, GL_AMBIENT, (const GLfloat[]){0,0.2,1} );
glMaterialfv(GL_FRONT, GL_DIFFUSE, (const GLfloat[]){0,0.6,1} );
glMaterialfv(GL_FRONT, GL_SPECULAR, (const GLfloat[]){0,0.8,1} );
glMaterialfv(GL_FRONT, GL_SHININESS, (const GLfloat[]){0,1,1} );
glutPostRedisplay();

但这是一个问题,因为如果我调用该函数,我绘制的对象就会消失。所以我画了一个茶壶,但如果我按一个键改变颜色,它就会消失。

最佳答案

Before calling glutMainLoop() I initialise the lights and material colour

错误的方法。 OpenGL 未初始化。它是一个基于状态的绘图机,您应该在绘制需要该状态的内容之前设置每个状态。这也意味着您不会将 OpenGL 操作放入用户交互和事件处理程序中。在您需要的时候,将所有内容都放在绘图代码中。

关于c - 动态改变 Material 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com