0

在我的第一个 libgdx 3D 游戏中,我现在从 切换createBoxcreateRect,只创建可见的面(如果一堵墙在另一堵墙的左侧,它的右侧是不可见的......)。我正在创建 4 个模型:

  1. frontFace
  2. backFace
  3. rightFace
  4. leftFace

他们几乎按照他们实际应该的方式绘制。但是有一个大问题:只有正面看才能看到侧面z-Direction。如果我看另一边(负面z-Direction),他们不会画画。如果我消极地看待它们,正面和背面只会画出来x-Direction。这和正常人有关系吗?我已将它们设置为:

normal.x = 0;
normal.y = 1;
normal.z = 0;

那是错误吗?我应该如何设置法线?他们代表什么?我对光照的法线贴图有一些基本的想法,是一样的吗?

重要提示:我禁用了背面剔除,但没有任何区别。视锥体剔除已打开。如果需要更多信息,请发表评论,我会尽快添加。谢谢

4

2 回答 2

4

也许不直接相关,但仍然需要注意:不要将 createRect 或 createBox 用于调试/测试以外的任何事情。而是将多个形状组合成一个模型/节点/零件。或者更好的是,尽可能使用建模应用程序。

您没有指定如何禁用背面剔除。但请记住,您不应该在着色器/渲染上下文之外更改 opengl 状态(这样做会导致不可预知的行为)。要禁用背面剔除,您可以使用材质属性IntAttribute.CullFace(参见:https ://github.com/libgdx/libgdx/wiki/Material-and-environment#wiki-intattribute )、DefaultShader(或默认 ModelBatch)配置defaultCullFace成员指定它(参见http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/shaders/DefaultShader.Config.html#defaultCullFace)或(已弃用)静态DefaultShader#defaultCullFace成员(参见http:// /libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/shaders/DefaultShader.html#defaultCullFace)。

面是正面还是背面取决于顶点缠绕。或者换句话说:您提供矩形角的顺序用于决定哪一边是前面,哪边是后面。如果您使用其中一种 rect 方法,您会注意到参数具有、0001后缀。这里,当看脸时,00 是左下角,01 是左上角,11 是右上角,10 是右下角。1011

对于矩形,正常的垂直是朝外的矩形。例如,如果您在 XZ 平面上有一个矩形,其正面位于顶部,则其法线为 X=0,Y=1,Z=0。如果它的正面朝向底部,那么它的法线是 X=0,Y=-1,Z=0。同样,如果您在 XY 平面上有一个矩形,则其法线为 X=0,Y=0,Z=1 或 X=0,Y=0,Z=-1。请注意,法线不用于面部剔除,它最常用于照明等。指定不正确/相反的法线不会导致面部被剔除(但可能会导致不正确/黑色照明)。

于 2014-02-28T22:20:06.433 回答
0

为了您的目的,我建议您使用Decal类。贴花是存在于 3D 场景中的位图精灵。本文是关于在 LibGDX 中使用贴花的。我希望这是你想要的。

于 2014-06-17T03:57:53.750 回答