Module  javafx.graphics
软件包  javafx.scene.shape

Class TriangleMesh



  • public class TriangleMesh
    extends Mesh
    定义一个三角形三角形网格,由其相关联的VertexFormat和一组独立的顶点组件阵列组成,例如点,法线,纹理坐标和定义网格的各个三角形的面阵列。

    注意,方法名称和方法描述中使用的术语点实际上是指代表单个顶点的位置的空间中的3D点(x,y,z)。 术语点(复数)用于指示多个顶点的3D点集合。 类似地,术语“法线”用于表示代表单个顶点方向的空间中的三维向量(nx,ny,nz)。 术语“常数”(复数)用于指示多个顶点的3D向量集合。 术语texCoord用于指示单个顶点的单对2D纹理坐标(u,v),而术语texCoords(复数)用于指示多个顶点的纹理坐标集合。 最后,术语face用于指示3组交织点,法线(可选,取决于相关联的VertexFormat)和纹理坐标,它们一起表示单个三角形的几何拓扑,而术语“面(多)”用于指示三角形组(每个由一个面代表)。

    例如,表示使用2个三角形的单个纹理矩形的面为VertexFormat.POINT_TEXCOORD的面具有以下数据顺序:

    p0,t0,p1,t1,p3,t3,//纹理矩形的第一个三角形

    p1,t1,p2,t2,p3,t3 //纹理矩形的第二个三角形

    ]

    而表示使用2个三角形的单个纹理矩形的面为VertexFormat.POINT_NORMAL_TEXCOORD的面具有以下数据顺序:

    p0,n0,t0,p1,n1,t1,p3,n3,t3,//纹理矩形的第一个三角形

    p1,n1,t1,p2,n2,t2,p3,n3,t3 //纹理矩形的第二个三角形

    ]

    其中p0,p1,p2和p3是点阵列中的索引,n0,n1,n2和n3是法线阵列中的索引,t0,t1,t2和t3是texCoords阵列的索引。

    三角形有一个正面和背面。 三角形顶点的绕组顺序决定了哪一面是前脸。 JavaFX选择逆时针(或右手规则)卷绕顺序作为正面。 默认情况下,仅渲染三角形的正面。 有关详细信息,请参阅CullFace

    的长度pointsnormalstexCoords必须由3,3,和2分别整除。 的长度faces ,如果它是必须是整除6 VertexFormat.POINT_TEXCOORD否则它必须是整除9,如果它是VertexFormat.POINT_NORMAL_TEXCOORD 面数组中的值必须在点索引的点数组中的顶点数(0到点。长度/ 3 - 1)的范围内,在法线数组(0)中的顶点数范围内对于正常索引,并且在纹理坐标索引的texCoords数组(0到texCoords.length / 2 - 1)中的顶点数量的范围内,对于normals.length / 3 - 1)。

    如果任何数组长度无效或面阵列中的任何值超出范围,则记录器将记录警告,并且网格不会被渲染(并且将具有空的边界)。

    从以下版本开始:
    JavaFX 8.0
    • 构造方法详细信息

      • TriangleMesh

        public TriangleMesh​()
        使用默认的 VertexFormat.POINT_TEXCOORD格式类型创建一个 TriangleMesh类的新实例。
      • TriangleMesh

        public TriangleMesh​(VertexFormat vertexFormat)
        使用指定的 VertexFormat创建一个新的 TriangleMesh类的实例。
        参数
        vertexFormat - 指定顶点格式类型。
        从以下版本开始:
        JavaFX 8u40
    • 方法详细信息

      • setVertexFormat

        public final void setVertexFormat​(VertexFormat value)
        设置属性vertexFormat的值。
        Property description:
        指定 TriangleMesh的顶点格式, VertexFormat.POINT_TEXCOORDVertexFormat.POINT_NORMAL_TEXCOORD
        Default value:
        VertexFormat.POINT_TEXCOORD
        从以下版本开始:
        JavaFX 8u40
      • getVertexFormat

        public final VertexFormat getVertexFormat​()
        获取属性vertexFormat的值。
        Property description:
        指定 TriangleMesh的顶点格式, VertexFormat.POINT_TEXCOORDVertexFormat.POINT_NORMAL_TEXCOORD
        Default value:
        VertexFormat.POINT_TEXCOORD
        从以下版本开始:
        JavaFX 8u40
      • getPointElementSize

        public final int getPointElementSize​()
        返回表示点的元素数。
        结果
        元素数量
      • getNormalElementSize

        public final int getNormalElementSize​()
        返回表示法线的元素数。
        结果
        元素数量
        从以下版本开始:
        JavaFX 8u40
      • getTexCoordElementSize

        public final int getTexCoordElementSize​()
        返回表示纹理坐标的元素数。
        结果
        元素数量
      • getFaceElementSize

        public final int getFaceElementSize​()
        返回表示面部的元素数。
        结果
        元素数量
      • getPoints

        public final ObservableFloatArray getPoints​()
        获取 points这个 TriangleMesh数组。
        结果
        points数组,其中每个点由3个浮点值x,y和z按顺序表示。
      • getNormals

        public final ObservableFloatArray getNormals​()
        获取 normals这个 TriangleMesh数组。
        结果
        normals数组,其中每个法线按顺序由3个浮点值nx,ny和nz表示。
        从以下版本开始:
        JavaFX 8u40
      • getTexCoords

        public final ObservableFloatArray getTexCoords​()
        获取texCoords阵列如此TriangleMesh 坐标是比例的,所以纹理的左上角是[0,0],右下角是[1,1]。
        结果
        texCoord数组,其中每个纹理坐标由2个浮点值表示:u和v, texCoord顺序。
      • getFaces

        public final ObservableFaceArray getFaces​()
        获取faces阵列,索引到pointsnormals (可选,如果它是一个VertexFormat.POINT_NORMAL_TEXCOORD目)和texCoords阵列,此的TriangleMesh 所有指数都是按照要点,法线或texCoords阵列而不是单个浮标的要素。
        结果
        faces数组,其中每个面都是3 * VertexFormat.getVertexIndexSize()整数。
      • getFaceSmoothingGroups

        public final ObservableIntegerArray getFaceSmoothingGroups​()
        获取faceSmoothingGroups阵列TriangleMesh 平滑影响网格呈现的方式,但不影响其几何。 脸部平滑组值用于控制相邻面之间的平滑。

        脸部平滑组值由位阵列表示,最多可以有32个独特的组; (1 << 0)〜(1 << 31)。 脸部平滑组值可以从0(无平滑组)到所有32组的范围。 脸可以属于零个或多个平滑组。 如果设置了位N,则表示组N的成员,例如,组| =(1 << N)。 值为0表示没有平滑组或硬边。 当相邻的一对面共享平滑组时,应用平滑。 否则,脸部之间呈现硬边缘。

        空的faceSmoothingGroups意味着该网格中的所有面都具有平滑组值1。

        如果faceSmoothingGroups不为空,则其大小必须等于面数。

        这faceSmoothingGroups在它没有影响TriangleMesh如果是VertexFormat.POINT_NORMAL_TEXCOORD格式。

        结果
        faceSmoothingGroups阵列的 TriangleMesh