Introducere Edit
Frustum (piramida de vizibilitate) este o piramidă trunchiată și poate fi reprezentată condiționat astfel:
Ca și în viața reală, nu vedeți ce nu este în vedere. Piramida vizibilității face același lucru - tot ceea ce se află în interiorul piramidei va fi afișat pe ecran, dar totul în afara nu este, deoarece privitorul nu îl vede.
Frustum Culling (tehnologie pe piramida vizibilității) - tehnologie care vă permite să tăiați obiecte inutile care nu sunt în câmpul vizual al camerei de joc. Mai multe detalii îl puteți citi.
De asemenea, în această lecție vom scrie o clasă simplă pentru lucrul cu camera și, în sfârșit, vom încerca în practică procesarea de intrare, pe care o avem de la prima versiune a cadrului, dar pe care nu am folosit-o niciodată.
Scrierea codului Editare
Creați un proiect. Conectați cadrul 5.
Editare cronometru
Vom folosi această clasă pentru a împiedica deplasarea camerei în funcție de FPS.
Editarea camerei
Clasa va fi responsabilă pentru lucrul cu camera. Camera este asociată cu matricea speciilor. TurnLeft () și TurnRight () vor roti camera stânga / dreapta atunci când butonul este apăsat.
Metodele TurnLeft () și TurnRight () obțin o valoare booleană. Dacă această valoare este adevărată, atunci măriți viteza de rotație. Dacă este fals, atunci opusul este redus (creând efectul de "frânare" a camerei). La sfarsit vom "intoarce" pe y (adica, am setat y pentru m_rot)
Modificați lista de modele
Vom scoate 300 de obiecte în poziții aleatorii. S-ar putea crea 300 de cazuri de plasă, dar în schimb vom încărca doar o singură plasă și vom crea 300 de caracteristici. Aceasta este, clasa ModelList va conține pozițiile a 300 de obiecte.
În Init () trecem numărul de obiecte. GetModelCount () va returna acest număr. GetData () va returna poziția obiectului situat la index.
Frustum Edit href = Edit
ConstructFrustum () va actualiza frustum. Metodele rămase vor efectua o verificare pentru a găsi punctul / cubul / sfera / dreptunghiul în frustum.
Actualizăm frustumul plan.
MyRender Edit
Aici indicăm faptul că clasa viitoare MyInput care răspunde de procesarea datelor de intrare va fi prietenul de redare. Apoi vom crea instanțe ale tuturor claselor necesare. Am creat obiectul ca StaticMesh. m_leftcam și m_rightcam vor fi utilizate de MyInput și vor transmite butonul de clic pe evenimente la aparatul de fotografiat.
De aici vom examina doar o singură piesă:
Mai intai construim (sau actualizam) frustum. 1000.0f este cea mai îndepărtată coordonată a z. De asemenea, transmitem matricea de proiecție și matricea de vizualizare obținută de la cameră. Apoi rulați buclă pentru a desena 300 de obiecte. Dar înainte de desen, verificăm și dacă există un obiect într-o zonă a unei piramide. Dacă da, tragem.
MyInput Edit
Ultima clasă. Apăsând tastele stânga și dreapta, vom roti camera.