1

THREE.js を使用してシーンをレンダリングしていますが、トリッキーな質問がありました。ジオメトリ面の特定の点の色を取得するにはどうすればよいですか?

色とは、面や素材の色を意味するのではなく、特定の場所の素材、面の色、およびテクスチャの色に基づいて、特定のポイントでの実際の出力色を意味します。たとえば、特定のポイントの面のテクスチャが赤で、マテリアルの色が半分しか見えない場合 (アルファ = 0.5)、得られると予想されるものは次のとおりです: (r=1.0, g=0.0, b=0.0, a= 0.5)。

注: パフォーマンスは重要です。

何か案は?ありがとう!

4

2 に答える 2

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
于 2013-01-22T00:32:07.773 に答える
0

実際には、あなたが期待するものは真実ではありません。あなたはライトを考慮していません。ライトがないと、オブジェクトは黒くなります。ライトを使用すると、ライトの位置に応じて、異なる結果が得られます。フラット シェーディングを使用しても、面の色は法線に依存します。

于 2013-01-21T20:16:26.130 に答える