Welkom!

Deel je kennis met anderen in deze Flashgemeenschap!
Gebruikersnaam:
Wachtwoord:
Wachtwoord opslaan?
Wachtwoord vergeten?

TUTORIALS / Flash 3D

3D Engine m.b.v. Actionscript
197 downloads, 19386 keer gelezen
(February 7, 2006)
Waardering: 0 keer gestemd 
 0 van de 5
 
inleiding stap .1. .2. .3. .4. .5. .6.  voorbeeld download

Stap 5

Rotatie

Maar met een stilstaande 3D kubus zijn we ook niet veel. Laten we de kubus de mogelijkheid geven om te roteren rond ofwel de x-,y- en z-as.
We gaan 3 nieuwe functies aanmaken ==> rotatieX : zal rond de x-as draaien, rotatieY: zal logischer wijs rond de y-as draaien, rotatieZ:...
Elke rotatie heeft zijn eigen formules.

Rotatie rond de x-as :

x' = x;
y' = cos(hoek) * y + sin(hoek) * z;
z' = -sin(hoek) * y + cos(hoek) * z;

Rotatie rond de y-as :

x' = cos(hoek) * x - sin(hoek) * z;
y' = y;
z' = sin(hoek) * x + cos(hoek) * z;

Rotatie rond de z-as :

x' = cos(hoek) * x + sin(hoek) * y;
y' = -sin(hoek) * x + cos(hoek) * y;
z' = z;

Waarbij de hoek gelijk is aan het aantal graden dat men moet draaien in radialen !
De drie hieruit volgende functies zijn dan :

function rotateX(angle:Number) {

     var cos = Math.cos(angle * DEGtoRAD);//cosinus van de hoek (in radialen) wordt berekend
     var sin = Math.sin(angle * DEGtoRAD);// hetzelfde voor de sinus
    // er wordt een for loop gestart die alle punten in de array zal doorlopen
     for (var i = 0; i < this.pointsArray.length; i++) {
         // x , y en z worden berekend aan de hand van de formules hierboven
         var x = this.pointsArray[i].x;
         var y = sin * this.pointsArray[i].z + cos * this.pointsArray[i].y;
         var z = -sin * this.pointsArray[i].y + cos * this.pointsArray[i].z;
         // x, y en z worden opgeslagen in de pointsArray a.h.v. een object
         this.pointsArray[i].x = x
         this.pointsArray[i].y = y
         this.pointsArray[i].z = z;
     }
}
// hetzelfde geldt voor de rotatie om y- en z-as. Alleen de forumules verschillen.

function rotateY(angle:Number) {

     var cos = Math.cos(angle * DEGtoRAD);
     var sin = Math.sin(angle * DEGtoRAD);

     for (var i = 0; i < this.pointsArray.length; i++) {
         var x = cos * this.pointsArray[i].x - sin * this.pointsArray[i].z;
         var y = this.pointsArray[i].y;
         var z = sin * this.pointsArray[i].x + cos * this.pointsArray[i].z;
         this.pointsArray[i].x = x
         this.pointsArray[i].y = y
         this.pointsArray[i].z = z;
     }
}


function rotateZ(angle:Number) {

     var cos = Math.cos(angle * DEGtoRAD);
     var sin = Math.sin(angle * DEGtoRAD);

     for (var i = 0; i < this.pointsArray.length; i++) {

         var x = cos * this.pointsArray[i].x + sin * this.pointsArray[i].y;
         var y = -sin * this.pointsArray[i].x + cos * this.pointsArray[i].y;
         var z = this.pointsArray[i].z;

         this.pointsArray[i].x = x
         this.pointsArray[i].y = y
         this.pointsArray[i].z = z;
     }
}

Zie de comments voor de uitleg van het actionscript. Plaats deze functies onder de draw functies in de Shape class !

>>> Ga naar stap 6
Geef hier je waardering: Matig 1 2 3 4 5 Geweldig!
  Waardering:
Error?? Floris V. (21 December 2007, 14:20)

RE: Error?? Baptist vandersmissen (21 December 2007, 14:56)

Ik heb inderdaad ook gemerkt dat als je op "ga naar stap 1" drukt, dan een foutmelding komt. Foute link blijkbaar, dat heb ik dan goed op tijd opgemerkt.. :\

Maar je kan altijd gewoon naar de eerste stap door vanboven in het menu op 1 te drukken.

Greetz


thom, link thom de hoog (09 May 2007, 09:57)

hoi,

bij mij doe de link het niet

zou iemand de tutorial willen sturen aan mij over email

thom_dehoog@hotmail.com

(html bestand alstublieft


voorbeeldje? Ate Visser (17 March 2007, 22:12)

Hoi Baptist,

Super scriptje! Ik heb 't gebruikt (en een beetje aangepast voor schaduw) en er een kaleidocycle ingezet... met nog wat ouwe flash-voorbeelden is 't best leuk geworden, vind ik... :D zie hier: http://www.prosac.nl/upload/kc4.html

Cheers,

a-t-1


download Niek van Oost (21 December 2006, 07:33)
Downloaden doet het niet! Link is niet goed!
1-5 | 6-7