2009-05-05 13 views
2

저는 iPhone 용 OpenGL 응용 프로그램을 작성하는 법을 배우려고합니다. OpenGL-ES에서 작동하도록 다음 코드를 어떻게 포팅 할 수 있습니까? 배열에 꼭지점을 저장하고 glDrawArrays()를 호출해야한다는 것을 알고 있지만이를 수행하는 최적의 방법이 있습니까? 내 생각은 매우 큰 배열을 만들고 얼마나 많은 공간이 채워 졌는지 단순히 카운터를 유지하는 것입니다. 여기에 더 나은 접근법이 있습니까? NSArray를 사용하고 다시 c 배열로 변환하는 것은 어떻습니까?OpenGL-ES 로의 OpenGL - glBegin();

glBegin(GL_LINE_STRIP); 

z = -50.0f; 
for(angle = 0.0f; angle <= (2.0f*3.1415f)*3.0f; angle += 0.1f) 
    { 
    x = 50.0f*sin(angle); 
    y = 50.0f*cos(angle); 

    // Specify the point and move the Z value up a little 
    glVertex3f(x, y, z); 
    z += 0.5f; 
    } 

// Done drawing points 
glEnd(); 

답변

1

공간이 충분하고 배열의 최대 크기를 알고 있다면 정적으로 할당 된 하나의 큰 배열을 사용하고 현재 논리 크기를 추적하는 것이 가장 간단합니다.

메모리가 부족하지만 프로세서 자원이 많으면 즉시 배열을 압축 한 다음 배열을 등록하고 glDrawArrays()를 호출하십시오.

하이브리드 방식은 (필요한 경우) 업데이트 할 수있는 동적으로 할당 된 배열을 사용하는 것입니다. 동적 배열이 가득 차게되면 동적 배열을 다시 할당하거나 NSMutableArray를 사용하여 수동으로 수행 할 수 있습니다. (N.B.있는 NSArray는 정적 배열입니다; NSMutableArrays (서브 클래스) 동적 See here..)이 :)

도움

희망

1

클래식 속도/메모리 트레이드 오프와 비슷합니다. 메모리가 부족한 경우에는 동적 인 데이터 구조를 사용해보십시오. 배열의 크기에 대한 합리적인 범위와 필요한 방정식의 수를 정확히 알고 있다면 방금 제안한 카운터를 사용하여 일반 오래된 정적 배열을 사용하십시오.

배열에 대해 알고 있고 배열을 그리는 것처럼 보이므로 여기서는 다루지 않을 것입니다.

행운을 빈다.