所以我有一个3D对象,我正在使用以下光线绘制:
GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 0.9}; /* White light. */
GLfloat light_position[] = {300.0, 300.0, 300.0, 0.0};
glShadeModel(GL_SMOOTH);
glEnable(GL_COLOR_MATERIAL);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
当我在“正常”的背景下绘制它时,我的目标就像我期望的那样(即没有glOrtho)。
但是,我正在研究对象的正交投影,并使用glOrtho来实现这一目的(在ModelView矩阵上)。我在glOrtho调用之后初始化灯光,然后以与我工作的情况完全相同的方式绘制对象(3D情况)。但由于某种原因,照明对正交投影不起作用,即一旦我做了glOrtho调用。
这不是法线的问题,因为它适用于3D情况。我猜测,通过glOrtho调用,所有东西都被压在一个薄层上,这就解释了为什么灯光表现不如预期......但老实说,我没有经验照明所以这可能是错误的。
有谁知道发生了什么事?
答案 0 :(得分:1)
照明发生在眼睛空间中,即在完全投射之前。您可能以错误的方式使用转换矩阵。 glOrtho,glFrustung或gluPerspective进入GL_PROJECTION矩阵,gluLookAt和其他相机放置的东西进入GL_MODELVIEW。