"对象映射"在opengl

时间:2014-12-28 21:51:56

标签: 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

表示像:

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

有什么我可以使用的吗?

2 个答案:

答案 0 :(得分:4)

在绘制某些内容后,OpenGL实际上没有这些信息。 OpenGL有一些缓冲区,包括(其中包括)颜色缓冲区和深度缓冲区,但它没有一个缓冲区来保存绘制的每个基元的索引。

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

答案 1 :(得分:1)

  

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

没有。 OpenGL按照要求绘制三角形的顺序绘制三角形,一次绘制一个三角形。程序要求它在坐标A,B和C&#34之间画一个三角形。然后OpenGL就会这样做(好吧,实际上它会批量处理这些命令)。

因此,在绘制三角形之前,只有顶点属性决定了它的位置。然后对于列表中的每个三角形,它将被绘制,然后唯一留下的是没有彩色像素和有关创建它们的三角形的信息。