Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取几何体面上点的颜色_Javascript_Three.js - Fatal编程技术网

Javascript 获取几何体面上点的颜色

Javascript 获取几何体面上点的颜色,javascript,three.js,Javascript,Three.js,我正在使用THREE.js渲染我的场景,我遇到了一个棘手的问题-如何获得几何体面上特定点的颜色 关于颜色,我不是指面或材质颜色,我是指特定点的实际输出颜色,基于:特定位置的材质、面颜色和纹理颜色。例如,如果给定点的面上的纹理为红色,并且材质颜色为半可见(alpha=0.5),则我希望得到的结果是:(r=1.0,g=0.0,b=0.0,a=0.5) 注意:性能很重要 有什么想法吗? 谢谢 事实上,你期望得到的不是真的。你没有考虑灯光。如果没有灯光,您的对象将是黑色的。使用灯光时,根据灯光的位置,您

我正在使用THREE.js渲染我的场景,我遇到了一个棘手的问题-如何获得几何体面上特定点的颜色

关于颜色,我不是指面或材质颜色,我是指特定点的实际输出颜色,基于:特定位置的材质、面颜色和纹理颜色。例如,如果给定点的面上的纹理为红色,并且材质颜色为半可见(alpha=0.5),则我希望得到的结果是:(r=1.0,g=0.0,b=0.0,a=0.5)

注意:性能很重要

有什么想法吗?
谢谢

事实上,你期望得到的不是真的。你没有考虑灯光。如果没有灯光,您的对象将是黑色的。使用灯光时,根据灯光的位置,您将获得不同的结果。即使使用平面明暗处理,脸部的颜色也将取决于其法线。

很好地启用,实际上,您期望得到的结果是不正确的。你没有考虑灯光。如果没有灯光,您的对象将是黑色的。使用灯光时,根据灯光的位置,您将获得不同的结果。即使使用平面明暗处理,脸部的颜色也将取决于其法线。

一种简单而直接的方法是使用
进行处理

var canvas=document.createElement('canvas');
canvas.width=renderer.domeElement.width;
canvas.height=renderer.domeElement.height;
var context=canvas.getContext('2d');
drawImage(renderer.doElement,0,0);
var imagedata=context.getImageData(0,0,canvas.width,canvas.height);
var数据=imagedata.data;
var指数=(mousex+(mousey*canvas.width))*4;
风险值红色=数据[指数];
绿色变量=数据[指数+1];
var blue=数据[指数+2];

var hex=red一种简单而直接的方法是使用
来实现

var canvas=document.createElement('canvas');
canvas.width=renderer.domeElement.width;
canvas.height=renderer.domeElement.height;
var context=canvas.getContext('2d');
drawImage(renderer.doElement,0,0);
var imagedata=context.getImageData(0,0,canvas.width,canvas.height);
var数据=imagedata.data;
var指数=(mousex+(mousey*canvas.width))*4;
风险值红色=数据[指数];
绿色变量=数据[指数+1];
var blue=数据[指数+2];

var hex=red好吧,让我们缩小问题的范围-让我们假设环境光始终是0xffffff,现在我将忽略顶点颜色-只是材质颜色。这意味着棘手的部分只是根据uv和表面上的点在给定位置获得纹理颜色。有什么想法吗?谢谢,为了获得这些信息,你必须渲染纹理。好吧,让我们缩小问题的范围-假设环境光总是0xffffff,现在我将忽略顶点颜色-只考虑材质颜色。这意味着棘手的部分只是根据uv和表面上的点在给定位置获得纹理颜色。有什么想法吗?谢谢你必须渲染纹理才能得到这些信息。
var canvas = document.createElement( 'canvas' );
canvas.width = renderer.domElement.width;
canvas.height = renderer.domElement.height;

var context = canvas.getContext( '2d' );
context.drawImage( renderer.domElement, 0, 0 );

var imagedata = context.getImageData( 0, 0, canvas.width, canvas.height );
var data = imagedata.data;

var index = ( mousex + ( mousey * canvas.width ) ) * 4;

var red = data[ index ];
var green = data[ index + 1 ];
var blue = data[ index + 2 ];

var hex = red << 16 | green << 8 | blue << 0