Customization
约 610 字大约 2 分钟
2026-02-07
本库内置的图形类型较为基础,在部分场景下需要通过自定义图形来满足渲染需求。本文档将说明如何在本库中定义并实现自定义图形。
自定义图形的渲染可以采用两种方式:使用本库中图形渲染时提供的 vertexBuilder 实例,或自行接管图形的渲染循环。对于仅包含基础颜色的图形,可以续用本库对原版 BufferBuilder 的封装实现;若需要贴图渲染或其他高级效果,则应自行实现完整的渲染流程。
Shape 类的基础结构说明
Shape 是本渲染库中所有可绘制图形的抽象基类。它定义了一种图形的统一结构,自定义图形需通过继承该类来实现。
Shape 主要负责四个行为:
- 描述图形的几何数据
- 管理图形的变换
- 维护父子层级关系
- 参与并控制渲染流程
一般,在自定义图形时,需要自行定义第1与第4部分的行为。
定义几何数据
Shape的子类通常通过generateRawGeometry生成几何数据。 当自定义图形的几何结构可以通过程序化方式自动生成时,考虑应优先使用该方法。
protected abstract void generateRawGeometry(boolean lerp);在该方法中,需要负责填充图形的几何信息,包括顶点列表与索引缓冲:
public List<Vec3> model_vertexes;
public int[] indexBuffer;model_vertexes:图形的原始模型顶点indexBuffer:索引缓冲,用于定义顶点绘制顺序
需要注意的是,此处定义的模型顶点均应使用以 (0, 0, 0) 为中心的局部坐标,而非世界空间中的绝对坐标。 这些顶点将在渲染阶段由 Shape 的变换系统统一应用父子层级与空间变换后,映射到最终的世界坐标中。
基于 Shape 的设计,这里展示一些自定义图形的例子。
1,四边形图形:仅修改顶点生成
public class CustomQuadShape extends Shape {
public CustomQuadShape(...) {
super(...);
}
@Override
protected void generateRawGeometry(boolean lerp) {
model_vertexes.clear();
model_vertexes.add(new Vec3(-0.5, -0.5, 0)); //0
model_vertexes.add(new Vec3( 0.5, -0.5, 0)); //1
model_vertexes.add(new Vec3( 0.5, 0.5, 0)); //2
model_vertexes.add(new Vec3(-0.5, 0.5, 0)); //3
//所有顶点(0~3号)
indexBuffer = new int[]{
0,1,2, 2,3,0
};
//连接顶点的顺序
}
}