gpt4 book ai didi

c++ - 打开 GL 照明问题

转载 作者:太空狗 更新时间:2023-10-29 22:52:33 27 4
gpt4 key购买 nike

我已经在游戏引擎上工作了一个月了,我已经完成了基本的 OpenGL 工作。但是,我无法像预期的那样工作的一件事是照明。(注:这是我第一次认真使用OpenGL)

我想要的是接近真实的光照模拟——面向光源的表面比远处的表面更亮,等等。基本光源应该有位置和颜色。这就是我认为它可以实现的方式:

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);

它没有按照我的预期去做,而是给我照明,就好像相机所在的地方有一盏灯!每个表面都有相同的照明!

我做错了什么?

谢谢你,我很感激。

最佳答案

首先要做的是确保在某个时候调用了 glEnable(GL_LIGHTING);。除此之外,首先要检查的是您的法线是否正确。为了使照明正常工作,您需要为绘制的每个顶点设置一个法线。如果你已经设置了你的法线,你应该确保它们都是单位长度的。如果它们的长度不是 1,则照明会表现得很奇怪。如果这一切都是应该的,你应该记住,当你设置一个灯的位置时,它会被当前的模型 View 矩阵修改,就像它是一个顶点一样。如果这些都不相关,我会看看我是否能想到进一步的东西。

关于c++ - 打开 GL 照明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4083306/

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