Dandelion 1.1.2
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
GL::Mesh结构体 参考

用于场景预览渲染的 Mesh 类。 更多...

#include <gl.hpp>

Public 成员函数

 Mesh ()
 Mesh (const Mesh &other)=delete
 Mesh (Mesh &&other)
Eigen::Vector3f vertex (size_t index) const
Eigen::Vector3f normal (size_t index) const
std::array< size_t, 2 > edge (size_t index) const
std::array< size_t, 3 > face (size_t index) const
void clear ()
void to_gpu ()
void render (const Shader &shader, unsigned int element_flags, bool face_shading=true, const Eigen::Vector3f &global_color=default_wireframe_color)
 渲染这个 mesh。

Public 属性

VertexArrayObject VAO
ArrayBuffer< float, 3 > vertices
ArrayBuffer< float, 3 > normals
ElementArrayBuffer< 2 > edges
ElementArrayBuffer< 3 > faces
Material material

静态 Public 属性

static constexpr unsigned int vertices_flag = 1u
static constexpr unsigned int edges_flag = 1u << 1u
static constexpr unsigned int faces_flag = 1u << 2u
static const Eigen::Vector3f default_wireframe_color
static const Eigen::Vector3f default_face_color
static const Eigen::Vector3f highlight_wireframe_color
static const Eigen::Vector3f highlight_face_color

详细描述

用于场景预览渲染的 Mesh 类。

为了便于和 OpenGL 交互,这个类不会使用 Eigen 中的各种向量存储顶点坐标、 法线和颜色等信息,而是直接持有 VAO、VBO 和 EBO 的封装对象,顶点数据全部被展平。

由于 OpenGL API 只支持绘制三角形,GL::Mesh 存储的面片 (face) 只能是三角形。 四边形乃至任意多边形面片需要先三角化成三角形才能被渲染。

外界读取 Mesh 中的顶点、边等基元时应当调用 vertex/normal/edge/face 方法, 而不是直接访问 vertices.data 等内部存储。这些 ArrayBufferElementArrayBuffer 之所以被设为公有成员,是因为在修改数据或进行渲染时需要操作它们, 其他情况下都不必也不应该使用这些扁平存储的数据。

构造及析构函数说明

◆ Mesh() [1/3]

Mesh::Mesh ( )

构造渲染所需的 VAO/VBO/EGO 对象。

◆ Mesh() [2/3]

GL::Mesh::Mesh ( const Mesh & other)
delete

由于 VAO 和 ArrayBuffer 不允许复制构造,Mesh 也不允许复制构造。

◆ Mesh() [3/3]

Mesh::Mesh ( Mesh && other)

调用各成员的移动构造。

成员函数说明

◆ clear()

void Mesh::clear ( )

清空内存中的全部数据, 显存不会随之清空

◆ edge()

array< size_t, 2 > Mesh::edge ( size_t index) const

读取编号为 index 的边。

◆ face()

array< size_t, 3 > Mesh::face ( size_t index) const

读取编号为 index 的面片。

◆ normal()

Vector3f Mesh::normal ( size_t index) const

读取编号为 index 的顶点法线。

◆ render()

void Mesh::render ( const Shader & shader,
unsigned int element_flags,
bool face_shading = true,
const Eigen::Vector3f & global_color = default_wireframe_color )

渲染这个 mesh。

参数
shaderShader 对象的引用
element_flags指定渲染哪些元素的二进制串,可以是 vertices_flag / edges_flag / faces_flag 中的任意一个或多个
face_shading面片是否根据光照和材质进行着色,若否,则统一使用全局颜色。 通常仅在显示辅助图形时设置,其他情况下使用默认值即可。
global_color要使用的全局颜色,仅当 face_shading = false 时有效。

◆ to_gpu()

void Mesh::to_gpu ( )

调用各成员的 to_gpu

◆ vertex()

Vector3f Mesh::vertex ( size_t index) const

读取编号为 index 的顶点。

类成员变量说明

◆ default_face_color

const Vector3f Mesh::default_face_color
static

默认面片颜色。

◆ default_wireframe_color

const Vector3f Mesh::default_wireframe_color
static

默认线框颜色,应用于顶点和边。

◆ edges_flag

unsigned int GL::Mesh::edges_flag = 1u << 1u
staticconstexpr

表示开启边渲染。

◆ faces_flag

unsigned int GL::Mesh::faces_flag = 1u << 2u
staticconstexpr

表示开启面片渲染。

◆ highlight_face_color

const Vector3f Mesh::highlight_face_color
static

表示高亮状态的面片颜色。

◆ highlight_wireframe_color

const Vector3f Mesh::highlight_wireframe_color
static

表示高亮状态的线框颜色。

◆ material

Material GL::Mesh::material

每个 Mesh 只能有一个材质

◆ vertices_flag

unsigned int GL::Mesh::vertices_flag = 1u
staticconstexpr

表示开启顶点渲染。


该结构体的文档由以下文件生成: