Type: concept
Confidence: 0.90
Created: 2026-04-16
Updated: 2026-04-16
Tags: graphicsgeometryurho3durhoxluarendering游戏开发

CustomGeometry程序化几何体

概述

当引擎内置模型(Box、Sphere、Cylinder 等)不支持所需基础形状时,使用 CustomGeometry 组件程序化生成任意几何体,如半球、圆锥台、楔形、扇形等。

关键内容

引擎内置模型(UrhoX/Urho3D)

Box、Sphere、Cylinder、Cone、Plane、Torus、TeaPot。不支持:半球、圆锥台、楔形、扇形、胶囊体(非物理)、任意多边形柱体。

CustomGeometry 工作流

local geom = node:CreateComponent("CustomGeometry")
geom:BeginGeometry(0, TRIANGLE_LIST)  -- 开始定义,索引0,三角形列表模式

-- 每个顶点必须依次定义三属性
geom:DefineVertex(Vector3(x, y, z))
geom:DefineNormal(Vector3(nx, ny, nz))  -- 法线用于光照
geom:DefineTexCoord(Vector2(u, v))

-- 用顶点索引定义三角形
geom:DefineTriangle(idx0, idx1, idx2)

geom:Commit()
geom:SetMaterial(material)

TRIANGLE_LIST 核心规则

半球生成原理

球面坐标转笛卡尔:

x = r·sin(φ)·cos(θ)
y = r·cos(φ)
z = r·sin(φ)·sin(θ)

上半球 φ ∈ [0, π/2],下半球 φ ∈ [π/2, π]。上下半球绕序相反以保证面朝外。底面(切面)单独构建,可赋不同材质模拟截面效果。

性能建议

常用几何公式

-- 圆柱侧面:x=r·cos(θ), y=h·t, z=r·sin(θ)
-- 圆锥侧面:x=r·(1-t)·cos(θ), y=h·t, z=r·(1-t)·sin(θ)

来源

相关