2013-06-01 2 views
2

저는 똑같은 일을하는 두 가지 방법이 있습니다. 지금 나는 그들의 차이점이 무엇이고 더 빨리 수행 할 수 있는지 궁금합니다. 찾는 방법이다 : 번째 방법OpenGL 2D 움직이는 관계

glBindTexture(GL_TEXTURE_2D, texture[0]); 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex2f(x, y); 
    glTexCoord2f(1, 0); glVertex2f(x+texWidth, y); 
    glTexCoord2f(1, 1); glVertex2f(x+texWidth, y+texHeight); 
    glTexCoord2f(0, 1); glVertex2f(x, y+texHeight); 
glEnd(); 
x++; y++; 

2 번째 방법

glPushMatrix(); 
glTranslatef(x, y, 0); 
glBindTexture(GL_TEXTURE_2D, texture[0]); 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex2f(0.0f, 0.0f); 
    glTexCoord2f(1, 0); glVertex2f(1.0f, 0.0f); 
    glTexCoord2f(1, 1); glVertex2f(1.0f, 1.0f); 
    glTexCoord2f(0, 1); glVertex2f(0.0f, 1.0f); 
glEnd(); 
glPopMatrix(); 

x++; y++; 
+1

두 가지 방법이 같지 않으므로'glScalef (texWidth, texHeight, 1.0f)'와'glTranslatef'가 필요합니다. –

답변

0

번째 방법은 전체 행렬을 변환하기 때문에, 많이 빠르기 때문에 마찬가지로 많은 계산을 수행하지 않는다 방법 1에서.

+2

이러한 특정 작업은 GPU와 같이 CPU에서 빠르거나 빠르며 아마도 행렬을 조정하는 것보다 빠르기 때문에 메서드 # 1이 상당히 빠릅니다. –

+0

정말요? 고마워 ~ :) – user2442604

+3

@ user2442604 :이 특별한 경우에만. 8 개 이상의 삼각형을 그리면 바로 느려집니다. 하지만 우선 모드 (glBegin, glVertex, glEnd)를 사용해서는 안됩니다. 버텍스 배열을 사용하십시오. – datenwolf

2

성능과 관련하여 어쨌든 천천히 진행되는 즉석 모드를 사용하고 있습니다. 불행히도 대부분의 OpenGL 자습서는 절대로 구식입니다. VBO 및 VAO와 같은 버퍼 (gpu-side)를 사용하십시오.

좋은 현대 가이드 VBOs 여기서 소개되는 http://open.gl/이다 http://open.gl/drawing

-1

번째 방법은 적은 계산으로 전체 QUAD 행렬을 변환하기 때문에, 훨씬 더 빠르다.