作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
目前我正在尝试用光源照亮一个物体,并根据 GL_COLOR_MATERIAL 改变物体的颜色。出于某种原因,我只能看到一个光源被转换到模型上。我尝试了各种不同的位置和光源组合,但我只注意到 GL_LIGHT0 函数。
我也尝试过不同的环境光/漫反射/ Material 组合,但没有成功。
static const GLfloat ambient[4] = {0.1f, 0.1f, 0.1f, 1.0f};
static const GLfloat diffuse[4] = {0.5f, 1.0f, 1.0f, 1.0f};
static const GLfloat position0[4] = {0.0f, 0.0f, 20.0f, 0.0f};
static const GLfloat position1[4] = {0.0f, 0.0f, -20.0f, 0.0f};
static const GLfloat front_mat_shininess[1] = {60.0f};
static const GLfloat front_mat_specular[4] = {0.2f, 0.2f, 0.2f, 1.0f};
static const GLfloat front_mat_diffuse[4] = {0.5f, 0.28f, 0.38f, 1.0f};
static const GLfloat lmodel_ambient[4] = {1.0f, 1.0f, 1.0f, 1.0f};
static const GLfloat lmodel_twoside[1] = {GL_FALSE};
glDisable(GL_LIGHTING);
glDisable(GL_COLOR_MATERIAL);
///Enable lighting if item is a solid model
if(wireFlag == 1)
{
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, position0);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT1, GL_POSITION, position1);
glEnable(GL_LIGHT1);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_mat_shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, front_mat_diffuse);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}
如有任何帮助,我们将不胜感激!
最佳答案
对于 GL_LIGHT1
.. GL_LIGHT7,有几个参数(例如
但 GL_DIFFUSE
)默认为 0,0,0,0
GL_LIGHT0
的其他内容(例如 1,1,1,1
)。我不知道您错过了哪一个,但我敢打赌您依赖于两个灯的默认值并且 GL_LIGHT1
是“关闭”的。
关于c++ - GL_LIGHT 只创建一个光源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148048/
目前我正在尝试用光源照亮一个物体,并根据 GL_COLOR_MATERIAL 改变物体的颜色。出于某种原因,我只能看到一个光源被转换到模型上。我尝试了各种不同的位置和光源组合,但我只注意到 GL_LI
我是一名优秀的程序员,十分优秀!