在three.js中查找任意给定点的光强度值

在three.js中查找任意给定点的光强度值,three.js,Three.js,我已将灯光添加到场景中,如下所示: var spotLight = new THREE.SpotLight( 0xFFF1E0 ,1,200,Math.PI/4); spotLight.position.set( -wallWidth/2,wallHeight/2,100); spotLight.castShadow = true; spotLight.shadowCameraNear = camera.near; spotLight.shadowCameraFar = camera.far;

我已将灯光添加到场景中,如下所示:

var spotLight = new THREE.SpotLight( 0xFFF1E0 ,1,200,Math.PI/4);
spotLight.position.set( -wallWidth/2,wallHeight/2,100);
spotLight.castShadow = true;
spotLight.shadowCameraNear = camera.near;
spotLight.shadowCameraFar = camera.far;
spotLight.shadowDarkness = 0.4;
spotLight.shadowCameraVisible = true;
spotLight.shadowMapWidth = 4096;
spotLight.shadowMapHeight = 4096;
spotLight.name = 'Light';
scene.add( spotLight );

比如说,我的场景包含一个立方体。现在,我想找出场景中任意点的光强度值。有没有一种方法可以找到任何点的光强度,比如说,如果我单击?

屏幕上任何像素的光强度都是该像素的值;减去颜色

因此,您需要将
preserveDrawingBuffer:true
传递给渲染器,以便能够获取其图像数据

renderer = new THREE.WebGLRenderer({ preserveDrawingBuffer: true });
然后在
render()
函数中获得
renderer.doElement的数据,然后设置。(某些数学运算需要转到特定像素)


仅仅测量像素值就可以得到一个非常任意的数字,它不完全是“光强度”,还是我想得太多了

在任何情况下,如果要从帧缓冲区读取像素值:

var myRenderer = new THREE.WebGLRenderer();
var myGLcontext = myRenderer.getContext();
var myResult = myGLcontext.readPixels( x , y , width , height , myGLcontext.RGBA , myGLcontext.UNSIGNED_BYTE );

是的,总的来说,你应该看看重心坐标,光线/平面交点和光通量。你从你点击的地方射出一条光线,与你的物体相交,计算出相交处的法线,对照灯光(距离/角度)进行测试,你应该得到你的亮度(流明)。屏幕上任何像素处的光强度都是该像素的值;减去颜色。谢谢你的回复@gaitat:我认为像素的颜色可以通过相交[0]轻松找到。object.material.color.getHex();但是,我无法找到一种方法来获取像素值。@pailhead谢谢您的回复。你的方法很有效。但是,现在我的场景有多个光源。因此,我觉得gaitat建议的方法是正确的。如果我能弄清楚如何得到一个像素的值就好了。
var myRenderer = new THREE.WebGLRenderer();
var myGLcontext = myRenderer.getContext();
var myResult = myGLcontext.readPixels( x , y , width , height , myGLcontext.RGBA , myGLcontext.UNSIGNED_BYTE );