代码之家  ›  专栏  ›  技术社区  ›  Kawa

隐藏在三维场景中模糊播放器的对象

  •  3
  • Kawa  · 技术社区  · 15 年前

    我正在设计一款3D游戏,它有一个与模拟人生完全不同的摄像头,我想防止玩家角色被隐藏在物体后面,包括墙壁、柱子和其他物体。

    处理墙壁的一个简单方法是让它们朝里,而不是朝另一边,但这不会覆盖 其他 完全是病例。

    我计划的是以某种方式检查“在”播放器前面的对象(相对于相机),并隐藏它们——不管是通过alpha混合还是根本不渲染。

    我想的一个可能不太好的主意是从相机到播放器沿直线扫描,看看你是否击中了一个非隐藏的物体,继续扫描直到你到达播放器。不幸的是,我是一个几乎完全的3D编程新手。

    Demonstration SVG illustration <那块墙板挡住了玩家的视线,所以必须隐藏起来。另一个不相关且几乎已经解决的问题是移除 三都 在那一边的墙板,这与这个问题无关,只是由我想出的绘图系统造成的。

    5 回复  |  直到 15 年前
        1
  •  1
  •   Kylotan    15 年前

    找到屏幕上某个给定点上的对象称为拾取。 Here's an XNA link 对于你来说,这应该给你一个例子。我们的想法是从二维点中提取游戏中的三维点,然后使用标准的碰撞检测方法来确定哪个对象占用了这个空间。然后您可以选择以不同的方式呈现该对象。

    如果你在选择方法上遇到困难,一个可能足够的方法是将角色渲染一次作为场景的一部分,然后在半阿尔法结束时在所有内容上再次渲染。这样你就可以看到整个角色和墙壁,尽管你看不到这样的墙壁。

        2
  •  3
  •   Jon Seigel    15 年前

    我计划的是以某种方式检查“在”播放器前面的对象(相对于相机),并隐藏它们——不管是通过alpha混合还是根本不渲染。

    这是个好计划。您将希望在播放器上加入某种边界体积,这样整个播放器(加上一点额外的)随时可见。然后,只需为边界体积的每个角运行交集算法。

        3
  •  1
  •   Aric TenEyck    15 年前

    一个简单的方法,至少对于原型来说,就是总是画出玩家 之后 你画剩下的场景。这将确保在场景中的任何其他内容之上渲染播放器。粗糙但有效。

        4
  •  1
  •   kyoryu    15 年前

    创建从相机到播放机范围的边界体积,确定哪些对象与该体积相交,然后以所需的其他样式渲染它们?

    可能有一些非常聪明的方法可以做到这一点,但这看起来是非常简单的版本,不应该太高的性能命中(你可能正在做碰撞每帧无论如何…)

        5
  •  0
  •   ldog    15 年前

    我能想到的最简单的一点是,用一个垂直于地面的平面(假设你有一个地面)来模拟所有障碍物,大致假设所有障碍物都是一堵有一定高度的墙。

    在某个地方把你的播放器建模为一个点,把你的相机建模为另一个点。连接这两个点的三维线位于一个对你特别有趣的平面上,因为如果这个平面与障碍物高度以下的“障碍物平面”相交,这意味着障碍物阻碍了你对玩家点的看法。

    希望有点清楚。要使其成为一种算法,您必须实现一种确定两个平面相交位置的通用方法(以确定障碍物是否足够高以阻挡视图)。