Nybörjarguide till OpenGL: Bygg din egen CAD-program (12 / 14 steg)
Steg 11: Färdigställande: flera kuber och vyer och registrera klick
Algoritmen för skapa kuber är den bästa min hjärna kunde hosta ut, så om du har en bättre metod eller hitta eventuella brister i koden, behaga låta mig veta jag förbättrar min kod.
currentGeometry och objCount initieras till
currentGeometry = 1;
objCount = -3;
på varje gång du klickar på generera ny kub är båda tillväxten.
initiera är en matris av statiska element används för att styra if() uttalande som innehar variablerna för att lagra platsen och skalning historia tidigare objekt i scenen.
Första kuben
|| manipulera cube||
Slutet
Andra kub
|| lagra omformningarna av tidigare kuben [1] || //in en matris
|| manipulera cube||
|| Display kuber från array||
Slutet
Tredje kub
|| lagra omformningarna av tidigare kuben [2] ||
|| manipulera cube||
|| Display kuber från array||
Slutet
och så vidare...
Så lång historia kort, antalet kuber begränsas av storleken på matrisen. Så du vet behövs ett bättre system, ska kanske jag lista ut i nästa version.
Xposition Yposition Zposition lagra på koordinaten plats i 3D-rymden och X y Zsize lagra skalningen. Som ni kan se i början av varje ny kub skapelse, behövde jag en metod för att lagra dessa värden av tidigare kuben. så jag förklarade en statisk rad körs initiera [n] vilket gör här hela koden endast en gång i början av inrättandet av ett nytt objekt, spåras av variabeln objCount .
Som ni kan se skapandet av kuber är mycket skumma och påverka funktionen i programmet negativt.
Låt oss ta en titt på funktionen cube() :
Jag har tagit bort koden för ritning kuben för tydlighetens skull.
argument för funktionen ta i den 3D-koordinater som du vill rita kuben, storleken på kuben du vill vara och vilka vyport det är tänkt att gå i.
om jag passerar värdet 1, betyder detta att jag vill ha det i den huvudsakliga vyport (vyport B)
Om jag passerar värde 2 eller 3, betyder det jag vill ha kuben i en av de nedre två visningsportar för framsidan och vyn sida.
En sak att vara försiktig med är innan med glScalef (x, y, z), måste du använda en ny matris med glPushMatrix() eftersom skalning verksamhet tidigare kuben kan överföras till ett nybildat kub.
En sak jag glömde att nämna är att skapa knappen klicka händelser själv.
Steg 1: Placera knapparna i de önskade positionerna.
Steg 2: Utkast till koordinatmodell för varje enskild knapp på en bit papper.
Steg 3: Lägg till kod,
På varje klick i visningsområdet kontrolleras det om en knappbild klickas.
Steg 4: Anropa funktionen i de viktigaste loop, när en click-händelse registreras.
Om ett musklick är registrerat, kommer att det kontrollera om en klickar. I själva verket skulle kunna förbättras genom att först kontrollera vilken vyport click-händelsen inträffade, om det var den med knapparna, så kolla det enorma rutnätet av if() villkor.