Stap 11: Afronden: meerdere kubussen en weergaven en registreren klikken
Het algoritme voor het genereren van de kubussen de beste mijn hersenen kan hoesten is uit, dus als u een betere methode hebt of elke tekortkoming in de code zoeken, laat het me weten ik zal mijn code verbeteren.
currentGeometry en objCount worden geïnitialiseerd als
currentGeometry = 1;
objCount = -3;
beide zijn op elke klik van het genereren van nieuwe kubus increment.
initialiseren is een matrix van statische elementen gebruikt om te bepalen van de if() -instructie waarin de variabelen voor het opslaan van de locatie en geschiedenis van de vorige objecten schalen in de scene.
Eerste kubus
|| manipuleren van de cube||
Einde
Tweede kubus
|| opslaan van de transformaties van de vorige kubus [1] || //in een matrix
|| manipuleren van de cube||
|| Kubussen van de array|| weergeven
Einde
Derde kubus
|| opslaan van de transformaties van de vorige kubus [2] ||
|| manipuleren van de cube||
|| Kubussen van de weergave van de array||
Einde
enzovoort...
Dus lang verhaal kort, het aantal kubussen is beperkt door de grootte van de matrix. Zodat u dat een beter systeem nodig is weet, zal misschien ik het uitzoeken in de volgende versie.
XPosition Yposition zPositie winkel de coördinaat locatie in 3D-ruimte en Xsize Ysize Zsize slaan de schaal. Zoals u aan het begin van elke nieuwe creatie van de kubus zien kunt, had ik een methode voor het opslaan van deze waarden van de vorige kubus. dus heb ik verklaard een statische matrix initialiseren [n] waardoor deze hele code slechts eenmaal uitgevoerd aan het begin van de oprichting van een nieuw object, gevolgd door de objCount variabele.
Zoals je kunt zien wordt de creatie van kubussen is zeer dodgy en de werking van het programma negatief beïnvloeden.
Neem een blik bij de cube() -functie:
Ik heb de code voor het tekenen van de kubus duidelijkheidshalve verwijderd.
de argumenten van de functie nemen de 3D-coördinaten in die u tekenen van de kubus wilt, de grootte van de kubus die u wilt worden, en welke viewport is het bedoeld om te gaan in.
Als ik waarde 1doorgeeft, dat betekent dat ik wil het in de belangrijkste viewport (Viewport B)
Als ik de waarde 2 of 3doorgeeft, betekent dit dat ik wil de kubus in één van de onderste twee viewports voor de voorkant en het zijaanzicht.
Een ding om op zijn hoede voor is voordat u glScalef (x, y, z); zorg ervoor dat u een nieuwe matrix met behulp van glPushMatrix(), omdat de schaal van de operaties van de vorige kubus kan worden overgedragen aan een nieuwe kubus.
Één ding dat ik vergeten om te vermelden is het creëren van de knop klikgebeurtenissen zelf.
Stap 1: Plaats de knopen in de gewenste positie.
Step2: Ontwerp coördinaatruimte voor elke afzonderlijke knop op een stuk papier.
Stap3: Voeg de code,
Op elke klik in de viewport, zal het worden gecontroleerd als een afbeelding van de knop wordt geklikt.
Stap 4: De functie aanroepen in de hoofdlus, wanneer een click-gebeurtenis wordt geregistreerd.
Als een muisklik is geregistreerd, zal het controleren als een knop wordt geklikt. In feite, het kan worden verbeterd door eerst te controleren welke viewport de klikgebeurtenis zich heeft voorgedaan, als het was degene met de knoppen, controleer dan de enorme raster van if() voorwaarden.