用什么来存储矩阵值会更好?
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/