Three.js / WebGL - 球体 - 场景可见的国家/颜色

时间:2016-02-20 23:37:09

标签: javascript three.js

我实施了类似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获取网格并扫描所有像素并获取国家/地区代码但似乎是性能为我们打了

感谢是否有人可以发表意见

1 个答案:

答案 0 :(得分:0)

您可以将场景渲染为纹理(即使使用不同的着色器/制服)。官方网站上有一些例子,例如:http://threejs.org/examples/webgl_rtt.html

例如,您可以拥有一个场景,其中地球的纹理是国家/地区编码,当用户点击时,您将该场景渲染为纹理并从该纹理中读取单个像素。

注意,渲染到纹理时,有时必须通过将needsUpdate设置为true来强制更新纹理。

希望我帮助过。