gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:46:09 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com