我有很多(x1,y1,z1),(x2,y2,z2),(x3,y3,z3)单精度矢量三元组,我想重新排序它们,所以(x1,y1,z1) ,(x2,y2,z2),(x3,y3,z3)变为(x1,x2,x3,0,y1,y2,y3,0,z1,z2,z3,0)
目标是为基于SSE的计算预先设置数据集.我有以下代码来执行此操作:
for (int i=0;i<count;i++)
{
Vect3F p0 = get_first_point(i);
Vect3F p1 = get_second_point(i);
Vect3F p2 = get_third_point(i);
int idx = i*3;
scratch[idx] = Vec4F(p0.x, p1.x, p2.x, 0); // These 3 rows are the slowest
scratch[idx+1] = Vec4F(p0.y, p1.y, p2.y, 0);
scratch[idx+2] = Vec4F(p0.z, p1.z, p2.z, 0);
}
Run Code Online (Sandbox Code Playgroud)
循环的最后3行非常慢,它们占我整个算法的90%的时间!
这是正常的吗?我可以更快地进行这样的洗牌吗?(scratch是一个静态变量,并且是16对齐的.该函数经常被调用,所以我认为临时块不应该从缓存中消失.)
我正在编写一个基于场景图的图形引擎,用于建模目的.我正在使用XNA 4.在我阅读的许多地方,渲染过程中应该最小化纹理变化(以及其他状态变化)(因此我必须按材料来订购我的基元等).
我在XNA 4中创建了一个小型测试应用程序,它使用单个纹理渲染数百个斯坦福兔子模型,然后切换2个不同的纹理.渲染时间没有差异(但是我使用了小~100x100纹理).
所以我的问题是:
感谢您的帮助或链接!