Dandelion 1.1.1
A light-weight 3D builder for educational usage
|
#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 |
用于场景预览渲染的 Mesh 类。
这个类为了便于和 OpenGL 交互,不会使用 Eigen 中的各种向量存储顶点坐标、法线和颜色等信息,而是直接持有 VAO、VBO 和 EBO。
由于 OpenGL API 只支持绘制三角形,GL::Mesh 存储的面片 (face) 只能是三角形。 四边形乃至任意多边形面片需要先三角化成三角形才能被渲染。
外界读取 Mesh 中的顶点、边等基元时应当调用 vertex/normal/edge/face
方法, 而不是直接访问 vertices.data
等内部存储。这些 ArrayBuffer 或 ElementArrayBuffer 之所以被设为公有成员,是因为在修改数据或进行渲染时需要操作它们, 其他情况下都不必也不应该使用这些扁平存储的数据。
|
delete |
由于 VAO 和 ArrayBuffer 不允许复制构造,Mesh 也不允许复制构造。
array< size_t, 2 > Mesh::edge | ( | size_t | index | ) | const |
读取编号为 index 的边。
array< size_t, 3 > Mesh::face | ( | size_t | index | ) | const |
读取编号为 index 的面片。
Vector3f Mesh::normal | ( | size_t | index | ) | const |
读取编号为 index 的顶点法线。
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 | 面片是否根据光照和材质进行着色,若否,则统一使用全局颜色。 |
Vector3f Mesh::vertex | ( | size_t | index | ) | const |
读取编号为 index 的顶点。