【问题标题】:Get the color of a point on a geometry face获取几何面上点的颜色
【发布时间】:2013-01-22 08:32:27
【问题描述】:

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

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

注意:性能很重要。

有什么想法吗? 谢谢!

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    一个简单直接的方法是使用<canvas>

    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
    

    【讨论】:

      【解决方案2】:

      enabled 其实你期望得到的不是真的。你没有考虑灯光。没有灯光,您的对象将是黑色的。使用灯光并根据灯光的位置,您将获得不同的结果。即使您使用平面阴影,脸部的颜色也将取决于其正常情况。

      【讨论】:

      • 好吧,让我们缩小问题的范围——假设环境总是 0xffffff,我现在将忽略顶点颜色——只是材质颜色。这意味着棘手的部分只是根据 uv 和表面上的点在给定位置获取纹理颜色。有任何想法吗?谢谢
      • 您必须 RenderToTexture 才能获得该信息。
      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2018-06-03
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多