그리드를 렌더링하는 데 두 가지 방법이 있습니다. 하나의 제 : 하나코드 조각 실행 속도 향상
void Grid::openglRender(){
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 1.0f, 0.0f);
Node* A, * B, * C, * D;
for(size_t X=0 ; X<sizeX-1 ; X++)for(size_t Z=0 ; Z<sizeZ-1; Z++){
A = &nodes[X*sizeZ+Z];
B = &nodes[(X+1)*sizeZ+Z];
C = &nodes[X*sizeZ+(Z+1)];
D = &nodes[(X+1)*sizeZ+(Z+1)];
glVertex3f(A->x, A->y, A->z);
glVertex3f(B->x, B->y, B->z);
glVertex3f(C->x, C->y, C->z);
glVertex3f(B->x, B->y, B->z);
glVertex3f(D->x, D->y, D->z);
glVertex3f(C->x, C->y, C->z);
}
glEnd();
};
둘째 :
void Grid::openglRender(){
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 1.0f, 0.0f);
for(size_t X=0 ; X<sizeX-1 ; X++)for(size_t Z=0 ; Z<sizeZ-1; Z++){
glVertex3f(nodes[X*sizeZ+Z].x, nodes[X*sizeZ+Z].y, nodes[X*sizeZ+Z].z);
glVertex3f(nodes[(X+1)*sizeZ+Z].x, nodes[(X+1)*sizeZ+Z].y, nodes[(X+1)*sizeZ+Z].z);
glVertex3f(nodes[X*sizeZ+(Z+1)].x, nodes[X*sizeZ+(Z+1)].y, nodes[X*sizeZ+(Z+1)].z);
glVertex3f(nodes[(X+1)*sizeZ+Z].x, nodes[(X+1)*sizeZ+Z].y, nodes[(X+1)*sizeZ+Z].z);
glVertex3f(nodes[(X+1)*sizeZ+(Z+1)].x, nodes[(X+1)*sizeZ+(Z+1)].y, nodes[(X+1)*sizeZ+(Z+1)].z);
glVertex3f(nodes[X*sizeZ+(Z+1)].x, nodes[X*sizeZ+(Z+1)].y, nodes[X*sizeZ+(Z+1)].z);
}
glEnd();
};
나를 위해 첫 번째는, 작업의 수의 용어에 더 잘 보이는 glVertex3f
에 난 그냥 값을 얻기 위해 포인터를 사용합니다. 두 번째 방법에서는 곱할 필요가있을 때마다 무언가를 추가해야합니다.
그러나 실행 시간에 나는 실제로 차이를 느끼지 않습니다. 그래서 나는 처음이 더 낫다고 말할 때 맞습니까? 아니면 내가 컴파일러를 가입시 선택하신 나는 특히 선언과 파괴를 방지하기 위해 for
루프 전에 X
및 Z
를 선언하는 경우
sizeX
시간은
또한 나는 최고의 두 for
'glVertex3f (...)'*** far ***의 호출 오버 헤드가이 문제에서 던질 수있는 멋진 바지 포인터 산술 해킹을 능가 할 가능성이 있습니다. 이와 같이 즉각적인 모드를 마이크로 최적화하는 것은 사실상 의미가 없습니다. 인덱싱 된 버텍스 배열로 전환하고 더 나은 시간을 소비하도록 호출해야합니다. 그러나 만약 당신이''glVertex3fv (... )'를 다른 마이크로 최적화를 위해 던집니다. 당신이 주장한다면, 당신은이 악몽을 더 오래 지속시킬 수 있습니다. –
@ AndonM.Coleman은 정직한 배열을 사용하지 않았기 때문에 좋은 소리를 들었습니다. 그래서 그 코드를 작성할 때 생각조차하지 않았습니다. 나는 몇몇 책에서 그들에 대해 거의 읽지 않았다. 나는 라이브러리 tomorow –