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

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

#include <gl.hpp>

Public 成员函数

 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()

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

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

成员函数说明

◆ 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。

参数
element_flags指定渲染哪些元素的二进制串,可以是 vertices_flag / edges_flag / faces_flag 中的任意一个或多个
face_shading面片是否根据光照和材质进行着色,若否,则统一使用全局颜色。

◆ vertex()

Vector3f Mesh::vertex ( size_t index) const

读取编号为 index 的顶点。

类成员变量说明

◆ material

Material GL::Mesh::material

每个 Mesh 只能有一个材质


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