Ik ben bezig met soort 3d-versie van pong (er is ooit een flashspelletje geweest dat hetzelfde deed, heb het even niet bij de hand). Nu heb ik voor het balletje de volgende struct:
Zoals je ziet heeft het balletje een position en een direction Vector. Iedere gametick wordt de direction opgeteld bij de position zodat het balletje beweegt. Vervolgens wordt xx en yy gevuld met de geprojecteerde schermcoordinaten van de bal (het midden van de bal, de int pixelsize heeft de breedte van de bal aan, maar dat is in dit geval niet belangrijk).
De bal heeft een kubusvormige ruimte waarin deze mag bewegen. Het controleren of de bal buiten die kubus komt is eenvoudig:
Nu wil ik als het balletje tegen een muur aankomt, het balletje laten stuiteren in de andere richting (dus gewoon hoek van inval = hoek waarmee ie van de muur weggaat). In 2D weet ik wel hoe dat werkt, maar hoe doe je zoiets in 3D? Ik zit nu in de 4e en we hebben nog niet zoiets gehad bij wiskunde, en het zal vast heel simpel zijn, maar kan iemand me dat even (kort) uitleggen? Het gaat er dus om de direction-vector aan te passen als je een muur raakt met het balletje
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| struct Vector { Vector(float ax,float ay,float az) { x = ax; y = ay; z = az; } Vector() { x = y = z = 0; } float x,y,z; }; struct Ball { Ball() { } int xx,yy; Vector direction; Vector position; int speed; int pixelsize; }; |
Zoals je ziet heeft het balletje een position en een direction Vector. Iedere gametick wordt de direction opgeteld bij de position zodat het balletje beweegt. Vervolgens wordt xx en yy gevuld met de geprojecteerde schermcoordinaten van de bal (het midden van de bal, de int pixelsize heeft de breedte van de bal aan, maar dat is in dit geval niet belangrijk).
De bal heeft een kubusvormige ruimte waarin deze mag bewegen. Het controleren of de bal buiten die kubus komt is eenvoudig:
C++:
1
2
3
4
5
6
7
| if(ball.position.x<-1.0f) { // oeps, verder naar links dan de linkse muur :o } if(ball.position.x>1.0f) { // oeps, verder naar rechts dan de rechtse muur :o } |
Nu wil ik als het balletje tegen een muur aankomt, het balletje laten stuiteren in de andere richting (dus gewoon hoek van inval = hoek waarmee ie van de muur weggaat). In 2D weet ik wel hoe dat werkt, maar hoe doe je zoiets in 3D? Ik zit nu in de 4e en we hebben nog niet zoiets gehad bij wiskunde, en het zal vast heel simpel zijn, maar kan iemand me dat even (kort) uitleggen? Het gaat er dus om de direction-vector aan te passen als je een muur raakt met het balletje