【发布时间】:2012-11-11 04:05:38
【问题描述】:
我目前正在使用 OpenGL 开发一个小玩具程序,该程序在剪辑空间视图中显示一个场景,即它绘制一个立方体以可视化规范视图体积,并在立方体内部绘制投影变换模型。显示模型图的代码 sn-p:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(1.0f, 1.0f, -1.0f);
glMultMatrixd(projectionMat);
glMultMatrixd(modelviewMat);
glEnable(GL_LIGHTING);
draw_model();
glDisable(GL_LIGHTING);
因此,自然地,绘制的模型是“扭曲的”(这是所需的行为)。然而,光照是错误的,因为表面法线也被投影矩阵变换,因此在变换后与它们的表面不正交。我想要完成的是“正确”的照明,即扭曲模型的表面具有正确的法线。
问题是 - 我该怎么做?我正在使用通常的法线转置逆矩阵规则,但据我所知,这就是 OGL 默认情况下对其法线所做的事情。我想在用模型视图矩阵转换表面之后,我必须重新计算表面法线,但是该怎么做呢?还是有别的办法?
【问题讨论】:
-
实际上,“双投影”正是我想要做的,是的:) 正如您在教程中所描述的,重点是在标准化设备坐标中查看对象的“奇怪”形状。但是,我并没有真正找到/理解您对表面法线所做的工作以在 NDC 空间中获得“正确”的照明。在我的示例中,从反转置模型视图矩阵中“移除”投影部分是否足以使法线仅由“真实”模型视图矩阵转换?我是一个 OGL 新手,所以请多多包涵:D
-
你看我的回答了吗?此外,本教程不会在 NDC 空间中进行照明。渲染位置的空间不一定是您进行照明的空间。
-
@NicolBolas 您的教程链接现在指向一些奇怪的广告页面,我也刚刚弹出一个窗口,它希望我安装一些 Chrome 插件。最好删除/更新链接,以免没有人点击它并爱上它。这是 web.archive.org 上的教程:web.archive.org/web/20150225192609/http://www.arcsynthesis.org/…
标签: opengl transform projection normals