-
27-09-2019 - |
题
我心里有这个问题:我需要制作一个看起来像真实天空的场景。我的第一个想法是制作一个立方体并对其进行纹理化。本来就不好看。我想出了使用球体的想法。但我无法从里面点燃它。我已将相机放在原点上观看(0,0,-100)。环境光源和镜面光源也在原点。看不到任何亮着的东西!制作天空的方法有哪些?如何照亮球体内部?
解决方案
由于您位于球体内部,因此请尝试更改剔除模式。
我是 XNA 人,但这似乎是 OpenGL 等效项. 。我相信,如果您按照您所说打开了环境照明,那么无论法线如何,您都应该能够看到一些东西。
其他提示
如果它是来自外部,而是来自内部黑暗点亮,那么它可能是球体的法线在错误的方向指向。
假设你正在做的Phong /高氏照明,正常和视图方向之间的余弦将被计算的某个地方。余弦将是负的和图形卡将钳位到零,这导致黑色。
所以,如果被明确指定你的法线,你应该尝试反向自己的方向 - >乘用-1。如果您只有顶点和面,你可能要改变在脸上的顶点顺序。只需切换两个指标。 (1-2-3) - >(1-3-2)。这改变从顺时针到逆时针的顺序(或反向)。要测试你的结果,你可以切换背面消隐和关闭,并看看会发生什么。
问题解决了。谢谢,但法线不是答案。我用glutSolidSphere所以法线都没有错。尝试使用glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE);应该雅做的工作。
当我让天空穹顶,天空盒,或天空平面,我实际上并不光它。我只是把它的纹理和渲染。
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
Render sky dome
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);
然而,对于这种问题是,改变状态可能是昂贵的。因此,要消除GL_CULL_FACE状态变化的一个方法是,以确保您的法线都指向正确的方式。如果CULL_FACE设为CCW(逆时针),然后法线应该对你指指点点。但是,如果CULL_FACE设置为CW(顺时针方向),那么法线应该从你背向。我可以看到,以消除GL_LIGHTING状态改变的唯一方式是使用着色器和定义自己的照明方案。然而,我不知道这是否是更多或更少的昂贵的。
在天空盒问题是一个类似的故事,但它也有其他的问题。如果你的观点是不是在中心,你可以运行到失真的问题。我通常做的是使天空盒第一,中心的相机,然后清除深度缓存和渲染一切。这样,你的天空盒并不一定是大的离谱。