Opengl,带有固定光的旋转场景
Opengl, rotating scene with stationary light
我的 OpenGL 游戏项目有问题。
我已经定义了具有光属性的数组:
GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position[] = { 3.0, 20.0, 3.0, 0.0 };
我将它用于:
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
我已经定义了我的相机 class 和更新方法:
void update()
{
glLoadIdentity();
x = dist * sin(alpha) + 3;
z = dist * cos(alpha) + 3;
gluLookAt(x, y, z, 3, 5, 3, 0, 1, 0);
if (y <= 1) y = 1;
cout << "x " << x << "y: " << y << "z: " << z << "dist: " << dist << endl;
glutPostRedisplay();
}
我场景的中心点是 (3,5,3)。我想围绕这一点旋转场景及其工作。但我对灯光有问题 - 它也是 "rotating" - 我不知道如何描述这个。
我想要简单的照明和围绕点旋转的相机。
Fixed-Function GL 在 eye space 中存储光线位置。为此,在 glLightfv(..., GL__POSITION, ...)
调用 时,灯光位置乘以当前 ModelView 矩阵 。如果您在不重新指定灯光位置的情况下移动相机,它会产生相对于相机相对于相机.
保持静止的灯光效果
如果你想要一个在世界中静止的光,你必须加载视图矩阵(并且只是视图矩阵)并在视图矩阵改变时指定世界space光位置。
我的 OpenGL 游戏项目有问题。 我已经定义了具有光属性的数组:
GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position[] = { 3.0, 20.0, 3.0, 0.0 };
我将它用于:
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
我已经定义了我的相机 class 和更新方法:
void update()
{
glLoadIdentity();
x = dist * sin(alpha) + 3;
z = dist * cos(alpha) + 3;
gluLookAt(x, y, z, 3, 5, 3, 0, 1, 0);
if (y <= 1) y = 1;
cout << "x " << x << "y: " << y << "z: " << z << "dist: " << dist << endl;
glutPostRedisplay();
}
我场景的中心点是 (3,5,3)。我想围绕这一点旋转场景及其工作。但我对灯光有问题 - 它也是 "rotating" - 我不知道如何描述这个。
我想要简单的照明和围绕点旋转的相机。
Fixed-Function GL 在 eye space 中存储光线位置。为此,在 glLightfv(..., GL__POSITION, ...)
调用 时,灯光位置乘以当前 ModelView 矩阵 。如果您在不重新指定灯光位置的情况下移动相机,它会产生相对于相机相对于相机.
如果你想要一个在世界中静止的光,你必须加载视图矩阵(并且只是视图矩阵)并在视图矩阵改变时指定世界space光位置。