在拾取绘制时.pptVIP

  • 5
  • 0
  • 约5.36千字
  • 约 27页
  • 2016-12-02 发布于天津
  • 举报
在拾取绘制时

拾取、错误检测及其他 邹昆 cszoukun@ 拾取 拾取:在3D场景中根据鼠标位置得到选中的对象 感觉上很简单,因为鼠标给出了对象位置,我们应该能够确定所对应的对象 实际困难 流水线架构只能向前运转,从屏幕返回到对象空间很困难 屏幕是2D的, 对象空间是 3D的 与一个对象多近时能够说选中它了? 拾取方法:老版OpenGL 命中列表(Hit list) 最通用的方法,但实现最困难 在拾取时进行一次额外的绘制,绘制每个拾取对象,在绘制对象前将对象id压栈,如果在绘制该对象时覆盖到鼠标位置,则将栈中的id以及命中信息加到命中列表 拾取绘制结束后通过检查命中列表知道命中了哪些对象 拾取方法:D3D 射线相交法 一种简单方法 思想:如果所绘制的每个对象(包括背景)都具有不同的颜色,那么通过直接读取鼠标位置的像素值就可以知道命中了什么对象。 具体实现 在拾取时进行一次额外的绘制 绘制到一个离屏缓存中,该缓存的大小和窗口大小相同 绘制时可使用专门的Shader,该Shader无需使用光照和纹理,用单一颜色绘制对象,须保证对象的位置和正常绘制时一样 绘制时仅需绘制需要拾取的对象,每个对象使用不同的颜色 建立从颜色到对象id的映射关系(可利用STL的map类),在拾取绘制完后根据鼠标位置的像素颜色得到拾取到的对象id 实例:五子棋 顶点Shader #version 140 in vec4

文档评论(0)

1亿VIP精品文档

相关文档