VertexElement — Aspose.3D Python API Reference
Пакет: aspose.threed.entities (aspose-3d-foss 26.1.0)
VertexElement является абстрактным базовым классом для всех слоёв данных, относящихся к вершинам, которые могут быть присоединены к Geometry объекту. Каждый слой хранит массив значений данных вместе с mapping_mode и reference_mode метаданными, описывающими, как данные отображаются на базовую геометрию. Подклассы специализированы для нормалей, UV‑координат, цветов вершин, тангенсов, бинормалей и групп сглаживания.
from aspose.threed.entities import VertexElementVertexElement
vertex_element_type | VertexElementType | чтение | Семантический тип этого слоя (например,., NORMAL, UV, VERTEX_COLOR). |
name | str | чтение/запись | Необязательное имя для этого слоя. |
mapping_mode | MappingMode | чтение/запись | Определяет, с какой геометрической примитивой связано каждое значение данных. |
reference_mode | ReferenceMode | чтение/запись | Определяет, адресуются ли значения напрямую или через массив индексов. |
indices | list[int] | чтение | Массив индексов, используемый когда reference_mode является INDEX_TO_DIRECT. |
data | list[FVector4] | читается | Сырые данные хранятся как FVector4 записи (доступных в VertexElementFVector подклассах). |
set_data(data) | None | Заменить массив данных. Принимает list[FVector2], list[FVector3], или list[FVector4]; значения нормализуются к FVector4 внутренне. |
set_indices(data) | None | Замените массив индексов списком целых чисел. |
clear() | None | Удалите все значения данных и индексы из слоя. |
copy_to(target) | None | Скопировать данные и индексы в другой VertexElementFVector экземпляр. |
VertexElementNormal
Хранит векторы нормали поверхности. Данные о нормалях обычно используются рендерерами для расчётов освещения.
from aspose.threed.entities import VertexElementNormalVertexElement → VertexElementFVector → VertexElementNormal
VertexElementNormal(name="", mapping_mode=None, reference_mode=None)vertex_element_type зафиксировано на VertexElementType.NORMAL.
VertexElementUV
Хранит UV‑координаты текстур. Сетка может содержать несколько UV‑слоёв для разных текстурных каналов.
from aspose.threed.entities import VertexElementUVVertexElement → VertexElementFVector → VertexElementUV
VertexElementUV(texture_mapping=None, name="", mapping_mode=None, reference_mode=None)texture_mapping | TextureMapping | Текстурный канал, который обслуживает этот UV-слой. По умолчанию TextureMapping.DIFFUSE. |
Дополнительное свойство
texture_mapping | TextureMapping | читать | Текстурный канал, с которым связан этот слой UV. |
add_data(data)
Добавить данные координат UV. Принимает list[Vector2], list[Vector3], list[FVector2], list[FVector3], или list[FVector4]. Все значения хранятся внутренне как FVector4 с неиспользуемыми компонентами, установленными в 0.0.
VertexElementVertexColor
Хранит значения цвета RGBA для каждой вершины в диапазоне 0–1.
from aspose.threed.entities import VertexElementVertexColorVertexElement → VertexElementFVector → VertexElementVertexColor
VertexElementVertexColor(name="", mapping_mode=None, reference_mode=None)vertex_element_type зафиксировано на VertexElementType.VERTEX_COLOR.
VertexElementTangent
Хранит касательные векторы для каждой вершины или каждого угла, используемые при рендеринге нормальных карт.
from aspose.threed.entities import VertexElementTangentVertexElement → VertexElementFVector → VertexElementTangent
vertex_element_type зафиксировано на VertexElementType.TANGENT.
VertexElementBinormal
Сохраняет векторные бинормали (битангенты) для каждой вершины или угла, дополняя VertexElementTangent для отображения нормалей в тангенциальном пространстве.
from aspose.threed.entities import VertexElementBinormalVertexElement → VertexElementFVector → VertexElementBinormal
vertex_element_type зафиксировано на VertexElementType.BINORMAL.
VertexElementSmoothingGroup
Хранит целочисленные идентификаторы групп сглаживания для каждого полигона. Загружается из OBJ‑файлов, содержащих s объявления.
from aspose.threed.entities import VertexElementSmoothingGroupVertexElement → VertexElementIntsTemplate → VertexElementSmoothingGroup
vertex_element_type зафиксировано на VertexElementType.SMOOTHING_GROUP.
Перечисление VertexElementType
Определяет семантическую роль слоя элемента вершины.
from aspose.threed.entities import VertexElementTypeNORMAL | Векторы нормали поверхности. |
UV | Текстурные UV‑координаты. |
VERTEX_COLOR | RGBA‑цвет для каждой вершины. |
TANGENT | Тангенциальные векторы для normal mapping. |
BINORMAL | Binormal (bitangent) векторы. |
SMOOTHING_GROUP | Целочисленные ID smoothing group для каждого полигона. |
MATERIAL | Индекс материала для каждого полигона. |
POLYGON_GROUP | Индекс группировки полигонов. |
VERTEX_CREASE | Веса сгибов вершин при Subdivision. |
EDGE_CREASE | Веса сгибов ребер при Subdivision. |
USER_DATA | Произвольные пользовательские данные. |
VISIBILITY | Флаги видимости по элементам. |
SPECULAR | Спекулярный цвет или интенсивность. |
WEIGHT | Веса смешивания для скиннинга. |
HOLE | Флаги отверстий в полигоне. |
Перечисление MappingMode
Управляет тем, с какой геометрической примитивой связано каждое значение элемента вершины.
from aspose.threed.entities import MappingModeCONTROL_POINT | Одно значение на контрольную точку (вершину). |
POLYGON_VERTEX | Одно значение на угол полигона (face-vertex). |
POLYGON | Одно значение на полигон. |
EDGE | Одно значение на ребро. |
ALL_SAME | Один единственный параметр применяется ко всей сетке. |
Перечисление ReferenceMode
Определяет способ индексации массива данных.
from aspose.threed.entities import ReferenceModeDIRECT | Данные доступны последовательно без отдельного indices array. |
INDEX | Данные доступны через отдельный indices array. |
INDEX_TO_DIRECT | Indices array сопоставляет каждый mapping primitive с позицией в data array. |
Присоединить слой нормалей к сетке (прямое отображение):
from aspose.threed import Scene
from aspose.threed.entities import Mesh, VertexElementType, MappingMode, ReferenceMode, VertexElementNormal
from aspose.threed.utilities import Vector4, FVector4
mesh = Mesh()
mesh.control_points.append(Vector4(0.0, 0.0, 0.0, 1.0))
mesh.control_points.append(Vector4(1.0, 0.0, 0.0, 1.0))
mesh.control_points.append(Vector4(0.5, 1.0, 0.0, 1.0))
mesh.create_polygon(0, 1, 2)
normals: VertexElementNormal = mesh.create_element(
VertexElementType.NORMAL,
MappingMode.CONTROL_POINT,
ReferenceMode.DIRECT,
)
normals.set_data([
FVector4(0.0, 0.0, 1.0, 0.0),
FVector4(0.0, 0.0, 1.0, 0.0),
FVector4(0.0, 0.0, 1.0, 0.0),
])
scene = Scene()
scene.root_node.create_child_node("tri", mesh)
scene.save("triangle_normals.glb")Присоединить UV‑координаты (соответствие INDEX_TO_DIRECT):
from aspose.threed import Scene
from aspose.threed.entities import Mesh, TextureMapping, MappingMode, ReferenceMode
from aspose.threed.utilities import Vector4, FVector4
mesh = Mesh()
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))
mesh.create_polygon(0, 1, 2, 3)
uv = mesh.create_element_uv(
TextureMapping.DIFFUSE,
MappingMode.POLYGON_VERTEX,
ReferenceMode.INDEX_TO_DIRECT,
)
uv.set_data([
FVector4(0.0, 0.0, 0.0, 0.0),
FVector4(1.0, 0.0, 0.0, 0.0),
FVector4(1.0, 1.0, 0.0, 0.0),
FVector4(0.0, 1.0, 0.0, 0.0),
])
uv.set_indices([0, 1, 2, 3])
scene = Scene()
scene.root_node.create_child_node("quad", mesh)
scene.save("quad_uv.glb")