Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种简单的方法可以在OpenGL中获得阴影?_C++_Opengl_Terrain_Shadows - Fatal编程技术网

C++ 有没有一种简单的方法可以在OpenGL中获得阴影?

C++ 有没有一种简单的方法可以在OpenGL中获得阴影?,c++,opengl,terrain,shadows,C++,Opengl,Terrain,Shadows,我最近创建了一些风景代码,并在场景中添加了一些漫反射照明,但是,令我失望的是,没有阴影。我在网上搜索了几个小时,寻找在OpenGL中获得阴影的方法,但是它们看起来都非常复杂;他们自己的演示程序非常独特 有没有制作阴影的简单方法?没有 我所知道的最简单的方法是使用预生成的阴影纹理,该纹理使用多重纹理覆盖到地形上。复杂的部分是产生这种纹理,但如果你不使用定向照明,一个简单的“大模糊点”通常比没有要好。不。光栅化在这方面非常糟糕(即使是最近的AAA游戏也有明显的阴影人工制品),但每个人都生活在其中 解

我最近创建了一些风景代码,并在场景中添加了一些漫反射照明,但是,令我失望的是,没有阴影。我在网上搜索了几个小时,寻找在OpenGL中获得阴影的方法,但是它们看起来都非常复杂;他们自己的演示程序非常独特

有没有制作阴影的简单方法?

没有


我所知道的最简单的方法是使用预生成的阴影纹理,该纹理使用多重纹理覆盖到地形上。复杂的部分是产生这种纹理,但如果你不使用定向照明,一个简单的“大模糊点”通常比没有要好。

不。光栅化在这方面非常糟糕(即使是最近的AAA游戏也有明显的阴影人工制品),但每个人都生活在其中

解决方案包括(从最简单/最差到最佳/最难):

  • 没有阴影。用较暗的颜色简单地解释遮挡
  • 如果您想要角色的近似阴影,可以在地面上创建一个简单的平面多边形,该多边形具有透明且模糊的纹理。例如,参见塞尔达截图。即使是最近的一些游戏仍然使用这个
  • 光照图。仅静态几何图形,但完美照明(预计算)。实现起来非常简单。存在很多工具
  • 阴影卷,由Carmack推广。像素完美,易于实现,速度相当慢。对一些物体来说很好。没有柔和的阴影
  • 阴影贴图。如果您从未制作过任何openGL,那么实现起来有点困难。很难弄对。像素化阴影。处理许多多边形。不涉及大世界
  • 无数的阴影贴图变体。最近几年有很多研究。目前最好的是级联阴影贴图:很难,仍然很难让它看起来很好,但很快,可以处理大量多边形和巨大的世界
  • 光线跟踪阴影:这可能是下一代。除了一些研究论文,没有人真正使用它。非常复杂,不适合动态世界,巨大的静态场景。像素完美或柔和阴影,取决于您有多少备用GPU;截至2014年,这仍然没有在任何游戏中出现

因此,通常的技巧是将漂亮但仅限于静态的方法与动态但不太好的方法相结合。例如,在和上查看我的教程。

不太清楚。阴影没有内置到管道中。你必须自己生成它们(有很多方法可以做到这一点,每种方法都有自己的优点和缺点)并自己渲染它们。OpenGL不生成阴影,它渲染每个点就像点和光源之间没有障碍一样除非你想学习图形编程的内在知识,否则你可能想使用图形引擎(如Horde3D)或游戏引擎(Ogre或Irrlicht),而不是纯OpenGL。这将使您免于重新发明轮子(嗯,可能是许多轮子)OpenGL是一个低级API。哦,更简单的方法是使用一个已经内置了它的引擎,但我假设你对为别人的引擎建立模型不感兴趣(很公平,我也不感兴趣).不,我不想为其他人的引擎建立模型。至于上面的答案,我在哪里可以找到如何做到这一点?任何关于多重纹理的基本介绍都会涵盖这一点。诀窍是将纹理设置为“包裹”(使用透明边)然后使用UV参数在地形上定位。或者,您可以为阴影创建一个额外的曲面,这在平面上很容易,但在地形上更复杂一些……或者,如果您想要地形阴影,最简单的方法是旋转高度贴图(假设黑色最低)将其应用于整个地形。我是从“为角色提供阴影”中得到答案的POV,而不是添加地形阴影。如果你想在静止的太阳下获得山脉阴影,光照贴图是最好的选择。将你的贴图导出为任何3D格式,在Blender中打开,按照任何教程操作:你已经拥有了光照贴图。使用着色器与纹理混合(如果你很懒,可以直接在Photoshop中混合),完成了。对不起,我的书呆子让我发表评论:阴影体积是由Frank Crow在1977年首次提出的。它们是一种技术,就像BSP树或你看到的快速平方根,Carmack已经在游戏中流行起来,但肯定不是发明的。谢谢你的评论,我不知道。消息也相应地更新了。我只想指出在虚幻引擎4中,实时阴影不是真正的“研究”。决定它是否适合你。如果你指的是UE4使用的Crassin论文,体素仅用于次级“光线”。仍然有阴影贴图。