gpt4 book ai didi

c++ - OpenGL C++ 遮挡查询

转载 作者:行者123 更新时间:2023-11-28 05:45:42 25 4
gpt4 key购买 nike

在 Christer Ericson 关于碰撞检测的伟大著作中,他给出了一种加速 GPU 方法,使用以下算法检测凸多边形之间的碰撞。

我是 OpenGL 的新手,我的问题是,给定两个 std::vector点数,其中:

struct Point{
double x,
double y,
}

我怎样才能通过这个 std::vector<Point>到以下函数并在 C++ 中返回结果?我的 vector 是一个凸多边形阶 CCW。

// Initialize depth buffer to far Z (1.0)
glClearDepth(1.0f);
glClear(GL_DEPTH_BUFFER_BIT);
// Disable color buffer writes
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
// Enable depth testing
glEnable(GL_DEPTH_TEST);
// Initialize occlusion queries
Gluint query[1], numSamplesRendered;
glGenQueries(1, query);
// Set pixels to always write depth
glDepthFunc(GL_ALWAYS);
glDepthMask(GL_TRUE);
// Draw front faces of object A
glCullFace(GL_BACK);
RenderObject(A);
// Pass pixels if depth is greater than current depth value
glDepthFunc(GL_GREATER);
// Disable depth buffer updates
glDepthMask(GL_FALSE);
// Render back faces of B with occlusion testing enabled
glBeginQuery(GL_SAMPLES_PASSED, query[0]);
glCullFace(GL_FRONT);
RenderObject(B);
glEndQuery(GL_SAMPLES_PASSED);
// If occlusion test indicates no samples rendered, exit with no collision
glGetQueryObjectuiv(query[0], GL_QUERY_RESULT, &numSamplesRendered);
if (numSamplesRendered == 0) return NO_COLLISION;
// Set pixels to always write depth
glDepthFunc(GL_ALWAYS);
glDepthMask(GL_TRUE);
// Draw front faces of object B
glCullFace(GL_BACK);
RenderObject(B);
// Pass pixels if depth is greater than current depth value
glDepthFunc(GL_GREATER);
// Disable depth buffer updates
glDepthMask(GL_FALSE);
// Render back faces of A with occlusion testing enabled
glBeginQuery(GL_SAMPLES_PASSED, query[0]);
glCullFace(GL_FRONT);
RenderObject(A);
glEndQuery(GL_SAMPLES_PASSED);
// If occlusion test indicates no pixels rendered, exit with no collision
glGetQueryObjectuiv(query[0], GL_QUERY_RESULT, &numSamplesRendered);
if (numSamplesRendered == 0) return NO_COLLISION;
// Objects A and B must be intersecting
return COLLISION;

最佳答案

一种可能的方式:

  1. 你需要通过你的std::vector<Point>到将更新对象(A 或 B 或两者)缓冲区(顶点/索引)的函数。
  2. 调用将进行遮挡查询并返回结果的函数。在你的情况下可能是一个 bool 值

关于c++ - OpenGL C++ 遮挡查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36258142/

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