Libgdx ModelBuilder.createRect仅从一侧可见

在我的第一个libgdx 3D游戏中,我现在从createBox切换到createRect ,仅创建可createBox (如果墙在另一面墙的左侧,则其右面不可见……)。 我正在创建4个模型:

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

它们几乎是他们实际应该如何绘制的。 但是有一个大问题:只有当我看向正z-Direction才能看到侧面。 如果我看另一边(负z-Direction ),他们不画画。 正面和背面只绘制,如果我在负x-Direction看它们。 这与法线有关吗? 我把它们设置为:

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

这是错误吗? 我该如何设置法线? 他们代表什么? 关于照明的法线贴图,我有一些基本的想法,是一样的吗?

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

也许没有直接关联,但仍然需要注意:不要将createRect或createBox用于调试/测试以外的任何其他内容。 而是将多个形状组合成单个模型/节点/部件。 或者甚至更好,尽可能使用建模应用程序。

您没有指定禁用背面剔除的方式。 但请记住,不应在着色器/ rendercontext之外更改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方法,您会注意到参数具有0011后缀。 这里,当看着脸部时,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。 请注意,法线不用于面部剔除,它最常用于照明等。指定不正确/相反的法线不会导致面部被剔除(尽管可能会导致不正确/黑色照明)。

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