Tôi đang tạo bản sao Minecraft làm dự án OpenGL đầu tiên của mình và bị kẹt ở phần chọn hộp. Điều gì sẽ là phương pháp tốt nhất để thực hiện một lựa chọn hộp đáng tin cậy?Phương pháp chọn hộp tốt nhất cho bản sao Minecraft
Tôi đã trải qua một số thuật toán AABB, nhưng không có giải thích nào đủ chính xác (đặc biệt là các siêu chỉnh) và tôi không muốn sử dụng những thứ tôi không hiểu.
Kể từ khi thế giới bao gồm khối Tôi đã từng octrees để loại bỏ một số căng thẳng trên các tính toán ray dàn diễn viên, về cơ bản là điều duy nhất tôi cần là chức năng này:
float cube_intersect(Vector ray, Vector origin, Vector min, Vector max)
{
//???
}
Các ray và nguồn gốc có thể dễ dàng thu được với
Vector ray, origin, point_far;
double mx, my, mz;
gluUnProject(viewport[2]/2, viewport[3]/2, 1.0, (double*)modelview, (double*)projection, viewport, &mx, &my, &mz);
point_far = Vector(mx, my, mz);
gluUnProject(viewport[2]/2, viewport[3]/2, 0.0, (double*)modelview, (double*)projection, viewport, &mx, &my, &mz);
origin = Vector(mx, my, mz);
ray = point_far-origin;
phút và tối đa là các góc đối diện của hình lập phương.
Tôi thậm chí không chắc chắn đây là cách phù hợp để làm điều này, xem xét số lượng hình khối tôi phải kiểm tra, ngay cả với octrees.
Tôi cũng đã thử gluProject
, nó hoạt động, nhưng rất không đáng tin cậy và không cung cấp cho tôi khuôn mặt được chọn của hình khối.
EDIT
Vì vậy, đây là những gì tôi đã thực hiện: tính toán một vị trí trong không gian với ray:
float t = 0;
for(int i=0; i<10; i++)
{
Vector p = ray*t+origin;
while(visible octree)
{
if(p inside octree)
{
// then call recursive function until a cube is found
break;
}
octree = octree->next;
}
if(found a cube)
{
break;
}
t += .5;
}
Nó thực sự đáng ngạc nhiên nhanh và dừng lại sau khi người đầu tiên tìm thấy khối .
Như bạn có thể nhìn thấy tia phải đi nhiều octrees máng trước khi nó tìm thấy một khối lập phương (thực sự là một vị trí trong không gian) - có một crosshair ở giữa màn hình. Bước tăng thấp càng chính xác hơn, nhưng cũng chậm hơn.
Sao chép đã dán những gì bạn đã nói với Google và nhận thấy rằng: http://www.metanetsoftware.com/technique/tutorialB.html Cảm ơn, tốt hơn so với giải pháp của tôi. – Solenoid
Đồng ý .. Tôi đã làm việc trên một bản sao cho xbox và tìm thấy xử lý các đỉnh chuyên sâu .. chuyển sang khối hành quân cho trò chơi tiếp theo của tôi và nó chạy cách nhanh hơn (như một ứng dụng chrome trong javascript!) [Mỏ mars] (http: // youtu.be/_oML6USPs20) –