gpt4 book ai didi

java - Libgdx ModelBuilder.createRect 仅从一侧可见

转载 作者:行者123 更新时间:2023-12-01 23:10:36 26 4
gpt4 key购买 nike

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

  1. 正面
  2. 背面
  3. rightFace
  4. 左脸

他们几乎是按照他们实际应该的方式绘制的。但有一个大问题:只有当我朝正 z 方向 方向看时,侧面才可见。如果我看另一侧(负 z 方向),它们不会绘制。如果我从负x 方向 观察正面和背面,则只会绘制正面和背面。这和正常现象有关系吗?我已将它们设置为:

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

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

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

最佳答案

也许没有直接相关,但仍然需要注意:除了调试/测试之外,不要使用 createRect 或 createBox 进行任何其他操作。相反,将多个形状组合成一个模型/节点/零件。或者更好的是,尽可能使用建模应用程序。

您没有指定如何禁用背面剔除。但请记住,您不应该在着色器/渲染上下文之外更改 opengl 状态(这样做会导致不可预测的行为)。要禁用背面剔除,您可以使用 Material 属性 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 方法,您会注意到参数具有 00011011 后缀。这里,当看脸时,00是左下,01是左上,11是右上,10是右下。

对于矩形,正常情况是垂直面朝外的矩形。例如,如果 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。请注意,法线不用于面部剔除,它最常用于照明等。指定不正确/相反的法线将不会导致面部被剔除(但可能会导致不正确/黑色照明) .

关于java - Libgdx ModelBuilder.createRect 仅从一侧可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22089088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com