opengl 中的“对象映射”

bri*_*ore 1 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
Run Code Online (Sandbox Code Playgroud)

对于像这样的图像:

   ___
  \  |
   \ |  
    \|/|
     / |
    /  |
   /   |
  /____|
Run Code Online (Sandbox Code Playgroud)

有什么我可以用的吗?

ick*_*fay 5

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

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