Cum pot adăuga dinamic vârfuri în OpenGl?

De exemplu, dacă vreau să fac ceva de genul:

createTriangle(1.0,1.0);//Create triangle at (1,1)

Cum aș face asta în cod? Sunt confortabil hardcoding acest lucru, dar dacă vreau să o fac dinamic cum să le lega și umple tampon meu și apoi legați-l pe ecran? Pot adăuga vârfuri la un tampon mare? Dar cum fac diferite transformări pe obiecte diferite?

Editare: Pentru a clarifica, întreb cum creez nodurile și apoi le introduc în conducta grafică.

0
@Dupadupa Ceea ce încerc să fac este să creez obiecte când și unde le vreau, să fac un joc.
adăugat autor Adam Ashwal, sursa
@ Radek'daknok'Slupik Știți unde găsesc în această carte informațiile relevante pentru întrebarea mea?
adăugat autor Adam Ashwal, sursa
vrei să spui lui VBO?
adăugat autor therealszaka, sursa
Vă sugerez să nu vă faceți griji cu privire la aceste probleme. Dacă doriți să desenați triunghi, doar trageți-l, nu faceți super-uber-arhitecturi dacă nu aveți nevoie. Oricum, puteți crea un buffer cu acest triunghi, id de magazin, și apoi, cu shader, traduceți-l.
adăugat autor therealszaka, sursa
Tampoanele mari nu sunt atât de bune, după cum se poate gândi. Nu cunosc detaliile, dar problema este aceeași ca și în HDD/RAM și fragmentare, dar pe placa grafică.
adăugat autor therealszaka, sursa

2 răspunsuri

Probabil nu ar trebui să aveți un tampon mare, ci mai degrabă mai multe tampoane care împărtășesc lucruri comune, cum ar fi shaders, transformări etc. Menținerea numărului de tampoane în jos este, totuși, o modalitate bună de a face grafica să ruleze mai repede.

0
adăugat
Hm, dar permiteți-mi să creez 3 triunghiuri și să le adaug pe toate în același buffer. Nu aș putea schimba poziția fiecărui triunghi în mod independent?
adăugat autor Adam Ashwal, sursa
Ei bine, nu - și da. Fiecare lot de tragere pe care l-ai pus pentru a face (cel mai probabil, fiecare tampon de vertex), va fi desenat ca o plasă de către un mecanism (bandă triunghi, triunghi fan etc -google it). Fiecare poziție vertex, fiecare poziție de vârf normală, texturi de culori etc. pot fi modificate individual cu un shader Vertex (pentru a face rotația obiectului, scalarea, efecte, texturi, iluminare etc.). Shaderul de vertex nu este într-adevăr un nivel ridicat în sensul că puteți scrie o mulțime de C ++ pentru a modifica triunghiul. Parametrii pot fi trecuți la umbra.
adăugat autor Petter Nordlander, sursa

Dacă vrei să faci un joc, fă-o doar :) Rezolvarea problemelor, fără a avea unul, este o problemă! Ați planificat arhitectura și ați avut ideea de a reprezenta obiecte pe scena și componentele acesteia (fizică, grafică)? Dacă da, probabil că aveți loc în cod, unde inițializați scena (așa că lăsați să creeze tampoane acolo) și lăsați-o pe "motor" (sau doar acolo unde aveți principal/render/animate/loop) să le atrageți pe toate. În funcție de obiecte și de numărul de modele/3d/2d pe care le aveți, puteți stoca id-ul tamponului în obiect (care este în curs de desenare și obiectul "motor" al buclei de render se leagă de tampon) sau pur și simplu stoca în motor ' obiect.

Totul depinde de ce joc faceți și de problemele la care vă confruntați (de exemplu, în acest caz puteți crea un manager de obiecte mai mare, cu grupuri de obiecte etc.). Întrebarea este: aveți nevoie de aceste ? Probabil că ar face mai multe bug-uri, și va dura mai mult timp pentru a păstra codul, iar după aceea va trebui să scrieți din nou acest modul.) Nu faceți structuri de care nu aveți nevoie.

O regulă vă poate ghida: "Faceți lucrurile cât mai simple, dar nu și mai simple". Și faceți jocuri, nu arhitecturi pe care le doriți, doar pentru că UDK are unul.

0
adăugat
M-ai gandit, daca vreau sa fac obiecte individuale, pot transforma vertexele lor inainte de a le trece la shaderul de vertex? M-am luptat cu cum să integrez crearea de vârfuri și apoi introducerea lor în conducta grafică.
adăugat autor Adam Ashwal, sursa