您的位置:首页 > Web前端

【opengl函数】glFeedbackBuffer

2017-08-02 21:16 441 查看

原文地址:https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFeedbackBuffer.xml

Name

glFeedbackBuffer —用来控制反馈模式

C Specification

void glFeedbackBuffer(

GLsizei size,

 

GLenum type,

 

GLfloat * buffer);

 

Parameters:

Size:可以被写进buffer的值的最大数量。

Type:符号常量,描述每个顶点返回的信息。有: GL_2D, GL_3D, GL_3D_COLOR, GL_3D_COLOR_TEXTURE, and GL_4D_COLOR_TEXTURE 。

Buffer:返回反馈信息。

 

Description:

glFeedBackBuffer函数控制反馈。反馈模式(Feedbak)和选择模式(Selection)一样,是GL模式。通过使用glRenderMode(GL_FEEDBACK)选择这个模式。在反馈模式下,不会产生光栅化的像素,而是把将会被光栅化的图元信息返回到使用GL的应用里。

glFeedbackBuffer有三个参数:buffer是一个浮点数数组的的指针,反馈信息写入到这个数组里。Size指明了这个数组的大小。Type是一个符号化常量,描述了每个顶点返回的信息。在进入GL_FEEDBACK模式之前glFeedBackBuffer必须已经被创建了。在没有创建glFeedBackBuffer之前设置GL_FEEDBACK或者在反馈模式下创建GLFeedBackBuffer都会出现错误。

当glRenderMode函数在feedback模式下被调用的时候,它返回被存入feedback数组的词目数量,并且将feedback数组的指针重新设置到feedback buffer的底部。函数的返回的值永远不会超过size。如果feedback数据需要更多的可用空间,glRenderMode函数会返回一个负值。调用glRenderMode并且选一个不是GL_FEEDBACK的参数可退出反馈模式。

在反馈模式下,每个(在绘制模式下)将会被光栅化的图元、位图或者像素三角形产生一块数值,拷贝到反馈数组里。如果这么做会导致词目的数量超过最大值,数据块会被部分地写入以填充数组(如果数组还有空间的话),然后设置一个溢出标志。每一个数据块以一条指明图元类型的代码开始,后面接着描述图元顶点和相关信息的数据。对于位图和像素三角形来说,词目也被写入了。反馈发生在多边形剔除(culling)和glPolygonMode解释三角形之后,所以被剔除的多边形没有在反馈数组中返回。它也发生在有多于三条边的多边形被分解成三角形之后,如果GL通过这种分解来渲染多边形的话。

glPassThrough 命令可以用来在反馈数组里插入一个marker。

接下来是数值块写入反馈缓存的语法。每一个图元都用一个独一无二大的数值指明,后面跟着一些顶点,多边形词目包括一个整数,指明后面跟了多少顶点。顶点以一些浮点数的形式反馈,数量取决于type。在RGBA的模式下,颜色返回四个值;在颜色索引模式下返回一个值。

feedbackList ← feedbackItem feedbackList | feedbackItem

feedbackItem ← point|
lineSegment | polygon
| bitmap |
pixelRectangle | passThru

point ← GL_POINT_TOKEN vertex

lineSegment ← GL_LINE_TOKEN vertex vertex| GL_LINE_RESET_TOKEN vertex vertex

polygon ← GL_POLYGON_TOKEN n polySpec

polySpec ← polySpec vertex | vertex vertex vertex

bitmap ← GL_BITMAP_TOKEN vertex

pixelRectangle ← GL_DRAW_PIXEL_TOKEN vertex| GL_COPY_PIXEL_TOKEN vertex

passThru ← GL_PASS_THROUGH_TOKEN value

 

vertex ← 2d | 3d | 3dColor | 3dColorTexture | 4dColorTexture

2d ← value value

3d ← value value value

3dColor ← value value value color

3dColorTexture ← value value value colortex

4dColorTexture ← value value value value colortex

color ← rgba | index

rgba ← value value value value

index ← value

tex ← value value value value

 

Value代表一个浮点数,n是一个浮点整数,表示多边形有多少顶点。GL_POINT_TOKEN, GL_LINE_TOKEN, GL_LINE_RESET_TOKEN, GL_POLYGON_TOKEN, GL_BITMAP_TOKEN, GL_DRAW_PIXEL_TOKEN, GL_COPY_PIXEL_TOKEN andGL_PASS_THROUGH_TOKEN是符号化的浮点数常量。无论何时重新设置点画线(line
stipple)模式的时候,GL_LINE_RESET_TOKEN将会被返回。数值将会以顶点的方式返回,取决于反馈type。

下面的表格给出type和每个顶点值的个数的关系。k在颜色索引模式下为1,RGBA模式下为4.

Type
Coordinates
Color
Texture
Total Number of Values
GL_2D

x, y

 
 
2
GL_3D

x, y, z

 
 
3
GL_3D_COLOR

x, y, z

k
 
3 + k
GL_3D_COLOR_TEXTURE

x, y, z

k
4
7 + k
GL_4D_COLOR_TEXTURE

x, y, z, w

k
4
8 + k
 

 

反馈顶点的坐标是窗口坐标,除了w,也就是裁剪坐标。如果启用了灯光,feedback中的颜色是被照亮过的。如果启用了生成纹理坐标,反馈的纹理坐标被生成了。并且总是被纹理矩阵转换过的。

注意:

glFeedBackBuffer,当使用到displaylist里是,不编译进display list而是直接执行。

glFeedBackBuffer只返回GL_TEXTURE0的纹理坐标。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: