Mesh — Aspose.3D FOSS for Java

Pakej: com.aspose.threed (aspose-3d-foss 26.1.0)

Mesh menyimpan geometri poligon sebagai senarai titik kawalan (kedudukan simpul) dan senarai muka poligon. Setiap muka poligon ialah senarai indeks berasaskan sifar ke dalam tatasusunan titik kawalan. Muka boleh menjadi segitiga, kuad, atau poligon berarity lebih tinggi. Data tambahan per-simpul – normal, koordinat UV, warna simpul – dilampirkan sebagai VertexElement lapisan.

public class Mesh extends Geometry

Methods

A3DObject -> SceneObject -> Entity -> Geometry -> Mesh


Methods

Bina mesh segitiga tunggal dari awal:

import com.aspose.threed.Scene;
import com.aspose.threed.*;


// Create the mesh and add three vertex positions
Mesh mesh = new Mesh();
mesh.getControlPoints().add(new Vector4(0.0, 0.0, 0.0, 1.0));   // vertex 0
mesh.getControlPoints().add(new Vector4(1.0, 0.0, 0.0, 1.0));   // vertex 1
mesh.getControlPoints().add(new Vector4(0.5, 1.0, 0.0, 1.0));   // vertex 2

// Define one triangle face using vertex indices
mesh.createPolygon(0, 1, 2);

// Attach to a scene and save
Scene scene = new Scene();
scene.getRootNode().createChildNode("triangle", mesh);
scene.save("triangle.stl");

Bina mesh kuad (nota: triangulate() adalah stub — lihat amaran di bawah):

import com.aspose.threed.Scene;
import com.aspose.threed.*;


Mesh mesh = new Mesh();
// Four corners of a unit square in the XZ plane
mesh.getControlPoints().add(new Vector4(0, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 0, 1, 1.0));
mesh.getControlPoints().add(new Vector4(0, 0, 1, 1.0));

// One quad face
mesh.createPolygon(0, 1, 2, 3);
System.out.println("Polygons before triangulate: " + mesh.getPolygonCount());  // 1

// WARNING: triangulate() is a stub — it returns a clone, NOT a triangulated mesh.
// The polygon count will remain 1 (not 2).
Mesh triangulated = mesh.triangulate();
System.out.println("Polygons after triangulate: " + triangulated.getPolygonCount());  // still 1

Scene scene = new Scene();
scene.getRootNode().createChildNode("quad", triangulated);
// When saving to STL, pass triangle-only meshes to avoid vertex loss or malformed output.
scene.save("quad.glb");

Methods

MethodsMethodsMethodsMethodsMethods
controlPointsList<Vector4>getControlPoints()Tatasusunan kedudukan simpul. Setiap entri ialah Vector4(x, y, z, w) di mana w ialah 1.0 untuk data kedudukan. Tambah simpul dengan memanggil add() pada senarai yang dikembalikan.
polygonCountintgetPolygonCount()Bilangan muka poligon yang ditakrifkan pada mesh ini.
polygonsList<int[]>getPolygons()Semua definisi muka sebagai senarai tatasusunan indeks. Setiap tatasusunan dalaman menyimpan indeks simpul (ke dalam controlPoints).
edgesList<Integer>getEdges()Data indeks tepi mentah. Terutamanya untuk kegunaan dalaman dan pertanyaan topologi lanjutan.
vertexElementsList<VertexElement>getVertexElements()Semua lapisan elemen simpul yang kini dilampirkan pada mesh ini (normal, UV, warna, dll.).
visiblebooleangetVisible()setVisible(boolean)Methods false, mesh ini disembunyikan dalam penonton yang menghormati kebolehlihatan.
castShadowsbooleangetCastShadows()setCastShadows(boolean)Sama ada mesh ini menghasilkan bayang dalam perender yang menyokong peta bayang.
receiveShadowsbooleangetReceiveShadows()setReceiveShadows(boolean)Sama ada mesh ini menerima bayang‑bayang daripada geometri lain yang memancarkan bayang‑bayang.

Methods

createPolygon(int... indices)

Takrifkan muka poligon baru dengan menyediakan indeks‑vertex dalam susunan. Indeks tersebut merujuk kepada kedudukan dalam getControlPoints(). Menerima tiga atau lebih indeks untuk segitiga, kuad, dan n‑gons.

MethodsMethodsMethods
indicesint...Argumen indeks vertex dalam urutan winding (biasanya berlawanan arah jam apabila dilihat dari luar).

Mengembalikan: void

Mesh mesh = new Mesh();
// ... populate control points ...
mesh.createPolygon(0, 1, 2);       // triangle
mesh.createPolygon(0, 1, 2, 3);    // quad
System.out.println(mesh.getPolygonCount());   // 2

triangulate()

Stub: Mengembalikan klon mesh asal. Bertujuan untuk memecah semua poligon menjadi segitiga menggunakan triangulasi kipas, tetapi logik triangulasi sebenar belum dilaksanakan. Mesh asal tidak diubah.

Mengembalikan: Mesh – sebuah klon mesh asal (kelakuan stub).

import com.aspose.threed.*;

Mesh mesh = new Mesh();
mesh.getControlPoints().add(new Vector4(0, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 1, 0, 1.0));
mesh.getControlPoints().add(new Vector4(0, 1, 0, 1.0));
mesh.createPolygon(0, 1, 2, 3);   // one quad

Mesh triMesh = mesh.triangulate();
// Note: currently returns a clone, not a triangulated mesh
System.out.println(triMesh.getPolygonCount());

toMesh()

Kembalikan ini Mesh sebagai Mesh instans. Untuk Mesh objek ini merupakan operasi identiti (mengembalikan this). Ditakrifkan pada Geometry kelas asas untuk menyediakan antara muka penukaran seragam apabila bekerja dengan Geometry rujukan generik.

Mengembalikan: Mesh

import com.aspose.threed.*;

Mesh ensureMesh(Geometry geom) {
    return geom.toMesh();
}

createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)

Tambah satu VertexElement lapisan jenis yang ditentukan kepada mesh. Gunakan ini untuk melampirkan normal, tangen, binormal, warna verteks, dan kumpulan penjadualan.

MethodsMethodsMethods
elementTypeVertexElementTypeJenis data yang disimpan lapisan ini (contoh,., VertexElementType.NORMAL).
mappingModeMappingModeBagaimana data dipetakan kepada geometri: CONTROL_POINT, POLYGON_VERTEX, POLYGON, dll.
referenceModeReferenceModeBagaimana indeks digunakan: DIRECT atau INDEX_TO_DIRECT.

Mengembalikan: VertexElement

import com.aspose.threed.*;





Mesh mesh = new Mesh();
mesh.getControlPoints().add(new Vector4(0, 0, 0, 1));
mesh.getControlPoints().add(new Vector4(1, 0, 0, 1));
mesh.getControlPoints().add(new Vector4(0.5, 1, 0, 1));
mesh.createPolygon(0, 1, 2);

VertexElement normalElement = mesh.createElement(
    VertexElementType.NORMAL,
    MappingMode.CONTROL_POINT,
    ReferenceMode.DIRECT
);

createElementUV(TextureMapping uvMapping, MappingMode mappingMode, ReferenceMode referenceMode)

Tambah lapisan koordinat UV ke mesh. Ini adalah kaedah yang disarankan untuk melampirkan data koordinat tekstur.

MethodsMethodsMethods
uvMappingTextureMappingTujuan saluran UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, dll.
mappingModeMappingModeBagaimana UV dipetakan ke elemen geometri.
referenceModeReferenceModeMod indeks: DIRECT atau INDEX_TO_DIRECT.

Mengembalikan: VertexElementUV

import com.aspose.threed.*;




Mesh mesh = new Mesh();
// ... define control points and polygons ...
VertexElementUV uvElement = mesh.createElementUV(
    TextureMapping.DIFFUSE,
    MappingMode.POLYGON_VERTEX,
    ReferenceMode.INDEX_TO_DIRECT
);

Kaedah Boolean dan Pengoptimuman (Stubs)

Kaedah berikut terdapat pada Mesh tetapi adalah stubs yang mengembalikan klon mesh asal tanpa melaksanakan operasi yang dimaksudkan.

Penting: union, difference, intersect, dan doBoolean adalah kaedah statik, bukan kaedah contoh. Panggil mereka sebagai Mesh.union(a, b), bukan a.union(b).

MethodsJenis PulanganMethods
static Mesh.union(Mesh a, Mesh b)MeshStub: mengembalikan klon bagi a. Dimaksudkan untuk penyatuan CSG.
static Mesh.difference(Mesh a, Mesh b)MeshStub: mengembalikan klon bagi a. Dimaksudkan untuk penolakan CSG.
static Mesh.intersect(Mesh a, Mesh b)MeshStub: mengembalikan klon bagi a. Dimaksudkan untuk persilangan CSG.
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb)MeshStub: mengembalikan klon bagi a. Dimaksudkan untuk CSG umum dengan transformasi.
optimize(boolean removeVertices)MeshStub: mengembalikan klon. Empat overload parameter: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float).
optimize2(boolean removeVertices)MeshStub: mengembalikan klon. Titik masuk pengoptimuman alternatif.

Lihat Juga

 Bahasa Melayu