2014-01-23 4 views
0

요즘 OS X에서 OpenGL을 사용하고 있습니다. (tl; dr : 저는 OpenGL noob입니다.) 큐브를 그리는 코드가 있습니다. 그러나, 나는 내 얼굴이 번역되지 않았기 때문에 (정면 외에) 어떤 얼굴도 보지 못한다. gluLookAt 함수를 사용하여이 변환을 시도하지만 GL_INVALID_OPERATION 오류가 발생합니다.GL_INVALID_OPERATION이 gluLookAt를 호출 할 때

나는 내가 워드 프로세서에서 무엇을 수집 할 수 있습니다에서의 gluLookAt 호출을 주석 때이 코드가 작동
// Activate and lock context 
[_glView.openGLContext makeCurrentContext]; 
CGLLockContext(_glView.openGLContext.CGLContextObj); 

// Update camera position 
gluLookAt(0, 2.0, 0, 0, 0, 0, 0, 1, 0); 
gl_GetError(); 

// Update viewport and render 
glViewport(0, 0, _glView.frame.size.width, _glView.frame.size.height); 
[_renderer doRender:time]; 

// Unlock and flush context 
CGLUnlockContext(_glView.openGLContext.CGLContextObj); 
[_glView.openGLContext flushBuffer]; 

가,이 오류가 glBeginglEnd 사이 gluLookAt을 실행하여 발생합니다 : 이것은 내가 내 렌더링 작업을 수행하는 방법이다. 내가 전화를 걸지 않고 전화가 gluLookAtglBeginglEnd으로 바뀌어도 문제가 해결되지 않는다.

차이가 있다면 OpenGL 3.2 핵심 프로필을 사용하고 있습니다.

+1

OpenGL 태그를보고있는 누군가는 거의 모든 질문을 덧붙여 설명하지 말고 돌아가고 있어야합니다. 이것은 정말로 나를 괴롭 히고있다. – thokra

+0

@thokra 난 그냥 다시 upvote .. 만약 당신이 질문이 나쁘다고 생각한다면, 왜 변명을 설명하십시오. –

+0

@AntonD : 당신은 설명을 할 수 없기 때문에 downvoted, 다시 upvoted? 나는 조금 혼란 스럽다. – thokra

답변

2

그런데 gluLookAt (...) (일반적으로 GLU)은 OpenGL의 일부가 아닙니다. 따라서이 오류의 원인을 직접 설명하는 문서는 찾을 수 없습니다. ( 옛적에 한 번 GL의 한 부분이었다) glMultMatrixf (...) : 뒤에서는이 작업을 수행하기 때문에이 GL_INVALID_OPERATION를 생성

유일한 이유입니다. 더 이상 행렬 스택이 없으므로 핵심 프로파일 컨텍스트에서는 유효하지 않습니다. GL 3.0 또는 3.1에서 이 더 이상 사용되지 않는 항목이 인 경우 은 GL 3.2 (코어 프로필)에서이 삭제되었습니다.

OS X에서 gluLookAt/매트릭스 스택 기능이 필요한 경우 GLKit은 적절한 대체 유틸리티 모음을 제공합니다. 또는 Objective C++를 사용하여 컴파일하는 경우 훨씬 더 이식 가능한 (C++ 기반) 라이브러리 GLM을 사용할 수 있습니다.


여기서 훨씬 간단한 해결책은 핵심 프로필 컨텍스트를 사용하지 않는 것입니다. gluLookAt (...)과 같은 것을 사용한다면 레거시 OpenGL을 배우게됩니다. OpenGL의 비추천 부분을 지원하는 컨텍스트가 필요합니다. OS X에서는 2.1 컨텍스트가 필요합니다.

+1

+1 : 또한, [GLM] (http://glm.g-truc.net/0.9.5/index.html)은'glmLookAt()'를 포함하여 일부 GLU 함수를 대신하는 아주 훌륭한 라이브러리입니다. – thokra

+0

Objecting C 응용 프로그램에서 작동하는지 확신 할 수 없었습니다. –

+0

오, 그게 객관적인 C라는 것을 보지 못했습니다. 당신은 ObjC의 C++ 코드와 인터페이스 할 수 있습니까? – thokra