Dandelion 1.1.1
A light-weight 3D builder for educational usage
|
表示物体的类。 更多...
#include <object.h>
Public 成员函数 | |
Object (const std::string &object_name) | |
Eigen::Matrix4f | model () |
void | update (std::vector< Object * > &all_objects) |
更新下一个时间步的运动状态。 | |
void | render (const Shader &shader, WorkingMode mode, bool selected) |
根据指定的渲染模式渲染物体。 | |
void | rebuild_BVH () |
重新构建 BVH 。 | |
Object (Object &other)=delete | |
Object (const Object &other)=delete | |
Public 属性 | |
std::size_t | id |
std::string | name |
bool | visible |
bool | modified |
Eigen::Vector3f | center |
Eigen::Vector3f | scaling |
Eigen::Quaternionf | rotation |
Eigen::Vector3f | velocity |
Eigen::Vector3f | force |
float | mass |
KineticState | prev_state |
KineticState | backup |
GL::Mesh | mesh |
std::unique_ptr< BVH > | bvh |
根据这个物体建立的 BVH 。 | |
GL::LineSet | BVH_boxes |
静态 Public 属性 | |
static std::function< KineticState(const KineticState &, const KineticState &)> | step |
用于更新物体运动状态的函数。 | |
static bool | BVH_for_collision = false |
Private 成员函数 | |
void | refresh_BVH_boxes (BVHNode *node) |
Private 属性 | |
std::shared_ptr< spdlog::logger > | logger |
静态 Private 属性 | |
static std::size_t | next_available_id = 0 |
表示物体的类。
“物体”由存储几何数据的 mesh、存储变换信息的位姿参数和存储颜色的材质组成, 每个 Object
实例对应唯一的 GL::Mesh
、GL::Material
和唯一的模型变换矩阵 (Model Transform Matrix),是场景中的最小单元。
由于 Object
对象持有的 GL::Mesh
实例是不可复制的,当前的 Object
也是不可复制的。但“复制一个物体”在逻辑上完全合理,因此未来会实现该类的复制构造函数。
|
delete |
禁止复制物体。
Matrix4f Object::model | ( | ) |
此物体的模型变换矩阵 (Model Transform Matrix)。
void Object::render | ( | const Shader & | shader, |
WorkingMode | mode, | ||
bool | selected ) |
根据指定的渲染模式渲染物体。
shader | 对一个 Shader 对象的引用 |
mode | 渲染模式。所有模式下都渲染面片,建模模式下额外渲染边和顶点。 |
selected | 布局模式下该物体是否被选中,被选中的物体额外渲染边。其他模式下, 该参数无意义。 |
void Object::update | ( | std::vector< Object * > & | all_objects | ) |
更新下一个时间步的运动状态。
首先使用 Object::step
计算下一个时间步自身的运动状态,尝试将自身移动到算出的位置, 再检测在此位置是否会与其他物体碰撞。如果发生碰撞则自身位置回退, 并根据动量定理修改碰撞双方的速度。
all_objects | 场景中所有的物体,用于碰撞检测和响应。 |
KineticState Object::backup |
进入物理模拟模式后用于备份初始状态。
std::unique_ptr<BVH> Object::bvh |
GL::LineSet Object::BVH_boxes |
代表 BVH 所有包围盒的线框。
|
static |
是否启用 BVH 加速碰撞检测。
Eigen::Vector3f Object::center |
物体的中心点位置。此处“中心点”指的是模型坐标系的原点而非几何意义上的中心。
Eigen::Vector3f Object::force |
物体所受的合外力。
std::size_t Object::id |
物体的 ID,不会与其他物体重复。
|
private |
日志记录器。
float Object::mass |
物体质量
GL::Mesh Object::mesh |
由于位姿参数每一帧都可能变化,mesh 中存储模型坐标系下的坐标以提高运行效率。 如需获取世界坐标系下的坐标,请乘上模型变换矩阵。
bool Object::modified |
表示上一帧过后是否被修改,在第一次加载后或与半边网格不一致时为真。
std::string Object::name |
物体的名称,来自加载文件时的 mesh 名称(文件中未定义会创建一个默认名称)。
|
staticprivate |
下一个可用的物体 ID 。
KineticState Object::prev_state |
上一帧的状态,用于高阶求解器求解。
Eigen::Quaternionf Object::rotation |
物体的旋转。
Eigen::Vector3f Object::scaling |
物体三轴的缩放因子。
|
static |
用于更新物体运动状态的函数。
让这个静态变量指向不同的函数,就可以更换不同的求解器,默认使用前向欧拉法求解。
Eigen::Vector3f Object::velocity |
物体的速度。
bool Object::visible |
控制物体是否可见,当前恒为真,并无实际作用。