在我的第一个 libgdx 3D 游戏中,我现在从createBox
to createRect
,仅创建可见面(如果一堵墙位于另一堵墙的左侧,则其右面不可见...)。我正在创建 4 个模型:
frontFace
backFace
rightFace
leftFace
他们几乎是按照他们实际应该的方式绘制的。
但有一个大问题:只有正面看时才能看到侧面z-Direction
。
如果我看另一边(负面z-Direction
),他们不画画。如果我以消极的方式看待它们,正面和背面只会绘制x-Direction
。
这和正常现象有关系吗?我已将它们设置为:
normal.x = 0;
normal.y = 1;
normal.z = 0;
这是错误吗?我应该如何设置法线?它们代表什么?我对照明的法线贴图有一些基本的想法,是一样的吗?
重要提示:我已禁用背面剔除,但这没有任何区别。视锥体剔除已打开。如果需要更多信息,请发表评论,我会尽快添加。谢谢
也许没有直接相关,但仍然需要注意:除了调试/测试之外,不要使用 createRect 或 createBox 进行任何其他操作。相反,将多个形状组合成一个模型/节点/零件。或者更好的是,尽可能使用建模应用程序。
您没有指定如何禁用背面剔除。但请记住,您不应该在着色器/渲染上下文之外更改 opengl 状态(这样做会导致不可预测的行为)。要禁用背面剔除,您可以使用材质属性指定它IntAttribute.CullFace
(see: https://github.com/libgdx/libgdx/wiki/Material-and-environment#wiki-intattribute 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 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 http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/shaders/DefaultShader.html#defaultCullFace).
面是正面还是背面取决于顶点缠绕。或者换句话说:提供矩形角的顺序用于决定哪一侧是前面,哪一侧是后面。如果您使用 rect 方法之一,您会注意到参数具有00
, 01
, 10
or 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。请注意,法线不用于面部剔除,它最常用于照明等。指定不正确/相反的法线将not导致脸部被剔除(但可能会导致不正确/黑色照明)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)