繁体   English   中英

如何在opengl中设置光源的位置?

[英]How to set position of light source in opengl?

我试图了解在opengl中更改指向光源位置的效果,但是遇到了麻烦。 有人可以解释一下不同位置如何影响模型的照明吗?

我使用的代码如下-

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLfloat lightPos0[] = {0.0f,0.0f, -1.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, lightPos0);
//gluLookAt(0, 6, 6.0, 0, -2, 0, 0.0f, 1.0f, 0.0f);



glTranslatef(0,0,-6);

GLfloat ambientColor[] = {0.1f, 0.1f, 0.1f, 1.0f};

glRotatef(50,1,0,0);

glRotatef(-45,0,1,0);

glBegin(GL_QUADS);


glNormal3f(-1,0,0);
glColor3f(0, 0, 0); glVertex3f(-1, -1, -1);
glColor3f(0, 0, 1); glVertex3f(-1, -1,  1);
glColor3f(0, 1, 1); glVertex3f(-1,  1,  1);
glColor3f(0, 1, 0); glVertex3f(-1,  1, -1);
glNormal3f(1,0,0);
glColor3f(1, 0, 0); glVertex3f( 1, -1, -1);
glColor3f(1, 0, 1); glVertex3f( 1, -1,  1);
glColor3f(1, 1, 1); glVertex3f( 1,  1,  1);
glColor3f(1, 1, 0); glVertex3f( 1,  1, -1);
glNormal3f(0,-1,0);
glColor3f(0, 0, 0); glVertex3f(-1, -1, -1);
glColor3f(0, 0, 1); glVertex3f(-1, -1,  1);
glColor3f(1, 0, 1); glVertex3f( 1, -1,  1);
glColor3f(1, 0, 0); glVertex3f( 1, -1, -1);


glNormal3f(0,0,-1);
glColor3f(0, 0, 0); glVertex3f(-1, -1, -1);
glColor3f(0, 1, 0); glVertex3f(-1,  1, -1);
glColor3f(1, 1, 0); glVertex3f( 1,  1, -1);
glColor3f(1, 0, 0); glVertex3f( 1, -1, -1);
glNormal3f(0,0,1);
glColor3f(0, 0, 1); glVertex3f(-1, -1,  1);
glColor3f(0, 1, 1); glVertex3f(-1,  1,  1);
glColor3f(1, 1, 1); glVertex3f( 1,  1,  1);
glColor3f(1, 0, 1); glVertex3f( 1, -1,  1);

glEnd();
glTranslatef(-1,1,0);
glRotatef(a,0,0,1);
glTranslatef(1,-1,0);

glBegin(GL_QUADS);
glNormal3f(0,1,0);
glColor3f(0, 1, 0); glVertex3f(-1,  1, -1);
glColor3f(0, 1, 1); glVertex3f(-1,  1,  1);
glColor3f(1, 1, 1); glVertex3f( 1,  1,  1);
glColor3f(1, 1, 0); glVertex3f( 1,  1, -1);

glEnd();
glFlush();
if(a>90)
    a=a-90;
a=a+1;
glutSwapBuffers();
glutPostRedisplay();
    }

我期望light(0,0,-1)会从前面照在立方体上,因为我已经将立方体转换为-6。 但是光是从后面射来的。

执行转换后,OpenGL不会将对象引用到(0,0,0)。 转换立方体对象后,将参考点更改为立方体的中心。 之后要变换和绘制的所有内容都将从立方体居中的位置偏移。 您需要推送并弹出转换矩阵。

glPushMatrix()

glPopMatrix()

相关论坛帖子

如果我没记错的话,这将是您必须遵循的格式:

glPushMatrix();
    glTranslatef(0,0,-6);
    GLfloat ambientColor[] = {0.1f, 0.1f, 0.1f, 1.0f};
    glRotatef(50,1,0,0);
    glRotatef(-45,0,1,0);
    glBegin(GL_QUADS);
    //DRAW THE OBJECT
    glEnd();
glPopMatrix();
glPushMatrix();
    glTranslate(0,0,-1);
    //Draw the light
glPopMatrix();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM