openGL照明随着相机旋转
|
我正在尝试为单人课程制作一些简单的东西,而我只是尝试对其进行照明,但是灯光似乎随相机一起旋转,这实在令人讨厌...
我已经使用pastebin在下面粘贴了我的代码(这样它就不会拉伸页面),但是这里也有一些解释:
我在Display :: Init中添加了灯光(使用PoolLight类)。
相机在Display :: Resize中设置。它放置在“池表”上方的(0,0,80)处,向下看(0,0,-1),X轴向前/向上(1,0,0)。
相机的这种简单移动和旋转也可以调整灯光,但是不能调整几何形状(或者我不确定,也许可以调整几何形状,而不是光线)。
我在这里阅读了有关同一问题的其他一些答案,但我不太了解。我希望有人可以用更简单的方式向我解释它,或者发现一些我不小心排除的明显现象。
无论如何,这是代码:
主展示类
PoolLight类:
#include \"PoolLight.h\"
#include \"Glut/glut.h\"
#include \"GL/gl.h\"
#include \"GL/glu.h\"
PoolLight::PoolLight(GLenum lightNumber, GLenum lightType, float red, float green, float blue, bool distant, float posX, float posY, float posZ)
{
this->lightNumber = lightNumber;
this->lightType = lightType;
color[0] = red; color[1] = green; color[2] = blue; color[3] = 1;
position[0] = posX; position[1] = posY; position[2] = posZ; position[3] = (int) (!distant);
glLightfv(lightNumber, lightType, color);
glLightfv(lightNumber, GL_POSITION, position);
enabled(true);
}
PoolLight::~PoolLight(void)
{
}
void PoolLight::setSpotlight(float angle, float attenuation, float dirX, float dirY, float dirZ) {
glLightf(lightNumber, GL_SPOT_EXPONENT, angle);
glLightf(lightNumber, GL_CONSTANT_ATTENUATION, attenuation);
glLightf(lightNumber, GL_LINEAR_ATTENUATION, 0.0f);
glLightf(lightNumber, GL_QUADRATIC_ATTENUATION, 0.0f);
spotDirection[0] = dirX; spotDirection[1] = dirY; spotDirection[2] = dirZ;
glLightfv(lightNumber, GL_SPOT_DIRECTION, spotDirection);
glLightf(lightNumber, GL_SPOT_CUTOFF, 60);
}
void PoolLight::enabled(bool enabled) {
if (enabled) glEnable(lightNumber);
else glDisable(lightNumber);
}
没有找到相关结果
已邀请:
1 个回复
讹巳漓把备