Programarea cu ajutorul rotației directe a obiectelor - produse software

Pentru a roti obiecte (sau aparat de fotografiat), necesită o bază matematică grave, prin care se va calcula coordonatele tuturor obiectelor de ieșire la un ecran de computer „plat“. Vreau doar să spun că nu trebuie să vă fie frică, toate bibliotecile matematice sunt deja scrise pentru noi, le vom folosi doar. În orice caz, nu trebuie să săriți următorul text, indiferent de nivelul de cunoaștere al matematicii.







1. Matrice, concepte generale

Ce sunt matricele? Ne reamintim matematica superioară: matricea ¬ este un set de numere cu o dimensiune cunoscută anterior de rânduri și coloane.

Pot fi adăugate matrice, înmulțite cu un număr, înmulțite între ele și multe alte lucruri interesante, însă în acest moment vom sări, deoarece Este descrisă suficient de detaliat în orice manual de matematică superioară (manualele pot fi căutate pe google.com). Vom folosi matrici ca programatori, noi le umple și spune-le să facă toate calculele produc biblioteca matematica Direct3D, deci trebuie să includă în modulul antet proiect d3dx9.h (biblioteca d3dx9.lib).

Sarcina noastră este să creăm un obiect, adică umple matricea cu coordonatele vârfurilor obiectului. Fiecare vârf este un vector (X, Y, Z) în spațiul tridimensional. Acum, pentru a face un fel de acțiune, trebuie să ne ocupăm locul (de exemplu, matricea) și multiplicată printr-o matrice de transformare, rezultatul acestei operațiuni - noul obiect dat sub forma unei matrice.

În Direct3D, sunt definite și utilizate trei matrici principale: matricea mondială, matricea de vizualizare și matricea de proiecție. Să le analizăm mai detaliat.

Matricea Lumii (Matricea Mondială) - vă permite să rotiți, transformați și să scalați obiectul și să atribuiți fiecăruia dintre obiecte cu sistemul său local de coordonate.

Funcții pentru lucrul cu matricea mondială:

  • D3DXMatrixRotationX (), D3DXMatrixRotationY (), D3DXMatrixRotationZ () - punctul de rotație în raport cu o axă;
  • D3DXMatrixTranslation () - mutați punctul în altă poziție;
  • Scalare D3DXMatrixScale () -.

    Proiectie Matrix - creează o proiecție a scenei 3D pe ecranul monitorului. Cu ajutorul său, obiectul este transformat, originea este transferată în partea din față, iar planurile de tăiere față și spate sunt determinate.







    Umplerea matricei și de a face o conversie, creați o scenă tridimensională, care au posibilitatea de a muta, roti, mări, șterge și efectua alte acțiuni pe obiecte, în funcție de nevoile tale.

    2. Crearea unui obiect

    Adăugați un fișier antet și o bibliotecă pentru a utiliza funcțiile de matrice

    De asemenea, avem nevoie de funcții standard pentru a lucra cu timpul, astfel încât să conectăm fișierul antetului corespunzător:

    Să schimbăm formatul reprezentării vârfurilor:

    Vom folosi un tip de vârf neconvertit, deoarece vom face transformări pe matrice.
    Schimbați codul funcției InitDirectX (). În această funcție, trebuie să adăugați setarea a două moduri de afișare.
    Opriți modul de tăiere astfel încât atunci când rotiți puteți vedea toate laturile obiectului:

    În momentul de față nu folosim iluminare, ci vopsea vârfurile într-o anumită culoare, opriți astfel iluminatul:

    Simplificați-ne inima introducând-o sub forma a trei triunghiuri. Vom folosi sistemul local de coordonate.

    Programarea cu ajutorul rotației directe a obiectelor - produse software

    3. Crearea matricelor de transformare

    Să scriem funcția SetupMatrix () în fișierul render.h în care vor avea loc toate acțiunile din matrice.

  • D3DXMATRIX MatrixWorld; - matricea mondială
  • D3DXMATRIX MatrixView; este o matrice a formei
  • D3DXMATRIX MatrixProjection; - matrice de proiecție
    Setarea matricei mondiale

    Pentru ca obiectul să se rotească, este necesar să se obțină timpul sistemului și fiecare "instant" pentru a schimba unghiul dintre sistemul de coordonate local și sistemul de coordonate mondial. Vom roti în jurul axei X, deci vom folosi funcția D3DXMatrixRotationX. După calcularea matricei mondiale, trebuie să aplicați valorile sale folosind funcția SetTransform:

    Setarea unei matrice de vizualizare

    Setați camera în locul potrivit și îndreptați-o spre obiect

  • D3DXMatrixLookAtLH (MatrixView, - rezultatul executării funcției
  • D3DXVECTOR3 (0.0f, 0.0f, -8.0f), - punctul în care se află camera
  • D3DXVECTOR3 (0.0f, 0.0f, 0.0f), este punctul în care ne uităm
  • D3DXVECTOR3 (0.0f, 1.0f, 0.0f)); - partea de sus a obiectului

    După calcul, este necesar să se aplice valorile obținute:

    Setarea matricei de proiecție

    D3DXMatrixPerspectiveFovLH (- funcție de calcul al matricei de proiecție MatrixProjection, - rezultatul calculului D3DX_PI / 4, - câmpul vizual în direcția axei Y (în radiani) 1.0f - compresiune koefitsient 1.0f, - scena 100.0f Front tranșate); - întreruperea scenei de fundal

    După calcul, este necesar să se aplice valorile obținute:

    Plasăm apelul funcției de calcul al matricei în funcția de redare a scenei RenderScene ().
    Fugiți pe compilație și urmăriți rotația :)

    Descărcări







    Trimiteți-le prietenilor: