首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenGL :关于处理碰撞检测和顶点数据的建议?

OpenGL :关于处理碰撞检测和顶点数据的建议?
EN

Stack Overflow用户
提问于 2012-05-18 03:20:10
回答 1查看 1.7K关注 0票数 2

我在考虑如何在我的OpenGL应用程序中进行碰撞检测,并得出结论,我应该保留两份几何数据。

1)第一次复制:仅用于OpenGL渲染的purposes.This可以保存为VBO,顶点索引。

2)第二次复制:我保存在客户端(例如3 3DEntity类),执行所有测试,包括边界盒碰撞测试、光线投射测试、

因此,在加载网格数据(例如来自OBJ文件)之后,首先准备“第一个副本”,然后使用“顶点索引”准备“第二个副本”。(例如:如果我的网格是一个简单的立方体,我的“第一份拷贝”将有8个顶点,并使用顶点指数将其表示为properly.But我的“第二份副本”总共有36 vertices.Because,我必须在三角形上进行光线投射)

我在“3 3DEntity”中保留了一个转换矩阵,以保持我的"3d实体“的位置、Rotation..etc等状态。所以在psuedo代码中;

代码语言:javascript
代码运行次数:0
运行
复制
class 3DEntity {
 Vertex[] verticesForPhysics;
 Matrix tranformationMatrix;
}

我保持"verticesForPhysics“值不变。(意思是,它总是在模型坐标系中).So当我想移动时,旋转我的实体,我只需更改"transformationMatrix”。

在进行碰撞检测等测试时,我再次复制顶点,将"verticesForPhysics“与"transformationMatrix”相乘,给出世界坐标中的顶点。

代码语言:javascript
代码运行次数:0
运行
复制
Vertex[] verticesForPhysicsInWorld=transformationMatrix * verticesForPhysics;

现在,我使用这些"verticesForPhysicsInWorld“进行测试。

这是正确的处理方法吗?我担心数据冗余,因为我保留了两个副本,并为碰撞检测测试制作了另一个临时副本。其他OpenGL游戏引擎如何处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-18 05:27:32

拥有多个顶点数据副本是非常正常的,所以不要担心:-)

例如,您可能有:

在呈现过程中描述geometry

  • Transformed顶点数据的
  • 未转换顶点数据(可能是由用于冲突检测的GPU)
  • Simplified,转换数据(例如AABB树)完成的)--这比处理用于冲突detection!
  • When所需的完全转换顶点数据高得多,转换顶点数据以进行更详细的碰撞检测,但前提是您已经确定两个对象可能由于AABB重叠而发生冲突。你不想对每一个对象--每帧--都这样做!

请注意,用于物理的顶点数据/几何图形与用于绘制的顶点数据/几何图形是不同的,这也是很常见的。通常你可以用更简单的物体来进行碰撞检测(例如球体、圆柱体)。

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

https://stackoverflow.com/questions/10646280

复制
相关文章

相似问题

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