在我的第一个libgdx 3D游戏中,我现在从createBox
切换到createRect
,仅创建可见面(如果墙位于另一面墙的左侧,则其右侧面不可见...)。我正在创建4个模型:
frontFace
backFace
rightFace
leftFace
他们几乎被绘制了他们实际上应该如何。
但是有一个大问题:只有在我看到积极的z-Direction
时才能看到侧面。
如果我看另一边(负z-Direction
),他们就不会画画。如果我以负x-Direction
查看它们,则前面和后面仅绘制。
这与法线有关吗?我把它们设置为:
normal.x = 0;
normal.y = 1;
normal.z = 0;
这是错误吗?我该如何设置法线?他们代表什么?我对照明的法线贴图有一些基本的想法,是一样的吗?
重要提示:我已禁用背面剔除,但它没有任何区别。查看视锥体剔除已打开。如果需要更多信息,请发表评论,我会尽快添加。感谢
答案 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方法,您会注意到参数具有00
,01
,10
或11
后缀。在这里,当看到脸部时,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中使用贴花。我希望这是你想要的。