Mesh
Pakej: aspose.threed.entities (aspose-3d-foss 26.1.0)
Mesh menyimpan geometri poligon sebagai senarai titik kawalan (kedudukan vertex) 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-vertex; normal, koordinat UV, warna vertex; dilampirkan sebagai VertexElement lapisan.
class Mesh(Geometry):Properties
A3DObject → SceneObject → Entity → Geometry → Mesh
Properties
Bina satu mesh segitiga tunggal dari awal:
from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4
# Create the mesh and add three vertex positions
# control_points is a property (list): append to it directly
mesh = Mesh()
mesh.control_points.append(Vector4(0.0, 0.0, 0.0, 1.0)) # vertex 0
mesh.control_points.append(Vector4(1.0, 0.0, 0.0, 1.0)) # vertex 1
mesh.control_points.append(Vector4(0.5, 1.0, 0.0, 1.0)) # vertex 2
# Define one triangle face using vertex indices
mesh.create_polygon(0, 1, 2)
# Attach to a scene and save
scene = Scene()
scene.root_node.create_child_node("triangle", mesh)
scene.save("triangle.stl")Bina mesh kuad dan lakukan triangulasi sebelum dieksport:
from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4
mesh = Mesh()
# Four corners of a unit square in the XZ plane
for x, z in [(0, 0), (1, 0), (1, 1), (0, 1)]:
mesh.control_points.append(Vector4(float(x), 0.0, float(z), 1.0))
# One quad face
mesh.create_polygon(0, 1, 2, 3)
print(f"Polygons before triangulate: {mesh.polygon_count}") # 1
triangulated = mesh.triangulate()
print(f"Polygons after triangulate: {triangulated.polygon_count}") # 2
scene = Scene()
scene.root_node.create_child_node("quad", triangulated)
scene.save("quad.glb")Properties
control_points, polygon_count, polygons, edges, dan vertex_elements adalah semua sifat; akses mereka tanpa kurungan.
| Properties | Properties | Properties | Properties |
|---|---|---|---|
control_points | list[Vector4] | baca | Tatasusunan kedudukan vertex. Setiap entri ialah satu Vector4(x, y, z, w) di mana w ialah 1.0 untuk data kedudukan. Tambahkan ke senarai ini untuk menambah vertex. |
polygon_count | int | baca | Bilangan muka poligon yang ditakrifkan pada mesh ini. |
polygons | list[list[int]] | baca | Semua definisi muka sebagai senarai senarai indeks. Setiap senarai dalaman memegang indeks verteks (ke control_points) untuk satu muka. |
edges | list[int] | baca | Data indeks tepi mentah. Terutamanya untuk kegunaan dalaman dan pertanyaan topologi lanjutan. |
vertex_elements | list[VertexElement] | baca | Semua lapisan elemen vertex yang kini dilampirkan pada mesh ini (normal, UV, warna, dll.). |
visible | bool | baca/tulis | Properties False, mesh ini disembunyikan dalam penonton yang menghormati kebolehlihatan. |
cast_shadows | bool | baca/tulis | Sama ada mesh ini menghasilkan bayang dalam perender yang menyokong peta bayang. |
receive_shadows | bool | baca/tulis | Sama ada mesh ini menerima bayang daripada geometri lain yang menghasilkan bayang. |
Properties
create_polygon(*indices)
Takrifkan muka poligon baru dengan menyediakan indeks vertex dalam susunan. Indeks tersebut merujuk kepada kedudukan dalam control_points. Menerima tiga atau lebih indeks untuk segitiga, kuad, dan n-gon.
| Properties | Properties | Properties |
|---|---|---|
*indices | int | Argumen indeks vertex dalam urutan lilitan (biasanya berlawanan arah jam apabila dilihat dari luar). |
Mengembalikan: None
mesh = Mesh()
# ... populate control_points ...
mesh.create_polygon(0, 1, 2) # triangle
mesh.create_polygon(0, 1, 2, 3) # quad
print(mesh.polygon_count) # 2triangulate()
Kembalikan satu Mesh di mana setiap poligon telah dibahagikan kepada segitiga menggunakan triangulasi kipas. Mesh asal tidak diubah. Berguna sebelum mengeksport ke format yang memerlukan geometri hanya segitiga (seperti STL atau beberapa saluran glTF).
Mengembalikan: Mesh; satu mesh baru yang hanya mengandungi segitiga.
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4
mesh = Mesh()
for v in [(0,0,0), (1,0,0), (1,1,0), (0,1,0)]:
mesh.control_points.append(Vector4(*v, 1.0))
mesh.create_polygon(0, 1, 2, 3) # one quad
tri_mesh = mesh.triangulate()
print(tri_mesh.polygon_count) # 2to_mesh()
Kembalikan ini Mesh sebagai Mesh instans. Untuk Mesh objek ini adalah operasi identiti (mengembalikan self) Geometry kelas asas untuk menyediakan antara muka penukaran seragam apabila bekerja dengan generik Geometry rujukan.
Mengembalikan: Mesh
from aspose.threed.entities import Geometry
def ensure_mesh(geom: Geometry):
return geom.to_mesh()create_element(element_type, mapping_mode, reference_mode)
Tambah yang baru VertexElement lapisan jenis yang ditentukan ke mesh. Gunakan ini untuk melampirkan normal, tangen, binormal, warna verteks, dan kumpulan penghalusan.
| Properties | Properties | Properties |
|---|---|---|
element_type | VertexElementType | Jenis data yang disimpan lapisan ini (contoh,., VertexElementType.NORMAL). |
mapping_mode | MappingMode | Bagaimana data dipetakan ke geometri: CONTROL_POINT, POLYGON_VERTEX, POLYGON, dll. |
reference_mode | ReferenceMode | Bagaimana indeks digunakan: DIRECT atau INDEX_TO_DIRECT. |
Mengembalikan: VertexElement
from aspose.threed.entities import Mesh, VertexElementType, MappingMode, ReferenceMode
from aspose.threed.utilities import Vector4
mesh = Mesh()
mesh.control_points.append(Vector4(0, 0, 0, 1))
mesh.control_points.append(Vector4(1, 0, 0, 1))
mesh.control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)
normal_element = mesh.create_element(
VertexElementType.NORMAL,
MappingMode.CONTROL_POINT,
ReferenceMode.DIRECT,
)create_element_uv(uv_mapping, mapping_mode, reference_mode)
Tambah lapisan koordinat UV ke mesh. Ini adalah kaedah yang disarankan untuk melampirkan data koordinat tekstur.
| Properties | Properties | Properties |
|---|---|---|
uv_mapping | TextureMapping | Tujuan saluran UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, dll. |
mapping_mode | MappingMode | Bagaimana UVs dipetakan ke elemen geometri. |
reference_mode | ReferenceMode | Mod pengindeksan: DIRECT atau INDEX_TO_DIRECT. |
Mengembalikan: VertexElementUV
from aspose.threed.entities import Mesh, TextureMapping, MappingMode, ReferenceMode
mesh = Mesh()
# ... define control_points and polygons ...
uv_element = mesh.create_element_uv(
TextureMapping.DIFFUSE,
MappingMode.POLYGON_VERTEX,
ReferenceMode.INDEX_TO_DIRECT,
)