OpenGL®picking在计算机编程中是指一旦场景被渲染,确定三维(3D)场景中的对象位于屏幕上给定点的过程。它也可以指在一个点或一个框内定位多个对象。通常,OpenGL®picking用于确定屏幕上的3D对象用户正试图用鼠标光标进行...
OpenGL®picking在计算机编程中是指一旦场景被渲染,确定三维(3D)场景中的对象位于屏幕上给定点的过程。它也可以指在一个点或一个框内定位多个对象。通常,OpenGL®picking用于确定屏幕上的3D对象用户正试图用鼠标光标进行选择。虽然此操作看起来很简单,但OpenGL®渲染场景的方式有几个微妙之处,会使场景变得相当复杂。此外,某些图形卡和驱动程序中存在固有的问题,可能会导致OpenGL®拾取功能失败并返回false结果:OpenGL拾取是指在一个三维场景中,当场景被渲染后,确定哪个对象位于屏幕上给定的点上的过程。当用户在计算机监视器上观看3D场景时,产生的图像被称为场景的渲染。场景实际上以原始形状或多边形的集合形式存储在内存中,这些基本形状或多边形本身就是场景空间中三维点的集合。计算机使用世界坐标(有时称为绝对坐标)来执行最基本的功能在大多数应用程序中,用户可以将场景的视图调到不同的角度,以便可以从不同的角度看到对象。用户在场景中的虚拟位置称为摄影机角度或摄影机位置。OpenGL®拾取的复杂性来自于从可能是场景中任意的位置和角度,摄像机的位置。另外,由于从人类观众的角度来看,渲染是真实的2D,用户无法提供场景内部鼠标点击的深度OpenGL®picking函数通过两种方式解决了这个复杂的问题。第一种方法是,它不是执行一系列单独的计算来转换观察者的抽象位置,然后在渲染窗口中找到一个对象,而是像正常工作时一样渲染场景,除了不显示用于选择的渲染外,它只用于计算对象的正确位置。区别在于,它没有渲染用户可以看到的整个区域,它只渲染鼠标所在的区域,这意味着渲染的对象在技术上都是在鼠标指针所在的点上,第二个问题,即无法表示所选区域的深度,通过返回场景中鼠标坐标下的所有对象来解决。OpenGL拾取函数返回数组中的所有对象以及它们与查看器位置的距离。这允许程序在需要时快速找到最近的对象。可视化OpenGL®拾取的一种方法是想象线,在3D编程中有时被称为光线,它从鼠标指针的位置移动到场景中,远离观看者的位置。光线接触到的每个对象都被添加到一个对象数组中,以及它离观看者的距离。这是一个非常简单的解释,解释了一种形式的OpenGL®拾取是如何工作的。OpenGL®中的另一种对象拾取方法涉及到通过颜色定位对象,而且速度可以快得多。这种方法可以渲染场景,但不是对对象应用照明和纹理,而是对对象应用照明和纹理取而代之的是用一种简单的颜色渲染。每个对象或一组对象都有自己不同的颜色。场景只在内存中渲染而不显示,因此这不会影响用户看到的内容而不是寻找对象之间的三维碰撞,而是返回鼠标光标所在位置的颜色,该颜色将与特定对象相关联
-
发表于 2020-08-07 20:30
- 阅读 ( 720 )
- 分类:电脑网络