के लिए सर्वश्रेष्ठ बॉक्स चयन विधि मैं अपनी पहली ओपनजीएल परियोजना के रूप में एक Minecraft क्लोन बना रहा हूं और बॉक्स चयन भाग पर फंस गया हूं। विश्वसनीय बॉक्स चयन करने का सबसे अच्छा तरीका क्या होगा?Minecraft क्लोन
मैं कुछ एएबीबी एल्गोरिदम के माध्यम से जा रहा हूं, लेकिन उनमें से कोई भी पर्याप्त रूप से पर्याप्त रूप से समझाता है कि वे वास्तव में क्या करते हैं (विशेष रूप से सुपर ट्वीड वाले) और मैं उन चीज़ों का उपयोग नहीं करना चाहता जिन्हें मैं समझ नहीं पा रहा हूं।
float cube_intersect(Vector ray, Vector origin, Vector min, Vector max)
{
//???
}
रे और मूल आसानी से
साथ प्राप्त कर रहे हैं:के बाद से दुनिया क्यूब्स से बना है मैं octrees इस्तेमाल किया रे डाली गणना पर कुछ तनाव दूर करने के लिए, मूल रूप से केवल एक चीज मैं जरूरत इस समारोह है
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;
न्यूनतम और अधिकतम घन के विपरीत कोनों हैं।
मुझे यह भी सुनिश्चित नहीं है कि ऐसा करने का सही तरीका यह है कि मुझे क्यूब्स की संख्या पर विचार करना होगा, यहां तक कि ऑक्टेट्स के साथ भी।
मैंने gluProject
भी कोशिश की है, यह काम करता है, लेकिन बहुत अविश्वसनीय है और मुझे घन का चयनित चेहरा नहीं देता है।
संपादित
तो इस मैं क्या किया है है:
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;
}
वास्तव में आश्चर्यजनक रूप से तेज है और बाद पहली घन पाया बंद कर देता है: रे के साथ अंतरिक्ष में एक स्थिति की गणना । वहाँ स्क्रीन के बीच में एक क्रॉसहेयर है -
आप रे देख सकते हैं इससे पहले कि यह एक घन (वास्तव में अंतरिक्ष में एक पद) पाता गर्त कई octrees जाना पड़ता है। वृद्धि वृद्धि जितनी कम होगी उतनी सटीक चयन, लेकिन धीमी गति से।
कॉपी जो आपने Google से कहा था उसे चिपकाया और पाया कि: http://www.metanetsoftware.com/technique/tutorialB.html धन्यवाद, मेरे समाधान से बेहतर तरीका। – Solenoid
सहमत .. मैंने एक्सबॉक्स के लिए क्लोन पर काम किया और मुझे गहनों के प्रसंस्करण मिल गया .. मेरे अगले गेम के लिए क्यूब्स मार्च करने के लिए स्विच किया गया और यह तेजी से चलता है (जावास्क्रिप्ट में क्रोम एपीपी के रूप में!) [मेरा मर्स] (http: // youtu.be/_oML6USPs20) –