c++ - "objects map"在 opengl 中

标签 c++ opengl picking ray-picking

简而言之:众所周知,opengl 在屏幕上绘制了很多三角形。

我想知道的:

如果 opengl 绘制三角形,它必须知道,哪个三角形属于屏幕上的哪个像素,对吧?

我也可以得到这些信息吗?例如,在绘制后调用一个函数(如 gl_retrieve_object_map() 或类似的东西),我可以知道哪个像素显示哪个三角形?

这就像为每个像素做采摘

我在想一个二维数组告诉我三角形索引或其他什么:

例如在 10x10 像素的屏幕上:

0 0 1 1 1 1 1 0 0 0
0 0 0 1 1 1 1 0 2 0
0 0 0 0 1 1 1 2 2 0
0 0 0 0 0 1 1 2 2 0
0 0 0 0 0 2 1 2 2 0
0 0 0 0 2 2 2 2 2 0
0 0 0 2 2 2 2 2 2 0
0 0 2 2 2 2 2 2 2 0
0 2 2 2 2 2 2 2 2 0
0 0 0 0 0 0 0 0 0 0

对于像这样的图像:

   ___
  \  |
   \ |  
    \|/|
     / |
    /  |
   /   |
  /____|

有什么我可以用的吗?

最佳答案

OpenGL 在绘制某些东西后实际上并没有这些信息。 OpenGL 有几个缓冲区,包括(除其他外)颜色缓冲区和深度缓冲区,但它没有一个缓冲区来保存每个绘制图元的索引。

但这并不意味着你运气不好。我见过应用程序做的一件事是删除所有照明效果并为每个对象赋予独特的颜色。然后,它将场景渲染到屏幕外缓冲区。然后那个屏幕外缓冲区就有你想要的信息。

关于c++ - "objects map"在 opengl 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680937/

相关文章:

opengl - 使用 OpenGL 着色语言进行选择

three.js - GPU拾取- Sprite 周围的不可见像素

python - 为什么 Libclang 无法获得头文件中定义的函数的定义?

c++ - 编译 C++ 项目/Open GL 时出现纹理错误

opengl - 在 GLSL 着色器中使用输入/输出结构

C++ OpenGL 窗口和上下文创建框架/库

opengl - 应用基于顶点着色器的几何变形的 3D 场景的通用拾取解决方案

c++ - 在删除结构之前是否必须删除结构中的指针变量?

c++ - 添加 #include <boost/asio.hpp> 导致 "has different size"问题

c++ - 如何在 operator += 中调用 operator +