openball이있는 arcball을 구현 중입니다 (cpp에서). 말하기, 나는 축 시스템의 중심에 개체가 있고 원래 (세계) 축에 따라 여러 번 회전하려고합니다. 그러나 첫 번째 회전 후에 축이 변경되고 이후의 모든 회전이 잘못됩니다. 아이디어가 있으십니까? 감사합니다. .OpenGL을 사용하여 회전하면서 원본 축 시스템 유지
답변
필자는 OpenGL ES 응용 프로그램에서 직접 동일한 작업을 수행해야만했습니다. 그 응용 프로그램에 대한 설명은 here입니다. 원래 원유 방법은 현재 모델 뷰 행렬을 읽고 원하는 효과를 생산하기 위해 그것을 조작 :
GLfloat currentModelViewMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(xRotation, currentModelViewMatrix[1], currentModelViewMatrix[5], currentModelViewMatrix[9]);
glGetFloatv(GL_MODELVIEW_MATRIX, currentModelViewMatrix);
glRotatef(yRotation, currentModelViewMatrix[0], currentModelViewMatrix[4], currentModelViewMatrix[8]);
이 작동을하지만,이 glGetFloatv()
호출이 파이프 라인을 중단하여 렌더링 속도가 느려집니다 점에 유의. 이후로이 코드를 모델 뷰 매트릭스의 내부 복사본에서 수행하는 계산으로 바꾼 다음 각 회전 후에 내부에서 조작 된 모델 뷰 매트릭스를 작성합니다. 따라서 비싼 매트릭스 읽기 작업을 수행 할 필요가 없습니다.
개체에 자체 오리엔테이션 축 (modelview 행렬)을 제공 한 다음 회전 행렬을 곱합니다. 회전 행렬을 만드는 방법에 대한 정보는 Wikipedia에서 확인하십시오.
rotatins에 glRotatef() 함수를 사용하고 있습니다. "오리엔테이션 축"이란 무엇입니까? – Sanich
쉐이더를 사용하고 있지 않다면 미안하다. glRotate 호출 할 때마다 행렬 스택을 밀고/팝하고 있습니까? – cmannett85
xAngle 및 yAngle을 현재 행렬에 추가합니다.
Matrix.rotateM(matrix, 0, xAngleADD, matrix[1], matrix[5], matrix[9]);
Matrix.rotateM(matrix, 0, yAngleADD, matrix[0], matrix[4], matrix[8]);
gl.glMultMatrixf(matrix, 0);
- 1. OpenGL 축 시스템 수정
- 2. WPF. 축 시스템
- 3. Excel 매크로 - 원본 서식 유지
- 4. openGl을 사용하여 스크롤
- 5. 원본 문서에 대한 언급은 유지 되었습니까?
- 6. 스윙에서 직사각형 이동 JPanel : 원본 상태 유지
- 7. 시스템 충돌시에도 '거의 완료'로그 유지
- 8. OpenGL을
- 9. OpenGL을
- 10. 두 시스템 간의 상태 유지
- 11. OpenGL을
- 12. OpenGL을 C#에서 Tao.OpenGL을 사용하여
- 13. OpenGL을 사용하여 iPad에서 그림 그리기
- 14. OpenGL을 사용하여 이미지에 색조/채도 필터 적용
- 15. OpenGL을 : GL_DEPTH_COMPONENT24은
- 16. jQuery.flot을 사용하여 Y 축 반대로
- 17. CGAffineTransformMakeScale을 사용하여 UIView를 0으로 축
- 18. C# 날짜/축 축 눈금
- 19. 이미지가 회전하면서 크기가 변합니다. 어떻게 그만합니까?
- 20. 안드로이드에서 이미지를 회전하면서 이미지 크기 조절
- 21. AJAX를 사용하여 원본 이미지 데이터로드하기
- 22. 문서를 SharePoint에 업로드했지만 네트워크에 원본 파일을 최신 상태로 유지 하시겠습니까?
- 23. 브라우저 크기를 조정할 때 원본 캔버스 가로 세로 비율 유지
- 24. OpenText LiveLink에 업로드 할 때 원본 파일 날짜 유지
- 25. JfreeChart의 자동 축 Y 축
- 26. OpenGL을 사용하여 .NET 비트 맵에 직접 그리기
- 27. OpenGL을 사용하여 안드로이드에 서클을 그릴 때의 문제
- 28. OpenGL을 사용하여 이미지 바이트 배열 읽기
- 29. OpenGL을 사용하여 코코아에서 NV12 텍스처를 표시하는 방법
- 30. OpenGL을 사용하여 OpenGL 2d보기로 소프트웨어 렌더링
"openPG"란 무엇입니까? – genpfault
Quaternions는 'Gimbal lock'에 대한 좋은 해결책입니다. – sje397