iPhone에서 OpenGL ES로 게임하고 있는데 손가락으로 패닝하여 모델을 회전하려고합니다. 나는 오픈 소스 애플리케이션 분자를 발견했다. 그 코드를 살펴보면, 내 모델을 회전 할 때 공간에서 멀리 떨어진 지점에서만 회전 할 수있다. 위성 궤도에서 나는 고정 된 행성이다). 무엇이 잘못 될 수 있는지에 대한 제안이 있으십니까? 나는 당신이에 모델을 변환 할 필요가 있다고 생각, 내 기억이 제대로 날을 제공하는 경우 여기 MOLECULESOpenGL ES : 3D 모델 자체 회전하기
답변
을 찾을 수 있습니다 대부분의 경우 , 나중에 어쩌면 수요에 (여러 라인) 코드를 게시 분자를 참조 할 수 있습니다 원점 복귀, 회전 후 다시 시작 위치로 변환하여 이후의 효과를 얻을 수 있습니다.
나는 glTranslate() 함수가 있다고 생각합니다. 객체가 1,0,0에 있다고 가정합니다. 그런 다음 -1,0,0을 원점으로 이동해야합니다. 이것은 객체의 중심에서 원점으로 이동하는 벡터에 의해 변환됩니다.
은 무승부 코드는 아마 다음과 같이 대략 같습니다
glLoadIdentity();
glTranslate(0, 0, -10);
glRotate(...);
drawMolecule();
이 지금은 이러한 변환은 역순으로 적용되는 것을 깨닫게하는 것이 중요합니다.
drawMolecule
, 우리는 정점을 지정하면,이 정점
제는 (정의에 의해 분자의
로컬 원점을 통과)
glRotate
주어진 축을 중심으로 회전되고,
다음는 10 개 단위를 번역 -z 방향.
glTranslate
은 "다음에 오는 모든 것을 번역"을 의미하기 때문에 의미가 있습니다. 여기에는 glRotate
호출 자체가 포함되므로 회전 결과도 변환됩니다. 호출이 역전 된 경우 변환 결과가 회전되어 더 이상 원점을 통과하지 않는 축을 중심으로 회전합니다.
결론을 : 그 지역 기원에 대해 객체를 회전하려면 glRotate
전화 마지막을 넣어.
모든 변환이 스택에 들어간 것처럼 들립니다. – rano
예, 아니오. 이렇게하면, 현재 변환 행렬에 지정된 회전/변환 행렬이 단순히 곱 해져서 역행 변환을 적용하지 않는 한 이전 행렬로 돌아갈 방법이 없습니다. 그러나 반올림을 사용하면됩니다. 오류, 확신 할 수있는 방법이 없습니다). 그러나 OpenGL *은 "행렬 스택"을 가지고 있습니다 : 여러분은 명시 적으로'glPushMatrix'와'glPopMatrix'를 사용하여 현재 행렬을 저장하고 복원 할 수 있습니다. 스택 맨 위에있는 행렬이 현재 행렬입니다. 그 아래의 행렬은 전혀 보지 않습니다. – Thomas
알았어. 순서가 중요하다는 사실은 교환 적 속성이없는 두 행렬의 사전 곱셈에서 발견된다는 사실이다. – rano
- 1. C에서 3D 모델 회전하기
- 2. OPENGL/ES 3D 모델 확대/축소가 UIScrollView에서 올바르게 팬되지 않습니다.
- 3. OpenGL 또는 OpenGL ES
- 4. Android OpenGL-ES 3D 게임 최적화
- 5. OpenGL ES 기능
- 6. OpenGL ES 기능
- 7. OpenGL ES 1.1에서 OpenGL ES 2.0으로 전환
- 8. Iphone + OpenGL ES + 블렌더 모델 : Touch by Rotation by
- 9. iPhone OpenGl : 3D 모델 가져 오기
- 10. FPGA 자일링스에서 OpenGL ES 사용
- 11. iPhone OpenGL-ES 비디오 텍스처
- 12. OpenGL-ES 로의 OpenGL - glBegin();
- 13. iPhone에서 큐브를 만들고 회전하기 위해 openGL ES를 시작하는 위치는 어디입니까?
- 14. OpenGL ES : 변환을 비활성화 하시겠습니까?
- 15. Android OpenGL ES 투명 배경
- 16. OpenGL ES 비동기 텍스처로드
- 17. OpenGL ES iPhone Textures
- 18. OpenGL ES 인스트루먼트의 정확성
- 19. 데스크탑 PC의 OpenGL | ES
- 20. 조명 및 OpenGL ES
- 21. OpenGL ES 확대/축소
- 22. OpenGL-ES and Cg
- 23. 캔버스 또는 OpenGL ES?
- 24. OpenGL ES 캔버스 크기
- 25. OpenGL ES 텍스처 메모리
- 26. OpenGL ES 깊이 버퍼
- 27. OpenGL ES 및 texcoord
- 28. OpenGL ES 2.0 텍스처링
- 29. 아이폰 시뮬레이터의 OpenGL ES
- 30. quaternions for OpenGL ES
어떻게 번역 할 수 있습니까? 나는 0,0,0에 있고 객체가 어떤 좌표에 서 있다고 추측한다. 모델 안에서도 번역하려고했는데 (나는 그것의 반만 볼 수있다.) 그러나 어떤 dinstance에서 회전을 계속한다. 나는 완전히 멍청하다. . – rano
위 번역본을 예제 번역으로 업데이트했습니다. 자신이 OpenGL 초보자라고 생각한다면 OpenGL을 처음 사용할 때 "NeHe"튜토리얼을 많이 배웠다. 10과 (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=10)는 3D 세계를 움직이는 방법을 보여줍니다. (모델 로딩에 대한 간단한 글을 스크롤하십시오) –
@ S.C. Madsen : 제가해야 할 일은 제가 처음 번역 한 양을 번역하는 것입니다. 하지만 실제로 그것을 할 수 없다, 나는 모델을로드한다. (그래서 그의 꼭지점이 어떤 정의 된 좌표를 가지고 있고 그가 기원에 놓이지 않은 것 같다) gltranslate()와 glRotate를 사용하여 '카메라'를 움직인다. 장면이 움직이는 지 알 수 있습니다.) 장치보기에서 모델을 갖기 위해. 그래서 나는 원근감이나 좌표축 시스템에 대해 뭔가 잘못하고 있다고 생각합니다. – rano