2012-06-23 2 views
0

번역, 회전, 확대/축소와 같은 방식으로 XTK 카메라와 상호 작용 한 후에 카메라의 위치, 초점 및 위치의 새 값을 검색 할 수 있습니다 위로 벡터? getter 및 setter가 카메라 자바 스크립트에 정의 된 것처럼 보이지만 이러한 속성은 상호 작용 중에 업데이트되지 않습니다. 예를 들어, camera.position에 의해 반환 된 값은 변환 후에도 업데이트되지 않습니다.상호 작용 후 카메라의 위, 초점 및 위치 값

이러한 값을 제공 할 수있는 메커니즘이 있습니까? 아니면 카메라를 수정하는 모든 상호 작용에 추가로 감시자를 추가 할 수 있습니까?

답변

0

위치, 위로 벡터 및 포커스는 처음에 3d 공간을 구성하는 데 사용됩니다. 모든 상호 작용은 생성 된 뷰 매트릭스를 수정합니다.

당신은 내가 몇 가지 솔루션은 작업을 수행하는 사람들의 따라 볼이

ren = new X.renderer3D() 
console.log(ren.camera.view + "") // prints the view matrix as a string 
+0

아, 감사합니다. 주어진 관점에서, 카메라 위치, 포커스 및 벡터를 후퇴시키는 메커니즘이 있습니까?소스를 파헤 치다가 변형 된 아핀 변환 인 것처럼 보이지만 세부 사항은 다소 이해하기 어렵습니다. 여기서는 XTK를 다른 뷰 매개 변수 집합을 사용하는 카메라 경로에 대한 입력으로 사용하고 두 매개 변수를 서로 연결하려고합니다. – Matt

0

같은 뷰 행렬을 조회 할 수 있습니다.

첫 번째 : 추적 기능을 사용하려면 카메라에 옵션을 추가하십시오 (기본적으로 사용 중지됨). 위/위치/초점을 업데이트하는 옵션은 쉽지 않습니다. 이전 행렬을 변환 행렬과 곱하는 것과 동시에 뷰 행렬에 변환 행렬을 곱하는 것만 큼입니다. 그러나 그것은 운영에 추가 비용을 초래할 수 있습니다. 내 메모리는, 기지국 B의 변환 행렬 T (O (x, y, z)을 I 좋은 경우 * J * 아니면

세컨드 내 "두 번째"에서처럼 계산할 수 , k)는 잘 알려진 구조를 가지고 있지 않습니까? (어쩌면 내가 전치을 잊지) 이런 식으로 뭔가 :

([u1,u2,u3])=T(0(x,y,z)) i.e. gives the translation in the base B 
([i1,i2,i3])=T(**i**) 
([j1,j2,j3])=T(**j**) 
([k1,k2,k3])=T(**k**) 
다음

당신이 그것을 (오일러의 계산 참조) 매우 가혹한 인 3 각을 원하는 경우,하지만 당신 같은 경우

i1 j1 k1 u1 
i2 j2 k2 u2 
i3 j3 k3 u3 
0 0 0 1 

다른 것을 원할 경우 더 쉬울 수 있습니다.. 예를 들어 우리는 변환 T에 의해베이스 B의 "k"벡터의 이미지 인 상향 벡터를 원하므로 [j1, j2, j3] no입니까? 그러면 초점 포인트를 쉽게 얻을 수 없지만 초점 벡터를 쉽게 얻을 수 있습니다 : [k1, k2, k3]! (실제로는 -1 * [k1, k2, k3]). X.camera3D의 LookAt_ 메소드를 잘 살펴 본다면, webgl에 포커스 포인트를 부여하는 것이 아니라 표준화 된 포커스 벡터를 제공합니다 : 포인트 위치는 중요하지 않습니다. 초점 벡터에서 1 포인트 만 있으면됩니다. 계산할 수 있습니다. 지금, 안돼? 현재 위치는 현재이며, 현재 초점 벡터 좌표입니다.

나는 내 기억이 잘되고 총체적인 sh * t를 말하고 싶지 않다.

한 가지 질문 : 뷰 매트릭스에 대한 설정자가 있습니다. 왜 바로 뷰를 직접 저장하고 설정하는 대신 & 설정/포커스/위치를 저장 하시겠습니까?

추신 :주의, 스케일 연산자 k가있을 수 있으므로 행렬이 달라 지지만 xtk에 있다고 생각하지 않습니다. PS 2 : 굵은 체는 벡터입니다. [number, number, number]는 좌표로 표시된 3D 벡터입니다.

+0

잊어 버렸습니다 : 인터랙 터와 마찬가지로 할 수 있습니다 : onRotate, onPan & onZoom에 public overloadable functions를 추가하면 변환을 저장하고 xtk에게 protected 메소드 인 rotate/zoomIn/zoomOut을 통해 좋은 시간에 작업하도록 요청할 수 있습니다. /팬. – Ricola3D