Libgdx ModelBuilder.createRect仅从一侧可见

时间:2014-02-28 07:37:39

标签: java 3d libgdx culling

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

  1. frontFace
  2. backFace
  3. rightFace
  4. leftFace
  5. 他们几乎被绘制了他们实际上应该如何。 但是有一个大问题:只有在我看到积极的z-Direction时才能看到侧面。 如果我看另一边(负z-Direction),他们就不会画画。如果我以负x-Direction查看它们,则前面和后面仅绘制。 这与法线有关吗?我把它们设置为:

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

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

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

2 个答案:

答案 0 :(得分:3)

也许没有直接相关,但仍然需要注意:除了调试/测试之外,不要使用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方法,您会注意到参数具有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。请注意,法线不用于面部剔除,它最常用于照明等。指定不正确/相反的法线将导致面部被剔除(但可能会导致不正确/黑色照明)

答案 1 :(得分:0)

出于您的目的,我建议您使用Decal课程。贴图是3D场景中存在的位图精灵。 This文章是关于在LibGDX中使用贴花。我希望这是你想要的。