紋理立方體的最佳方式(最低內存,最快速度)是多少?過了一會兒,我必須找到這個解決方案:在openGL中紋理立方體的最佳方式
數據結構:
GLfloat Cube::vertices[] =
{-0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 1.0f, 0.5f, -0.5f, 1.0f, 0.5f,
-0.5f, 1.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, -0.5f,
0.5f, 0.0f, 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 1.0f, 0.5f,
-0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 1.0f, 0.5f, -0.5f, 1.0f, -0.5f
};
GLfloat Cube::texcoords[] = { 0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0
};
GLubyte Cube::cubeIndices[24] = {0,1,2,3, 4,5,6,7, 3,2,5,4, 7,6,1,0,
8,9,10,11, 12,13,14,15};
繪製函數:
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubeIndices);
glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
glDisable(GL_TEXTURE_2D);
正如你所看到的結果是正確的:
但rech這個結果我不得不重新定義一些頂點(在vertices
數組中有16個3D點),否則紋理無法映射到第e DrawElement函數。
有人知道更好的方法來紋理頂點數組中的立方體嗎?
爲什麼你需要「最快/最低的內存」,你計劃在屏幕上擁有十億個立方體嗎?另外,你是什麼意思「重新定義某個頂點」? –
設置了立方體紋理後,fps下降(從60到40)。我已經重新定義了「頂點」數組中的某個頂點,如果仔細觀察,該數組中有16個點(3D),但定義一個立方體8就足夠了。 – Luca
你正在做的事情非常錯誤,它可能不是立方體,8或16個頂點不會有什麼不同。還要考慮每個頂點連接3個面,並且它們都具有不同的UV座標,則需要這些「額外」頂點。我不確定,但是當你創建紋理時,你只需要調用glTexParameteri一次,如果這是你的循環,它可能是減速的原因。 –