使用渲染到纹理对地形进行拾取
使用渲染到纹理对地形进行拾取
在制作地图编辑器的时候,需要对地形进行拾取以方便执行控制操作。按照一般的拾取方式应该计算出来鼠标在屏幕上点击的坐标而后计算出从观察点发出的一条射线并将其与地图上所有的三角形求交 最后计算出命中的三角形坐标。按照这种做法是先后发现由于数学基础的不足,不知道是计算的射线不准确还是执行的求交函数有问题,总之不能正常地拾取,似乎求得的拾取点的坐标和实际坐标按照观察点对称。总之是失败了。
而后查找到一种新的思路,就是渲染到纹理拾取。数码猫
首先先建立一张纹理并求得其表面,将其作为目标表面进行渲染,不同的是我们并不需要输出纹理像素颜色而是输出定点漫反射颜色。
在设置定点漫反射颜色的时候,我们将定点的横坐标置于红色颜色位,并将定点的纵坐标置于绿色颜色位。我们不必关闭高罗德插值,因为对于A8R8G8B8的定点颜色来说255已经是最大的一个范围了,坐标相差1并不会影响颜色的插值。这样实际上我们的到了一个包含了坐标信息的色彩图。
在这种情况下我们将鼠标点击的坐标位置带入到色彩图中求色彩值。取出色彩的红色和绿色信息值,求得点击点的坐标。
实际上这种方法和将物体定点颜色置为指针值求拾取是一样的。这样的方法比用数选算法求交对于大家的数学要求明显降低了很多。效果却差不多。
[解决办法]
利用拾取射线来拾取对数学要求并不高,最多也就是高中的几何知识。利用拾取射线来拾取速度快,而且准确。但是利用楼主说的方法的话,效率似乎不高,只要场景有任何变动,都要重新建立一张纹理,如果场景很大,且画面的分辨率高的话,建立和设置纹理的过程肯定要花费一定时间,且需要大量内存资源。对于要求及时性高的图形程序,比如游戏等等,是不适用的。