회전 후 변환

제이슨 파월

Android 용 OpenGL ES 2.0을 사용하고 있습니다. 터치 스크린을 사용하여 모델을 변환하고 회전하고 있습니다. 내 번역은 (x, y) 평면에만 있고 내 회전은 z 축에 대해서만 이루어집니다. 테이블의지도를 직접 내려다보고지도의 다양한 좌표로 이동하고 보고있는 지점 을 중심으로지도를 회전 할 수 있다고 상상해보십시오 .

문제는 내가 회전 한 후 후속 변환이 화면의 포인터 동작과 더 오래 일치하고 축이 다르다는 것입니다.

내가 시도한 모든 것은 두 가지 행동 중 하나를 제공합니다. One은 다음과 같습니다.

Matrix.setIdentityM(mModelMatrix, 0);
Matrix.translateM(mModelMatrix, 0, Xposition, Yposition, 0.0f);
Matrix.rotateM(mModelMatrix, 0, rotationAngle, 0.0f, 0.0f, 1.0f);

이를 통해 회전에 관계없이 예상대로 번역 할 수 있습니다 (화면 위 / 아래로 모델을 위아래로 이동, 왼쪽 / 오른쪽으로 모델을 왼쪽과 오른쪽으로 이동). 문제는 회전이 물체의 중심을 기준으로하고, 내가보고있는 지점을 중심으로 회전해야한다는 것입니다. 물체의 중심과는 다릅니다.

내가 얻을 수있는 다른 동작은 다음과 같습니다.

Matrix.setIdentityM(mModelMatrix, 0);
Matrix.rotateM(mModelMatrix, 0, rotationAngle, 0.0f, 0.0f, 1.0f);
Matrix.translateM(mModelMatrix, 0, Xposition, Yposition, 0.0f);

이것은 항상 내가보고있는 지점에 대해 내가 원하는 회전을 제공합니다. 문제는 회전 후 번역이 잘못되었다는 것입니다. 화면의 왼쪽 / 오른쪽은 회전 된 축을 따라 다른 각도로 개체를 변환합니다.

두 가지 행동을 동시에 얻을 수있는 방법이 필요합니다. 내가보고하고있는 점에 대해 회전해야 하고 , 화면에 손가락의 이동 방향으로 번역합니다.

이것이 가능할까요? 나는 기본적으로 양자 역학을 뉴턴 물리학과 조화 시키려고 노력하고 있으며 실패 할 운명에 처해 있습니까?

나는 모든 가능성을 신선한 관점으로 고려하고 싶기 때문에 내가 시도한 모든 트릭을 나열하고 싶지 않습니다.

편집 : 나는 여전히 이것에 완전히 붙어 있습니다.

세계 좌표에서 (0, 0, 0)에서 시작하는 개체가 있습니다. 내 뷰는 객체에서 z 축을 내려다보고 있으며 x / y 평면으로 변환을 제한하고 싶습니다. 또한 z 축에 대해서만 개체를 ​​회전하고 싶습니다. 회전의 중심은 항상 화면의 중심이어야합니다.

터치 스크린으로 번역을 제어하고 있으므로 회전 방법에 관계없이 손가락이 움직이는 것과 같은 방식으로 개체가 필요합니다.

회전하자마자 모든 변환이 회전 된 좌표계에서 일어나기 시작합니다. 즉, 개체가 화면의 포인터와 함께 움직이지 않습니다. Hugh Fisher가 추천 한대로 두 번째 번역을 시도했지만 두 번째 번역을 계산하는 방법을 알 수 없습니다. 다른 방법이 있습니까?

제이슨 파월

이것은 오래된 게시물이지만 후손을 위해 가장 잘 작동하는 솔루션을 게시하고 있습니다.

해결책은 변형이 발생할 때마다 누적되는 별도의 모델 행렬을 유지하고 onDrawFrame () 메서드에서 각 변형에이 행렬을 곱하는 것입니다.

//Initialize the model matrix for the current transformation
Matrix.setIdentityM(mModelMatrixCurrent, 0);
//Apply the current transformations
Matrix.translateM(mModelMatrixCurrent, 0, cameraX, cameraY, cameraZ);
Matrix.rotateM(mModelMatrixCurrent, 0, mAngle, 0.0f, 0.0f, 1.0f);
//Multiply the accumulated transformations by the current transformations
Matrix.multiplyMM(mTempMatrix, 0, mModelMatrixCurrent, 0, mModelMatrixAccumulated, 0);
System.arraycopy(mTempMatrix, 0, mModelMatrixAccumulated, 0, 16);

그런 다음 누적 된 행렬을 사용하여 개체를 배치합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

AnchorPoint 변경 후 UIView 회전

분류에서Dev

개체 회전 및 변환

분류에서Dev

변환 회전 (Slerp)-Unity

분류에서Dev

C # 회전 (변환) 문제

분류에서Dev

t 초 내에 n 회 클릭 후 상태 전환

분류에서Dev

CSS 전환 변환 회전 버그

분류에서Dev

WPF-회전 변환 전환

분류에서Dev

변환 변환 회전 순서

분류에서Dev

회전 후 UIImageView 높이 및 너비 변경

분류에서Dev

변경 후 MyEclipse Matisse 전환보기

분류에서Dev

좌표의 아핀 변환 후 측정 된 벡터 구성 요소의 회전 실행 취소

분류에서Dev

회전 후 UIScrollViews 프레임

분류에서Dev

회전 후 UIView 번역

분류에서Dev

회전 후 LinearLayout 범위

분류에서Dev

번역 후 좌표 회전

분류에서Dev

Android View 너비 및 높이는 회전 후 변경되지 않았습니다.

분류에서Dev

회전하지 않는 이미지 변환 회전

분류에서Dev

CSS 변환 (회전) 오작동

분류에서Dev

스냅 SVG에서 회전 변환

분류에서Dev

SceneKit에서 회전 후 카메라 노드 위치를 필요한 방향으로 변환하려면 어떻게해야합니까?

분류에서Dev

CSS 변환 회전 및 위치 변환 오류

분류에서Dev

지점이 전환 된 후 로컬 변경 커밋

분류에서Dev

오전 / 오후에서 24 시간으로 시간 변환

분류에서Dev

D3에서 변형 회전을 사용하여 위치를 배치 한 후 문자를 어떻게 회전합니까?

분류에서Dev

첫 번째 회전 후 SnapSVG 회전 문제

분류에서Dev

화면 회전 후 의도 저장

분류에서Dev

장치 회전 후 NullPointer 예외 (SherlockDialogFragment)

분류에서Dev

OpenGL에서 회전 후 좌표 값

분류에서Dev

회전 후 iOS Cocoa UITableView 위치