Mesh — Aspose.3D FOSS for Java
Gói: com.aspose.threed (aspose-3d-foss 26.1.0)
Mesh lưu trữ hình học đa giác dưới dạng danh sách các điểm điều khiển (vị trí đỉnh) và danh sách các mặt đa giác. Mỗi mặt đa giác là một danh sách các chỉ số bắt đầu từ 0 vào mảng các điểm điều khiển. Các mặt có thể là tam giác, tứ giác hoặc các đa giác có số đỉnh cao hơn. Dữ liệu bổ sung cho mỗi đỉnh – pháp tuyến, tọa độ UV, màu đỉnh – được gắn kèm như VertexElement lớp.
public class Mesh extends GeometryMethods
A3DObject -> SceneObject -> Entity -> Geometry -> Mesh
Methods
Xây dựng một lưới tam giác đơn từ đầu:
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");Xây dựng một lưới tứ giác (lưu ý: triangulate() là một stub — xem cảnh báo bên dưới):
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
| Methods | Methods | Methods | Methods | Methods |
|---|---|---|---|---|
controlPoints | List<Vector4> | getControlPoints() | – | Mảng vị trí đỉnh. Mỗi mục là một. Vector4(x, y, z, w) nơi w là 1.0 đối với dữ liệu vị trí. Thêm các đỉnh bằng cách gọi add() trên danh sách đã trả về. |
polygonCount | int | getPolygonCount() | – | Số lượng mặt đa giác được định nghĩa trên lưới này. |
polygons | List<int[]> | getPolygons() | – | Tất cả các định nghĩa mặt dưới dạng danh sách các mảng chỉ mục. Mỗi mảng bên trong chứa các chỉ mục đỉnh (vào controlPoints) cho một mặt. |
edges | List<Integer> | getEdges() | – | Dữ liệu chỉ mục cạnh thô. Chủ yếu dùng cho mục đích nội bộ và các truy vấn tôpô tiên tiến. |
vertexElements | List<VertexElement> | getVertexElements() | – | Tất cả các lớp phần tử đỉnh hiện đang gắn vào lưới này (normals, UVs, colours, v.v.). |
visible | boolean | getVisible() | setVisible(boolean) | Methods false, lưới sẽ bị ẩn trong các trình xem tôn trọng tính hiển thị. |
castShadows | boolean | getCastShadows() | setCastShadows(boolean) | Liệu lưới này có tạo bóng trong các trình render hỗ trợ bản đồ bóng hay không. |
receiveShadows | boolean | getReceiveShadows() | setReceiveShadows(boolean) | Liệu lưới này có nhận bóng từ các hình học tạo bóng khác hay không. |
Methods
createPolygon(int... indices)
Định nghĩa một mặt đa giác mới bằng cách cung cấp các chỉ mục đỉnh theo thứ tự. Các chỉ mục tham chiếu tới vị trí trong getControlPoints(). Chấp nhận ba hoặc nhiều hơn chỉ mục cho tam giác, tứ giác và n-gon.
| Methods | Methods | Methods |
|---|---|---|
indices | int... | Các đối số chỉ mục đỉnh theo thứ tự quấn (thông thường ngược chiều kim đồng hồ khi nhìn từ bên ngoài). |
Trả về: 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()); // 2triangulate()
Mẫu: Trả về một bản sao của lưới gốc. Dự định tách tất cả các đa giác thành các tam giác bằng cách sử dụng fan triangulation, nhưng logic triangulation thực tế chưa được triển khai. Lưới gốc không bị thay đổi.
Trả về: Mesh – một bản sao của lưới gốc (hành vi mẫu).
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()
Trả về đối tượng này Mesh như một Mesh đối tượng. Đối với Mesh các đối tượng, đây là một phép toán đồng nhất (trả về this). Được định nghĩa trên Geometry lớp cơ sở để cung cấp giao diện chuyển đổi đồng nhất khi làm việc với các Geometry tham chiếu.
Trả về: Mesh
import com.aspose.threed.*;
Mesh ensureMesh(Geometry geom) {
return geom.toMesh();
}createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)
Thêm một VertexElement lớp có kiểu được chỉ định vào lưới. Sử dụng điều này để gắn các vector pháp tuyến, tiếp tuyến, binormals, màu đỉnh, và nhóm làm mịn.
| Methods | Methods | Methods |
|---|---|---|
elementType | VertexElementType | Loại dữ liệu mà lớp này chứa (ví dụ,., VertexElementType.NORMAL). |
mappingMode | MappingMode | Cách dữ liệu ánh xạ tới hình học: CONTROL_POINT, POLYGON_VERTEX, POLYGON, v.v. |
referenceMode | ReferenceMode | Cách sử dụng các chỉ mục: DIRECT hoặc INDEX_TO_DIRECT. |
Trả về: 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)
Thêm một lớp tọa độ UV vào lưới. Đây là phương pháp ưu tiên để gắn dữ liệu tọa độ texture.
| Methods | Methods | Methods |
|---|---|---|
uvMapping | TextureMapping | Mục đích của kênh UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, v.v. |
mappingMode | MappingMode | Cách UV được ánh xạ tới các phần tử hình học. |
referenceMode | ReferenceMode | Chế độ chỉ mục: DIRECT hoặc INDEX_TO_DIRECT. |
Trả về: 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
);Các phương thức Boolean và Tối ưu hoá (Stubs)
Các phương thức sau tồn tại trên Mesh nhưng là stubs trả về một bản sao của lưới gốc mà không thực hiện thao tác dự định của chúng.
Quan trọng: union, difference, intersect, và doBoolean là phương thức tĩnh, không phải phương thức instance. Gọi chúng như Mesh.union(a, b), không phải a.union(b).
| Methods | Kiểu trả về | Methods |
|---|---|---|
static Mesh.union(Mesh a, Mesh b) | Mesh | Stub: trả về một bản sao của a. Dành cho phép hợp CSG. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Stub: trả về một bản sao của a. Dành cho phép trừ CSG. |
static Mesh.intersect(Mesh a, Mesh b) | Mesh | Stub: trả về một bản sao của a. Dành cho phép giao CSG. |
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb) | Mesh | Stub: trả về một bản sao của a. Dành cho CSG chung với các phép biến đổi. |
optimize(boolean removeVertices) | Mesh | Mẫu: trả về một bản sao. Bốn phiên bản quá tải tham số: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float). |
optimize2(boolean removeVertices) | Mesh | Mẫu: trả về một bản sao. Điểm vào tối ưu hoá thay thế. |