c++ - 什么是更好的Matrix4x4类设计c++新手

标签 c++ class graphics matrix

用什么来存储矩阵值会更好?

float m1,m2,m3 ... ,m16

float[4][4].

我首先尝试了 float[16] 但是当我调试和测试时 VS 不会显示数组内部的内容 :( 可以实现 cout 并尝试从控制台测试应用程序读取答案。

然后我尝试在测试和调试中使用 float m1、m2、m3 等,这些值可以在 VS 中读取,因此使用起来似乎更容易。

我的问题是因为我对 C++ 还很陌生,什么是更好的设计?

我发现 float m1,m2 ... ,m16 在调试时更容易使用。

如果有人可以根据经验或拥有基准数据说出性能更好的东西,我也会很高兴我的直觉认为这并不重要,因为矩阵数据在内存中的布局应该相同,对吗?

编辑: 更多信息它是一个列主矩阵。 据我所知, View 转换管道只需要一个 4x4 矩阵。 所以没什么大不了的,所以我有一些不变的值(value)观。

忙于编写一个简单的软件渲染器,作为学习更多 c++ 和获得更多经验以及学习/提高我的线性代数技能的一种方式。可能只会使用每个片段着色和一些简单的照明模型,到目前为止,我已经看到 4x4 矩阵是渲染所需的最大矩阵。

编辑2: 找出为什么我无法读取数组数据,这是我使用的浮点指针,调试菜单只显示指针值你想看到的元素。

感谢所有回答的人,我现在将使用 Vector4 m[4] 答案。

最佳答案

您应该考虑一个带有 float [4] 成员的 Vector4 和一个带有 Vector4 [4]Matrix4 > 成员。使用 operator [],您有两个有用的类,并保持访问元素的能力:[i][j] - 在大多数情况下,元素数据将是连续的,前提是您不使用 virtual 方法。

您还可以通过这种方式从 vector (SIMD) 指令中获益,例如,在 Vector4

union alignas(16) { __m128 _v; float _s[4]; }; // members

inline float & operator [] (int i) { return _s[i]; }
inline const float & operator [] (int i) const { return _s[i]; }

Matrix4

Vector4 _m[4]; // members

inline Vector4 & operator [] (int i) { return _m[i]; }
inline const Vector4 & operator [] (int i) const { return _m[i]; }

关于c++ - 什么是更好的Matrix4x4类设计c++新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15809664/

相关文章:

c++ - 在 Windows 7 上监视屏幕保护程序事件失败

c++ - ‘*’ 标记之前的预期构造函数、析构函数或类型转换

c++ - 基本类型和用户定义类型的名称查找问题

javascript - 如何以编程方式绘制具有自动图松弛的非线性书写系统(例如在 d3.js 中)?

c++ - Koenig Lookup 的奇怪行为

c++ - 链表中修改的数据不会反射(reflect)在内存中

javascript - Jquery 在类选择器中添加+或减号

c++ - 类实现文件中未声明的标识符

c++ - 使用顶点缓冲对象渲染不同的三角形类型和三角形扇形? (OpenGL)

c++ - 多个对象,不同的行为