首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Open GL Lighting问题

Open GL Lighting问题
EN

Stack Overflow用户
提问于 2010-11-03 08:32:42
回答 2查看 357关注 0票数 3

我已经在游戏引擎上工作了一个月,我已经完成了基本的OpenGL工作。然而,有一件事我不能像我期望的那样工作,那就是照明。(注:这是我第一次认真使用OpenGL)

我想要的是一个接近真实的灯光模拟--面对灯光的表面比距离较远的表面更亮,等等。基本灯光应该有一个位置和一个颜色。这就是我认为它可以实现的方式:

代码语言:javascript
复制
float lightv[4]; // populated with (0.6, 0.6, 0.6, 1)
float positionv[4]; // populated with (0, 10, 0, 1)
int lightID = GL_LIGHT0;
int attenuationType = GL_LINEAR_ATTENUATION;
float attenuationValue = 1;
glLightf(lightID, attenuationType, attenuationValue);
glLightfv(lightID, GL_DIFFUSE, lightv);
glLightfv(lightID, GL_POSITION, positionv);
glEnable(lightID);

而不是做我期望它做的事情,它给我照明,就好像相机所在的地方有光一样!每个表面都有相同的照明!

我做错了什么?

谢谢,我很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-03 09:18:03

首先要做的是确保在某个时刻调用了glEnable(GL_LIGHTING);。除此之外,首先要检查的是你的法线是否正确。为了使照明正常工作,您需要为绘制的每个顶点设置法线。如果已经设置了法线,则应确保它们都是单位长度。如果它们的长度不是1,则照明的行为可能会很奇怪。如果这些都是应该的,那么您应该记住,设置灯光的位置时,当前的模型视图矩阵会将其修改,就好像它是一个顶点一样。如果这些都不相关,我会看看我是否能想出更多的东西。

票数 2
EN

Stack Overflow用户

发布于 2010-11-03 10:25:31

在设置GL_MODELVIEW变换之后设置灯光位置,因为它受当前变换矩阵的影响。否则,你会得到你所发现的“前灯”效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4083306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档