我在libgdx中绘制了一个带有纹理的plane,当你从另一边看它时它会消失。 有没有办法制作双面着色器?
private Model createPlaneModel(final float width, final float height, final Material material,
final float u1, final float v1, final float u2, final float v2) {
modelBuilder.begin();
MeshPartBuilder bPartBuilder = modelBuilder.part("rect",
GL20.GL_TRIANGLES, VertexAttributes.Usage.Position |
VertexAttributes.Usage.Normal |
VertexAttributes.Usage.TextureCoordinates,
material);
//NOTE ON TEXTURE REGION, MAY FILL OTHER REGIONS, USE GET region.getU() and so on
//bPartBuilder.setUVRange(u1, v1, u2, v2);
bPartBuilder.rect(
-(width*0.5f), -(height*0.5f), 0,
(width*0.5f), -(height*0.5f), 0,
(width*0.5f), (height*0.5f), 0,
-(width*0.5f), (height*0.5f), 0,
1, 1, 1);
return (modelBuilder.end());
}
答案 0 :(得分:2)
编辑:我再次阅读了你的问题,你说你想从双方渲染同一张脸。这是通过禁用backFaceCulling
完成的,就像我在帖子末尾写的那样。无论如何我不会这样做,因为:
另外我想告诉您,您在示例代码中设置的法线不正确。法线垂直于脸部。 This tutorial应该向您展示法线和向量的基础知识。
原帖
请看this question
因为我是这两个问题的提问者(你链接的那个和我链接的那个)我知道你的问题
您使用的rect()
方法需要15个参数:
面子希望,你直接看着角落。如果您使用了错误的订单,那么"期望"你是从另一边看的(右下角是左下角,如果从behing看P:。)
当backFaceCulling
启用后,您将无法看到脸部,因为它预计您处于后方,这对您来说永远不可见(另一方面应该有另一张脸,因为它有其他法线到)。
我希望这对你来说很清楚。无论如何要从两侧看到矩形,您必须禁用backFaceCulling
。我认为你必须禁用它,你应该将IntAttribute.CullFace
添加到Material
。