2013-01-21 2 views
1

THREE.js를 사용하여 장면을 렌더링하고 있는데 까다로운 질문이 있습니다 - 기하학면의 특정 점의 색상은 어떻게 얻을 수 있습니까?기하학면의 점 색상 얻기

색상은 특정 위치에서의 재질, 얼굴색 및 질감 색상을 기준으로 한 특정 시점의 실제 출력 색상을 의미하는 것은 아닙니다. 예를 들어 주어진 점에서 얼굴의 질감이 빨강이고 재료 색상이 반쯤 보이는 경우 (alpha = 0.5), 다음과 같이 예상됩니다. (r = 1.0, g = 0.0, b = 0.0, a = 0.5).

참고 : 성능이 중요합니다.

아이디어가 있으십니까? 감사합니다.

답변

0

사용 가능 실제로 실제로 얻으려고하는 것은 사실이 아닙니다. 당신은 빛을 고려하고 있지 않습니다. 조명이 없으면 물체가 검은 색이됩니다. 조명과 함께 빛의 위치에 따라 다른 결과를 얻을 수 있습니다. 플랫 쉐이딩을 사용하더라도 얼굴의 색은 정상에 따라 다릅니다.

+0

괜찮습니까? 주위 환경은 항상 0xffffff라고 가정 해 봅시다. 지금은 정점 색상을 무시할 것입니다. 재료 색상 만 사용하십시오. 이는 까다로운 부분은 uv 및 표면의 점을 기준으로 지정된 위치에서 텍스처 색상을 얻는 것입니다. 어떤 아이디어? 덕분에 –

+0

정보를 얻으려면 RenderToTexture가 필요합니다. – gaitat

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 
+0

답변 주셔서 감사합니다. 그러나 나에게 약간 불만족 스럽지만 출력 색상으로 배경의 렌더를 포함합니다 (제안 사항을 이해하지 못한다면 제외). 어쨌든, 임은 광선 교차점의 반환 값 중 하나로서 UV 좌표를 추가하기 위해 three.js에 대한 패치 작업을하고 있습니다. 솔루션이 충분히 우아 할만하다면 THREE.js git hub에 제출할 것입니다. 그렇지 않다면 여기에 답변을 게시 할 것입니다. 건배. –

+0

그래, 내 아이디어가 github에 제출하기에 충분하지 않다.하지만 약속대로, 내 해결책은 다음과 같다 : 교차점 함수의 반환 값으로 vertex와 uv maps를 추가하고, 충돌 점과 거리 요소를 생성하기 위해 꼭지점 중 하나를 찾습니다. 나는 인자를 정규화하는 것보다 그것을 사용하고 원래의 정점 uv를 사용하여 결과 uv를 얻습니다. –