Mesh — Aspose.3D FOSS for Java

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

Mesh menyimpan geometri poligon sebagai daftar titik kontrol (posisi vertex) dan daftar wajah poligon. Setiap wajah poligon adalah daftar indeks berbasis nol ke array titik kontrol. Wajah dapat berupa segitiga, kuad, atau poligon dengan aritas lebih tinggi. Data tambahan per-vertex – normal, koordinat UV, warna vertex – dilampirkan sebagai VertexElement lapisan.

public class Mesh extends Geometry

Methods

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


Methods

Bangun 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");

Bangun mesh kuad (catatan: triangulate() adalah stub — lihat peringatan 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()Array posisi vertex. Setiap entri adalah sebuah Vector4(x, y, z, w) di mana w adalah 1.0 untuk data posisi. Tambahkan vertex dengan memanggil add() pada daftar yang dikembalikan.
polygonCountintgetPolygonCount()Jumlah wajah poligon yang didefinisikan pada mesh ini.
polygonsList<int[]>getPolygons()Semua definisi wajah sebagai daftar array indeks. Setiap array dalam menyimpan indeks vertex (ke controlPoints).
edgesList<Integer>getEdges()Data indeks tepi mentah. Utamanya untuk penggunaan internal dan kueri topologi lanjutan.
vertexElementsList<VertexElement>getVertexElements()Semua lapisan elemen vertex yang saat ini terlampir pada mesh ini (normal, UV, warna, dll.).
visiblebooleangetVisible()setVisible(boolean)Methods false, mesh ini disembunyikan di penampil yang menghormati visibilitas.
castShadowsbooleangetCastShadows()setCastShadows(boolean)Apakah mesh ini menghasilkan bayangan dalam renderer yang mendukung peta bayangan.
receiveShadowsbooleangetReceiveShadows()setReceiveShadows(boolean)Apakah mesh ini menerima bayangan dari geometri lain yang memancarkan bayangan.

Methods

createPolygon(int... indices)

Definisikan sebuah wajah poligon baru dengan memberikan indeks vertex secara berurutan. Indeks-indeks tersebut merujuk pada posisi di getControlPoints(). Menerima tiga atau lebih indeks untuk segitiga, kuad, dan n-gon.

MethodsMethodsMethods
indicesint...Argumen indeks vertex dalam urutan winding (biasanya berlawanan arah jarum jam ketika 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 dari mesh asli. Dimaksudkan untuk membagi semua poligon menjadi segitiga menggunakan fan triangulation, tetapi logika triangulasi sebenarnya belum diimplementasikan. Mesh asli tidak dimodifikasi.

Mengembalikan: Mesh – sebuah klon dari mesh asli (perilaku 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 instance. Untuk Mesh objek ini adalah operasi identitas (mengembalikan this). Didefinisikan pada Geometry kelas dasar untuk menyediakan antarmuka konversi seragam saat bekerja dengan Geometry referensi.

Mengembalikan: Mesh

import com.aspose.threed.*;

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

createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)

Tambahkan VertexElement lapisan dengan tipe yang ditentukan ke mesh. Gunakan ini untuk melampirkan normal, tangent, binormal, warna vertex, dan grup smoothing.

MethodsMethodsMethods
elementTypeVertexElementTypeJenis data yang disimpan lapisan ini (misalnya,., VertexElementType.NORMAL).
mappingModeMappingModeBagaimana data dipetakan ke 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)

Tambahkan lapisan koordinat UV ke mesh. Ini adalah metode yang disarankan untuk melampirkan data koordinat tekstur.

MethodsMethodsMethods
uvMappingTextureMappingTujuan saluran UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, dll.
mappingModeMappingModeBagaimana UV dipetakan ke elemen geometri.
referenceModeReferenceModeMode pengindeksan: 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
);

Metode Boolean dan Optimisasi (Stubs)

Metode berikut ada pada Mesh tetapi adalah stub yang mengembalikan klon mesh asli tanpa melakukan operasi yang dimaksud.

Penting: union, difference, intersect, dan doBoolean adalah metode statis, bukan metode instance. Panggil mereka sebagai Mesh.union(a, b), bukan a.union(b).

MethodsTipe PengembalianMethods
static Mesh.union(Mesh a, Mesh b)MeshStub: mengembalikan klon dari a. Ditujukan untuk union CSG.
static Mesh.difference(Mesh a, Mesh b)MeshStub: mengembalikan klon dari a. Ditujukan untuk pengurangan CSG.
static Mesh.intersect(Mesh a, Mesh b)MeshStub: mengembalikan klon dari a. Ditujukan untuk interseksi CSG.
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb)MeshStub: mengembalikan klon dari a. Ditujukan untuk CSG umum dengan transformasi.
optimize(boolean removeVertices)MeshStub: mengembalikan sebuah klon. Empat overload parameter: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float).
optimize2(boolean removeVertices)MeshStub: mengembalikan sebuah klon. Titik masuk optimasi alternatif.

Lihat Juga

 Bahasa Indonesia