我有一个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调用,所有东西都被压缩到一个薄层上,这就解释了为什么光线不像预期那样运行...但老实说,我对照明没有经验,所以可能是错误的。
有人知道发生了什么吗?