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

A3DObjectSceneObjectEntityGeometryMesh


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.

PropertiesPropertiesPropertiesProperties
control_pointslist[Vector4]bacaTatasusunan 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_countintbacaBilangan muka poligon yang ditakrifkan pada mesh ini.
polygonslist[list[int]]bacaSemua definisi muka sebagai senarai senarai indeks. Setiap senarai dalaman memegang indeks verteks (ke control_points) untuk satu muka.
edgeslist[int]bacaData indeks tepi mentah. Terutamanya untuk kegunaan dalaman dan pertanyaan topologi lanjutan.
vertex_elementslist[VertexElement]bacaSemua lapisan elemen vertex yang kini dilampirkan pada mesh ini (normal, UV, warna, dll.).
visibleboolbaca/tulisProperties False, mesh ini disembunyikan dalam penonton yang menghormati kebolehlihatan.
cast_shadowsboolbaca/tulisSama ada mesh ini menghasilkan bayang dalam perender yang menyokong peta bayang.
receive_shadowsboolbaca/tulisSama 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.

PropertiesPropertiesProperties
*indicesintArgumen 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)          # 2

triangulate()

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)      # 2

to_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.

PropertiesPropertiesProperties
element_typeVertexElementTypeJenis data yang disimpan lapisan ini (contoh,., VertexElementType.NORMAL).
mapping_modeMappingModeBagaimana data dipetakan ke geometri: CONTROL_POINT, POLYGON_VERTEX, POLYGON, dll.
reference_modeReferenceModeBagaimana 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.

PropertiesPropertiesProperties
uv_mappingTextureMappingTujuan saluran UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, dll.
mapping_modeMappingModeBagaimana UVs dipetakan ke elemen geometri.
reference_modeReferenceModeMod 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,
)

Lihat Juga

 Bahasa Melayu