【发布时间】:2012-03-17 05:20:27
【问题描述】:
我正在使用 Three.js 将 3D 模型绘制到简单 DOM 元素上方的 webgl 画布渲染器上,我需要在它们之间进行碰撞检测。我目前的工作方法是使用 renderer.domElement.toDataURL(),将其加载为 imageData 对象,然后将其绘制到单独的 2D 画布上下文中,然后拉出 getImageData() 像素数组并使用 this awesome pixel collision function 进行迭代。
这令人难以置信慢,并将我的帧速率拉低到几乎无法播放的〜5-8 FPS。如果不运行此命中检测,我会得到大约 40-50 FPS。
我最好的猜测是减速是非常笨拙的toDataURL()->load image->drawImage()->getImageData()。
我的问题变成了:有没有更好的方法来访问 WebGL 画布上可用的展平 2D 像素数据? 或者可能是一种更好的方法来推断没有视差的 3D 对象坐标?老实说,任何能比我目前做的更快地进行某种碰撞检测的方法都会非常有用。
编辑:WebGL context.readPixels() 对我来说非常好,而且与我之前的 kludge 相比速度非常快。尽管应该注意,与常规图像像素数据阵列相比,数据阵列是从上到下镜像的。我只是简单地翻转了我的碰撞例程 Y 值检查并让它工作,尽管其他人可能会以更棘手的方式被绊倒。祝你好运!
【问题讨论】:
标签: collision-detection webgl three.js hit