Cách nào là tốt nhất (bộ nhớ thấp nhất, tốc độ nhanh nhất) để kết cấu hình lập phương? sau một thời gian tôi có thấy giải pháp này:Cách tốt nhất để kết cấu hình lập phương trong openGL
dữ liệu struct: chức năng
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};
bốc thăm:
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);
Như bạn có thể xem kết quả là chính xác:
nhưng để rech kết quả này tôi phải xác định lại một số đỉnh (có 16 điểm 3D trong mảng vertices
) nếu không kết cấu không bản đồ trong th e Hàm DrawElement.
Ai đó biết cách kết cấu khối lập phương trong một mảng đỉnh tốt hơn?
tại sao bạn cần "bộ nhớ nhanh nhất/thấp nhất", bạn có dự định có một tỷ khối trên màn hình không? Ngoài ra, bạn có ý nghĩa gì với "xác định lại một số đỉnh"? –
Sau khi tôi đã thiết lập kết cấu khối lập phương, khung hình/giây bị giảm (từ 60 đến 40). Tôi đã xác định lại một số đỉnh trong mảng "đỉnh", nếu bạn xem xét chặt chẽ có 16 điểm (3D) trong mảng đó, nhưng để xác định một khối 8 là đủ. – Luca
Bạn đang làm một cái gì đó rất sai sau đó và nó có lẽ không phải là khối lập phương, 8 hoặc 16 đỉnh sẽ không làm cho một sự khác biệt nhiều. Cũng xem xét rằng mỗi đỉnh kết nối 3 khuôn mặt và tất cả đều có một tọa độ uv khác nhau, bạn cần những đỉnh "thêm". Tôi không chắc chắn, nhưng bạn chỉ phải gọi glTexParameteri một lần, khi bạn tạo ra kết cấu, nếu đó là trên vòng lặp của bạn nó có thể là lý do cho sự chậm lại. –