Opengl 使用环境光明暗处理的侧面时,3d明暗处理/照明将丢失

Opengl 使用环境光明暗处理的侧面时,3d明暗处理/照明将丢失,opengl,3d,shader,lighting,Opengl,3d,Shader,Lighting,你们怎么处理3d游戏中的阴影?我有一个定向光源,可以遮住由立方体组成的树的一侧。其余3条边都仅获得环境光明暗处理。因此,当查看两个环境光着色面时,3d效果将丢失。我错过什么了吗?我应该把离光源最远的一面遮光得更暗吗?我试着看了一下《放射性尘埃3》,看起来他们就是这么做的,但是Minecraft似乎用两个相对的侧面照亮了一个草丘,剩下的两个相对的侧面是黑色的,这给人一种效果,两个明暗的侧面有两个平行光,暗暗暗的侧面有环境光。首先,尝试调用glLightModeli将GL_LIGHT_MODEL_T

你们怎么处理3d游戏中的阴影?我有一个定向光源,可以遮住由立方体组成的树的一侧。其余3条边都仅获得环境光明暗处理。因此,当查看两个环境光着色面时,3d效果将丢失。我错过什么了吗?我应该把离光源最远的一面遮光得更暗吗?我试着看了一下《放射性尘埃3》,看起来他们就是这么做的,但是Minecraft似乎用两个相对的侧面照亮了一个草丘,剩下的两个相对的侧面是黑色的,这给人一种效果,两个明暗的侧面有两个平行光,暗暗暗的侧面有环境光。

首先,尝试调用glLightModeli将GL_LIGHT_MODEL_TWO_SIDE设置为GL_TRUE。

听起来您的光源当前是轴对齐的(例如方向:x、y、0或0、y、z)。这将完全照亮你的树面向光的一侧,而不会照亮其他部分。可以做的一件事是稍微移动灯光(为x或z向0添加一点)。这意味着两个面被照亮的程度不同(假设0增加到0和x/z值之间的某个位置)。那么你只有两张未点亮的脸。如果有必要,第二道光线会使它们不那么相似。

对于由立方体构成的对象,可以保证对象的一面处于黑暗中。使用环境光,您将稍微照亮它,但边缘仍将不着色。您可以使用以下几个选项:

  • 为立方体使用纹理以帮助显示立方体的形状
  • 多次通过镜面反射表面反弹光线(昂贵!)
  • 制作第二个光源(尽管这可能看起来很不自然)
  • 听起来您所做的应该非常简单,所以我认为您当前的实现似乎令人满意