c++ - 创建和使用 AABB 进行碰撞检测 3d (OpenGL)

标签 c++ opengl collision-detection aabb

假设我有一个按以下方式创建的正方形:

glBegin(GL_QUADS);
glColor3f(0.0f,1.0f,0.0f);  
glVertex3f( 1.0f, 1.0f,-1.0f);  
glVertex3f(-1.0f, 1.0f,-1.0f);  
glVertex3f(-1.0f, 1.0f, 1.0f);  
glVertex3f( 1.0f, 1.0f, 1.0f);  

glColor3f(1.0f,0.5f,0.0f);  
glVertex3f( 1.0f,-1.0f, 1.0f);  
glVertex3f(-1.0f,-1.0f, 1.0f);  
glVertex3f(-1.0f,-1.0f,-1.0f);  
glVertex3f( 1.0f,-1.0f,-1.0f);  

glColor3f(1.0f,1.0f,0.0f);  
glVertex3f( 1.0f,-1.0f,-1.0f);  
glVertex3f(-1.0f,-1.0f,-1.0f);  
glVertex3f(-1.0f, 1.0f,-1.0f);  
glVertex3f( 1.0f, 1.0f,-1.0f);  

glColor3f(0.0f,0.0f,1.0f);  
glVertex3f(-1.0f, 1.0f, 1.0f);  
glVertex3f(-1.0f, 1.0f,-1.0f);  
glVertex3f(-1.0f,-1.0f,-1.0f);  
glVertex3f(-1.0f,-1.0f, 1.0f);  

glColor3f(1.0f,0.0f,1.0f);  
glVertex3f( 1.0f, 1.0f,-1.0f);  
glVertex3f( 1.0f, 1.0f, 1.0f);  
glVertex3f( 1.0f,-1.0f, 1.0f);  
glVertex3f( 1.0f,-1.0f,-1.0f);  
glEnd();    

现在假设我想使用 AABB 结构来检测球体何时与该立方体的侧面(不是立方体的顶部或底部)碰撞,从而防止它穿过立方体?关于如何进行此操作的任何想法?

如果我使用 glutSolidCube 实现了立方体,我还能使用 AABB 结构吗?

另外,有没有不用 AABB 更容易检测碰撞的方法?也许像测试交集之类的?

最佳答案

OpenGL 是一个渲染系统。它没有碰撞检测的概念,甚至没有基本渲染图元(点/线/三角形)之外的对象。 OpenGL 不会帮你做碰撞检测。为此,您需要使用物理库或碰撞库。

关于c++ - 创建和使用 AABB 进行碰撞检测 3d (OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15740761/

相关文章:

c++ - CMake 测试在 MacOS 上找不到库

c++ - 通过来自不同模块的预处理器/模板生成列表/集合,并且必须在链接之前填写

c++ - 使用 OpenGL 的程序输出的 3D 显示

c++ - 在子程序延迟之前卡住

java - C++ 代码工作正常但在从 Java (JNI) 调用时不起作用

c++ - OpenGL Performer 最简单的移植路径?

opengl - GLSL:如何获得像素 x、y、z 世界位置?

python - 我如何检测pygame中的碰撞?

java - 简单的旋转矩形碰撞

c++ - SFML 边界框碰撞检测