OpenGL-反馈

1. OpenGL的反馈机制

 

反馈和选择具有一个相似之处,在这两种模式下,不会产生任何像素,并且屏幕被冻结。

在选择模式下,一些已分配的名称被返回到一个整形数组中;在反馈模式下,与经过变换的图元有关的一些信息被返回到一个浮点型数组中。

 

2. 使用步骤

 

//在绘制了场景之后,开始进入以下代码

 

(1)

GLfloat feedBuffer[1024];

//指定保存反馈数据的数组,GL_3D_COLOR表示返回的顶点数据由坐标(x,y,z)和颜色(r,g,b,a)组成

glFeedbackBuffer(1024, GL_3D_COLOR, feedBuffer);

 

(2)

glRenderMode(GL_FEEDBACK);  //进入反馈模式

 

(3)

//绘制两条线

glBegin(GL_LINE_STRIP);

glNormal3f( 0.0, 0.0,1.0);

glVertex3f(30.0, 30.0, 0.0);

glVertex3f(50.0, 60.0, 0.0);

glVertex3f(70.0, 40.0, 0.0);

glEnd();

 

glPassTrough(1.0);  //在图元之间增加标记

 

//绘制一个点

glBegin(GL_POINTS);

glNormal3f(0.0, 0.0, 1.0);

glVertex3f(50.0, 50.0, 0.0);

glEnd();

 

glFlush();

 

(4)

GLuint size = glRenderMode(GL_RENDER);  //返回绘制模式,同时获得返回的图元的个数

 

(5)

//处理返回的图元数组

GLuint count = size;

GLfloat token;

 

while( count )

{

    //获取反馈数据的第一个字节,是一个表示图元类型的代码

    //可以是GL_POINT_TOKEN, GL_LINE_TOKEN等等

    token = buffer[size - count];  

    count--;

 

    if( token == GL_PASS_THROUGH ) //如果图元是插入的标记

    { count--; }

    else if( token == GL_POINT_TOKEN ) //如果图元是点,则移动7个位置(x,y,z,r,g,b,a)

    { count -= 7; }

    else if( token == GL_LINE_TOKEN ) //如果图元是线,则移动14个位置(2个点的数据)

    { count -= 14; }

    else if( token == GL_LINE_RESET_TOKEN ) //如果图元是线,切对于点画模式进行了重置

    { count -= 14; }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值