我有兩種方法用於渲染網格。第一招:提高執行該代碼的速度
二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
避免特別聲明和銷燬的Z sizeX
倍
而且我想,最好是創建一個列表(同一時間,RO存儲可以每幀重複使用)的所有節點的順序來遍歷使用兩個for
'glVertex3f(...)'*** far ***的通話開銷超過了任何你可以拋出這個問題的花式褲子指針算術黑客的機會。像這樣微觀優化即時模式幾乎沒有意義,你應該切換到索引頂點數組,並把它花費更多的時間。但是如果你堅持的話,如果你把'glVertex3fv(... )'放到混合中再進行一次微型優化,你可以讓這個噩夢持續更長的時間。 –
@ AndonM.Coleman聽起來不錯,我很高興我從來沒有使用過頂點數組,所以當我編寫代碼時我甚至沒有想到它。我在一些書中讀到了關於他們的一些。我將在圖書館明天閱讀更多有關 –