【问题标题】:Creating double-sided shader in libgdx在 libgdx 中创建双面着色器
【发布时间】:2014-04-02 14:40:36
【问题描述】:

我在 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());
    }

【问题讨论】:

    标签: opengl libgdx 3d-modelling


    【解决方案1】:

    编辑:我再次阅读了你的问题,你说你想从两边渲染同一张脸。这是通过禁用backFaceCulling 来完成的,就像我在帖子末尾写的那样。反正我不会那样做,因为:

    1. 背面剔除可提高性能,因为通常从背面看不到面
    2. 每个面都应该有不同的法线,正面的法线指向 +z(例如),背面的法线指向 -z。

    我还想告诉您,您在示例代码中设置的法线不正确。法线垂直于面部。 This tutorial 应该向您展示法线和向量的基础知识。

    原帖

    看看this question
    因为我是这两个问题的提问者(你链接的那个和我链接的那个)我知道你的问题。
    你使用的rect() 方法有15个参数:

    1. 1-3是左下角的x,y,z值
    2. 4-6是左上角的x,y,z值
    3. 7-9是右上角的x,y,z值
    4. 10-12是右下角的x,y,z值
    5. 13-15 是矩形的 x、y、z 法线。

    当你直接看着它时,脸部期望你给出角落。如果您使用了错误的顺序,则脸部“预计”您正在从另一侧看(如果您从侧面看,则右下角是左下角:P)。
    启用backFaceCulling 后,您将看不到脸部,因为它预计您在其后台,您永远不应该看到它(在另一边应该有另一张脸,因为它有其他法线)。 我希望这对你来说很清楚。无论如何,要让矩形从两侧可见,您必须禁用 backFaceCulling。我认为您必须禁用它,您应该将IntAttribute.CullFace 添加到Material

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-28
      • 2016-05-06
      • 2021-10-06
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多