1

简而言之:众所周知,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

对于像这样的图像:

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

有什么我可以用的吗?

4

2 回答 2

5

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

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

于 2014-12-28T22:07:39.397 回答
1

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

不会。OpenGL 按照要求绘制的顺序绘制三角形,一次绘制一个三角形。程序要求它“在坐标 A、B 和 C 之间绘制一个三角形”,然后 OpenGL 会在那里完成(嗯,实际上它会批量处理这些命令)。

所以在绘制三角形之前,只有顶点属性决定了它的位置。然后对于列表中的每个三角形,它都会被绘制出来,然后唯一留下的是没有颜色的像素,以及哪些三角形创建了它们的信息。

于 2014-12-29T02:39:31.687 回答