将 3D 变换转换为 2D
Converting 3D transformation to 2D
我正在尝试找出一种在OpenGL中将3D转换矩阵转换为2D的方法。我的 z 坐标被忽略(我正在使用地面投影(。
以下是我试图实现的目标的示例:
// Given a transformation matrix
// | r00 r01 r01 t0 |
// | r10 r11 r11 t1 |
// | r20 r21 r21 t2 |
// | 0. 0. 0. 1. |
//
// Ignore the z-coordinate, and convert it to
// | r00 r01 t0 |
// | r10 r11 t1 |
// | 0. 0. 1. |
glm::dmat4 t_matrix_3D = GetTransformation();
glm::dmat3 t_matrix_2D = glm::dmat3(t_matrix_3D);
t_matrix_2D[2] = dvec3(dvec2(t_matrix_3D[3]), 1.);
t_matrix_2D[0][2] = 0.;
t_matrix_2D[1][2] = 0.;
问题是是否有更漂亮的方法?也许使用矩阵切片或子矩阵提取?
最容易理解的,也可能是性能最好的方法是编写一个内联方法或函数,并直接使用glm::mat3
的构造函数:
glm::mat3 Mat3Dto2D( const glm::mat4 & m )
{
return glm::mat3(
m[0][0], m[0][1], 0.0f,
m[1][0], m[1][1], 0.0f,
m[3][0], m[3][1], 1.0f
);
}
相关文章:
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- C++动态将矢量转换为 2D
- 借助功能将 2D 转换为 1D 数组
- 将2D矢量转换为FFTW_Complex
- 使用C++将1D数组转换为2D字符串数组
- 将 3D 变换转换为 2D
- 如何在 c++ 中将 2D 数组转换为单个字符串
- 如何将 2d 数组转换为 svg 或 png 格式的数独图像?
- 使用 std::transform 在 2d C 阵列上转换为 1d C 数组
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 用于将笛卡尔 (x,y,z) 转换为圆柱坐标 (ρ,θ,z) 坐标 2D/3D 的代码
- 在 C++ 中,用于将大型 2D 数组转换为 1D 数组的内存分配
- 使用 c++ 将 2d CAD 对象转换为 TIFF 格式
- 如何将 2D 数组转换为矢量
- (对于C++)读取类型从文件转换为 2D 数组
- 使用 c++ 将 1D 转换为 2D
- 将 2D 矢量转换为 C 类型的最佳方法(适用于 SGX 飞地)
- 将2D转换的1D阵列顺时针旋转90度
- 将子向量合并/展平为单个向量c++(将2d转换为1d)
- 将点2d转换为材质