2012-10-06 3 views
0

.OBJ 파일에 인간 모델이 있습니다. 삼각형이있는 메쉬로 표시하고 싶습니다. 텍스처가 없습니다. 또한 3D로 이동, 크기 조정 및 회전 할 수 있기를 원합니다.iOS OpenGL ES로 메쉬 와이어 프레임 그리기

첫 번째 작업 옵션은 수식을 수동으로 사용하여 정점을 2D로 투영 한 다음 Quartz 2D로 그립니다. 원근 투영을위한 기본 수학 개념을 알고 있습니다.

그러나 그 방법으로 OpenGL ES를 사용하고 싶지만 삼각형을 그리는 방법을 모르겠습니다.

예를 들어, 코드에 - (무효)의 drawRect : (CGRect)하는 구형은 다음과 같습니다 이제 어떻게

glClearColor(1,0,0,0); 
glClear(GL_COLOR_BUFFER_BIT); 
GLKBaseEffect *effect = [[GLKBaseEffect alloc] init]; 
[effect prepareToDraw]; 
glEnable(GL_DEPTH_TEST); 
glEnable(GL_CULL_FACE); 

? 나는 정점 위치 (정점 당 3 수레)와 삼각형 인덱스의 배열의 배열을, 그래서 나는이 시도 :

glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, numVertices,pVertices); 
glDrawElements(GL_TRIANGLES, numTriangles, GL_UNSIGNED_INT,pTriangles); 

을하지만 아무것도 표시되지 않습니다. 샘플에서 glEnableVertexAttribArray (GLKVertexAttribPosition) 및 glDrawArrays의 사용법을 보았지만 사용 방법을 잘 모르겠습니다.

ES에서도 와이어 프레임 렌더링이 불가능하다는 것을 알고 있습니까? 그래서 꼭지점에 색 속성을 적용해야합니다. 괜찮습니다.하지만 그 전에 삼각형을 먼저 표시해야합니다.

+0

http://gamedev.stackexchange.com/ – axis

+0

@axis 어떻게하면 게임 개발과 관련이 있는지 알 수 없습니다. gamedev.se는 그래픽과 관련된 모든 것을위한 덤프가 아닙니다. –

+0

@ChristianRau OpenGL은 렌더링 기술이며, "그래픽"만을위한 것이 아니라 _ ​​아마도 가장 좋은 곳은 Gamedev입니다. – axis

답변

1

가장 먼저 물어볼 것은 : 정점은 어디에 있습니까? OpenGL (ES)은 (-1, -1, -1)에서 (1, 1, 1)까지 확장되는 좌표 공간을 그리기 때문에, 투영 행렬로 포인트를 변환하여 해당 공간으로 가져 오려고 할 수 있습니다. iOS에서의 투영 행렬 및 OpenGL ES 2.0의 기본 사항에 대해 더 배우려면 책이나 튜토리얼을 찾는 것이 좋습니다. This one's not badhere's another that's specific to GLKit.

drawRect:에 OpenGL을 사용하여 그리는 것은 아마도 원하는 작업이 아닙니다. 이미 GLKit을 사용하고 있다면 GLKView을 사용하지 않으시겠습니까? "OpenGL Game"템플릿으로 새로운 Xcode 프로젝트를 만들면 시작하는 데 좋은 예제 코드가 있습니다.

일단 GL에 익숙해지면 일반적으로 데스크탑 OpenGL에서 와이어 프레임 드로잉에 사용되는 glPolygonMode 함수가 OpenGL ES에 존재하지 않습니다. 하지만 정점 데이터가 어떻게 구성되어 있는지에 따라 GL_LINES 또는 GL_LINE_LOOP으로 적절한 와이어 프레임을 얻을 수 있습니다. GLKit을 사용하고 있기 때문에, GLKBaseEffect으로 와이어 프레임을 건너 뛰고 약간의 조명과 음영을 설정할 수 있습니다.

+0

좌표 공간이 -1에서 1로 확장된다는 아이디어를 어디서 얻었습니까? 나는 GL이 적어도 MIN_INT에서 MAX_INT까지의 좌표로 작업한다는 것을 확신한다. 10에서 10까지 그리드를 따라 몇 개의 큐브를 렌더링하고 모두 볼 수 있다는 것을 확실히 알 수 있습니다. – Olie

+1

[파이프 라인]의 마지막 단계 중 하나 (http://www.songho.ca/opengl/gl_transform.html)은 3 축 모두에서 -1에서 1로 확장되는 정규화 된 장치 좌표로의 변환입니다. 투영 ([GLKit 방법] (http://developer.apple.com/library/ios/documentation/GLkit/Reference/GLKEffectPropertyTransform_ClassRef/Reference/Reference.html#//apple_ref/doc/)을 설정하지 않은 경우 c_ref/GLKEffectPropertyTransform) 또는 기타 다른 좌표 공간에서이 좌표 공간으로 정점을 변환하면 그 정육면체 외부로 그릴 수 없습니다. – rickster

+0

아, 잡았다. 나는 프로젝션을 설정하지 않고 디스플레이의 가능성을 고려하지 않았다. 나는 그것이 전혀 작동하지 않았다는 것을 몰랐다! 감사. – Olie

관련 문제