我实施了类似this one的地球仪 但是当地球处于静止位置时,当试图获取Three.js中场景可见的国家时,我陷入了困境。当我使用 readPixels 鼠标悬停/点击特定国家/地区时,我可以检索国家/地区颜色代码,并获取相应的像素颜色代码,如下所示
var gl = renderer.context;
var mx = ( mouseX + renderer.context.canvas.width/2 );//(mouseX + renderer.context.canvas.width/2) * 0.25;
var my = ( -mouseY + renderer.context.canvas.height/2 );//(-mouseY + renderer.context.canvas.height/2) * 0.25;
mx = Math.floor( mx );
my = Math.floor( my );
var buf = new Uint8Array( 4 );
gl.readPixels( mx, my, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buf );
但是当地球停止旋转时,我需要从场景中获取用户可查看国家的列表,我尝试使用Raycaster获取网格并扫描所有像素并获取国家/地区代码但似乎是性能为我们打了
感谢是否有人可以发表意见
答案 0 :(得分:0)
您可以将场景渲染为纹理(即使使用不同的着色器/制服)。官方网站上有一些例子,例如:http://threejs.org/examples/webgl_rtt.html
例如,您可以拥有一个场景,其中地球的纹理是国家/地区编码,当用户点击时,您将该场景渲染为纹理并从该纹理中读取单个像素。
注意,渲染到纹理时,有时必须通过将needsUpdate
设置为true
来强制更新纹理。
希望我帮助过。