2010-11-30 3 views
0

저는 지난 몇 주 동안 키보드에서 머리를 숙였습니다. 내가 뭘하려고 해요 배열의 수레 (GLfloat) 및 텍스트 파일에서 unsigned shorts (GLushort)의 배열을 objective-c의 동등한 배열로로드하여 포함 된 객체를 렌더링 할 수있게합니다. 나는파일에서 정점 배열을로드하기위한 올바른 형식

vector<float> vertices; 

vector<GLushort> indices; 

그러나 나는 이러한 렌더링 얻을 수없는 이유를 알아낼 수 없습니다 어떤 이유로 벡터 객체에로드 내 배열을 가지고있다.

glVertexPointer(3, GL_FLOAT, sizeof(vertices[0])*6, &vertices[0]); 
glNormalPoitner(GL_FLOAT, sizeof(vertices[0])*6, &vertices[3]); 
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_SHORT, indices); 

샘플 배열은 다음과 같습니다 :

vertices: (Vx, Vy, Vz, Nx, Ny, Nz) 

{10, 10, 0, 0, 0, 1, 
-10, 10, 0, 0, 0, 1, 
-10, -10, 0, 0, 0, 1, 
10, -10, 0, 0, 0, 1}; 

indices: (v1, v2, v3) 
{0, 1, 2, 
0, 2, 3}; 

텍스트 파일이이 같은 모습을 렌더링에서 이러한 배열을로드 할 다음은 위의 렌더링에 대한 내 코드는

4 //Number of Vertices 
###Vertices### 
v 10 10 0 0 0 1 
v -10 10 0 0 0 1 
v -10 -10 0 0 0 1 
v 10 -10 0 0 0 1 
###Object1### 
2 //Number of faces 
f 0 1 2 
f 3 4 5 

벡터 객체는 최상의 접근 방식을 취합니까? 그렇지 않다면 무엇입니까? 그리고 내가 뭘 잘못해서 렌더링하지 않을거야? 감사.

+0

"렌더링 할 수 없습니다." 대신 당신은 ... 뭐라 구요? 추락? 검은 화면? – genpfault

+0

미안하지만, 분명히 밝혀지지 않았습니다. 내 glDrawElements 행을 주석 처리 한 것과 같습니다. 말하자면, glDrawElements보다 렌더링하려는 효율적인 방법이 있습니까? – Davido

답변

2

GL_TRIANGLES를 사용하여 정점 형식을 지정합니다.

alt text

하는 GL_TRIANGLES에 대한 그래프를 참조하십시오, 당신의 형식이 잘못되었습니다. 그리고 GL_TRIANGLE_STRIP 형식을 사용하는 것을 선호합니다. 정점이 거의 필요 없습니다.

+0

마지막으로 glDrawElements의 마지막 매개 변수 때문에 인덱스의 벡터에 주소가 필요한 것처럼 보였습니다. OBJ 파일에서 지오메트리를로드하는 중입니다. 그렇다면 지오메트리가 이미 생성 된 경우 삼각형 스트립을 사용하여 지오메트리를 렌더링하는 방법은 무엇입니까? 삼각형 스트립을 이용하기 위해 색인을 재정렬 할 수있는 전처리기를 데스크톱에 쓰는 것에 반대하지 않을 것입니다 ... – Davido

+0

게시물의 정점을 사용하여 (x ,와이). 정점 흐름은 (10, 10) -> ((10, -10) -> (10, -10) -> (-10, -10)이 될 수 있습니다. – AechoLiu

+0

중복 지형을 찾고 인덱스 포인터를 조정하는 지오메트리 전 처리기에 최적화 루틴을 작성하여 동일한 결과를 얻을 수 있습니다. 유일한 차이점은 꼭지점이 삼각형 스트립으로 재사용되지만 삼각형으로 재사용되지 않는다는 것입니다. 이것이 왜 삼각형 스트립만큼 빨리 또는 거의 빠지지 않는지에 대한 이유는 무엇입니까? – Davido