Dandelion 1.1.1
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
杂项工具

一些杂项工具。 更多...

文件

文件  formatter.hpp
 提供对 Eigen 列向量和方阵类型的格式化支持。
 
文件  kinetic_state.h
 
文件  linked_list.hpp
 
文件  logger.h
 声明了创建 / 获取 logger 用的工具函数。
 
文件  math.hpp
 这个文件提供一些方便使用的数学函数。
 
文件  ray.h
 提供生成射线、判定相交的工具函数。
 
文件  rendering.hpp
 这个文件定义了一些和渲染(离线渲染或场景预览)相关的常量、枚举等。
 
文件  stb_image_wrapper.cpp
 用于包装 stb_image 库的文件。
 

class  SpinLock
 自旋锁 更多...
 
class  AABB
 BVH中的Aligned-axis bounding box 更多...
 
struct  BVHNode
 表示的是BVH建立的树中的节点 更多...
 
struct  SortNode
 用于在BVH划分左右子树时作为参与排序的节点 更多...
 
struct  Ray
 
struct  Intersection
 表示射线与 Mesh 相交结果的结构体。 更多...
 

宏定义

#define RGB_COLOR(r, g, b)
 

函数

template<typename T>
pi ()
 返回 float 或 double 类型的 \(\pi\) 值。
 
template<typename T>
constexpr T radians (T degrees)
 将角度转换为弧度。
 
template<typename T>
constexpr T degrees (T radians)
 将弧度转换为角度。
 
template<typename T>
constexpr T squ (T x)
 求一个数的平方。
 
template<typename T>
constexpr T clamp (T low, T high, T value)
 将一个数截断在给定的上下界之间
 
template<typename T>
constexpr Eigen::Vector< T, 4 > to_vec4 (Eigen::Vector< T, 3 > vec3)
 将代表方向的三维向量转换为它的齐次坐标形式。
 
Eigen::Vector3f reflect (const Eigen::Vector3f &I, const Eigen::Vector3f &N)
 求向量 \(\mathbf{I}\) 关于向量 \(\mathbf{N}\) 的反射。
 
template<typename T>
constexpr T sign (T x)
 符号函数,正数的求值结果为 1,负数为 -1,零的求值结果是 0.
 
template<typename T>
std::tuple< T, T, T > quaternion_to_ZYX_euler (T w, T x, T y, T z)
 将旋转的四元数表示形式转换为 ZYX 欧拉角表示形式。
 
constexpr unsigned int vertex_position_location = 0
 
constexpr unsigned int vertex_color_location = 1
 
constexpr unsigned int vertex_normal_location = 2
 

详细描述

一些杂项工具。

宏定义说明

◆ RGB_COLOR

#define RGB_COLOR ( r,
g,
b )
值:
(float)r / 255.0f, (float)g / 255.0f, (float)b / 255.0f

将整数形式的颜色转换成浮点数,便于传入 Eigen::Vector3f 的构造函数。

函数说明

◆ quaternion_to_ZYX_euler()

template<typename T>
std::tuple< T, T, T > quaternion_to_ZYX_euler ( T w,
T x,
T y,
T z )
inline

将旋转的四元数表示形式转换为 ZYX 欧拉角表示形式。

这个函数采用 ZYX 顺规(即依次绕自身 \(z, y, x\) 轴旋转)。在 Dandelion 的坐标系约定下,ZYX 顺规对应 roll-yaw-pitch 旋转顺序(滚转、航向、俯仰)。

由于欧拉角固有的缺陷,这个函数并不能消除航向角(或称方向角 yaw)在 \(\pm 90^\circ\) 附近时产生的万向锁和抖动问题。

虽然函数的返回值是 tuple,但使用 tuple 接受返回值并不方便,建议用结构化绑定

auto [x_angle, y_angle, z_angle] = quaternion_to_ZYX_euler(w, x, y, z);
std::tuple< T, T, T > quaternion_to_ZYX_euler(T w, T x, T y, T z)
将旋转的四元数表示形式转换为 ZYX 欧拉角表示形式。
定义 math.hpp:150

std::tie 来接受返回值。

返回
一个元组,它的三个分量依次是绕 x 轴、绕 y 轴和绕 z 轴的旋转角(角度制)。

◆ reflect()

Eigen::Vector3f reflect ( const Eigen::Vector3f & I,
const Eigen::Vector3f & N )
inline

求向量 \(\mathbf{I}\) 关于向量 \(\mathbf{N}\) 的反射。

参数
I表示入射射线的向量(不必是单位向量)
N反射平面的法线(必须是单位向量)

◆ to_vec4()

template<typename T>
Eigen::Vector< T, 4 > to_vec4 ( Eigen::Vector< T, 3 > vec3)
inlineconstexpr

将代表方向的三维向量转换为它的齐次坐标形式。

该函数在一个 \(3\times 1\)的向量的末尾补 0 ,从而将其转换为 \(4\times 1\)的方向向量。 如欲将三维的点转换为齐次坐标形式,请直接调用 Eigen::Vector 类型的 homogeneous 方法。

变量说明

◆ vertex_position_location

unsigned int vertex_position_location = 0
constexpr

预览场景时,GLSL shader 中各输入变量的位置。相应的变量定义参考 resources/shaders 中的 shader 代码。