首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/C++中三维平面的优选表示

C/C++中三维平面的优选表示
EN

Stack Overflow用户
提问于 2013-09-03 19:47:41
回答 1查看 1.5K关注 0票数 0

当C/C++是首选语言时,在三维图形中表示固定维平面(struct)的首选方法是什么?

我们是不是应该

  1. 将归一化平面法线向量和origo距离存储为单独的实体,还是我们应该
  2. 用非归一化向量把它们表达在一起?

第一种方法需要额外的浮动/双倍,但另一方面,在正常运行的算法中效率更高,因为它已经预先计算过了。第一,如果我们分别改变正常值和偏移量,那么替代方案在数值上也是更稳定的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-03 20:17:59

遗憾的是,C++并不是与飞机打交道的最佳语言。首先,我们可以认为使用四个浮点值是一个很好的选择,因为它适合于SSE和VMX中的SIMD寄存器。因此,我们可能有一个有一个128位成员的类,前三个值表示平面法线,最后一个值表示距离(就像同质坐标一样,如果我们只关心距离测试的符号,平面并不总是需要规范化的法线)。

但是,当我们与平面一起对点、球面和其他卷进行分类时,实现一个平面到点的距离函数将导致次优算法,因为大多数时候,我们知道我们会对少量的平面测试很多点。有优化的空间!

这里的问题有一个名字,事实上,不是问题,而是我们表达信息的方式。它是结构数组和数组结构( AOS与SOA )。

一个常见的运动在一个3D引擎是包围体积水果剔除!一个通常的截尾由6个平面组成,正确的表示不是一个带std::array<Plane,6>成员的frustum类,但最有可能的是,对于Y、Z和D,8 SIMD注册布局为:{ P0X, P1X, P2X, P3X }, { P4X, P5X, FREEPLANE1X, FREEPLANE2X }, ...等,不是C++,而是更适合于SIMD编程。

选择SOA代表点也可能是有用的。

结论:最好的表示取决于哪种算法和哪种数据集将去考虑你的飞机。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18600328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档