今天上午和susu讨论了下这篇随笔中关于选择和拾取的代码,发现有下面几个问题值得思考:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1, selectBuff[BUFFER_LENGTH]是用来存放命中记录的,在选择模式下,与拾取矩阵相交的图元就会被选择命中,就会将一条命中记录写入到选择数组中,每个命中记录包括:selectBuff[0]保存命中发生时名称堆栈中的名称数目,selectBuff[1], selectBuff[2]保存了与拾取矩阵相交的图元的所有顶点的最大和最小窗口z坐标,并且将两个坐标都乘以2的32此方减去1。selectBuff[3]保存了命中发生时名称堆栈的内容(也就是命中的目标名称)。
上面都好理解,但这里susu碰到一个问题,说她的程序中selectBuff[4]才是保存了命中的目标,这让我无法理解。。。
2,glLoadName()只是置换掉名称堆栈的栈顶值,而glPushName才是入栈的操作,那么RenderScene函数里glInitNames();glPushName(0); 这说明初始时名称堆栈中只有一个名称
而接下来几个 glLoadName(),只是替换掉栈顶,那就是说只有一个名称会进栈,而前面的都被后面的覆盖了? 如果是这样的,那后面如何去选中其他几个图元?
3,选择和反馈模式是把绘图信息返回给应用程序,而渲染模式是把这些信息发送给帧缓冲,也就是说处于前两种模式时,屏幕冻结住了(没有绘制图形),因此也就对颜色缓存,深度缓存等不会产生影响。
4,要进行选择,首先要把场景绘制到帧缓存中,然后进入选择模式并重新绘制场景,而进入选择模式后,帧缓存的内容不会发生变化,退出选择模式时,就会返回一系列与视景体(当前的模型视图矩阵和投影矩阵以及附加剪裁面定义)相交的图元(这些图元都被选中了)。而要实现拾取,就需要将绘图操作限制在视口的一个小型区域内。
相关推荐
详细的描述了OpenGL的选择机制使用,使用C++进行OpenGL的选择机制的使用
实现了几个重叠物体的鼠标拾取,并在选择后完成一定的操作
OpenGL的实例,进入OpenGL学习的第一步
OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文 OpenGL论文
OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程 OpenGL教程
opengl c++opengl c++opengl c++opengl c++opengl c++opengl c++
OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试OpenGL 深度测试...
OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合OpenGL 混合...
OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例 OpenGL实例
OpenGL的处理机制及其发展展望,高级图形界面的光明前景。
OpenGL教材 OpenGL教材 OpenGL教材 OpenGL教材 OpenGL教材
OpenGL_射线选择初探 在 perspective 中 射线的生成 代码解释 图文参考 OpenGL_射线选择初探 在 perspective 中 射线的生成 代码解释 图文参考 OpenGL_射线选择初探 在 perspective 中 射线的生成 代码解释 图文...
通过OpenGL中选择模式,实现在程序中选择物体。
基于opengl下的选择物体局部放大,对初学者有用
open gl在各版本vs环境的配置与扩展(包括glew,glut,glee等库)
opengl MutiWindow opengl MutiWindow opengl MutiWindow
NeHe OpenGL NeHe OpenGL NeHe OpenGL NeHe OpenGL
OpenGL教程OpenGL教程OpenGL教程OpenGL教程OpenGL教程
OpenGL-Vision OpenGL-Vision OpenGL-Vision