Welkom!

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

TUTORIALS / Flash 3D

3D Engine II
366 downloads, 31795 keer gelezen
(March 18, 2006)
Waardering: 1 keer gestemd 
 5 van de 5
 
inleiding     stap .1. .2. .3. .4. .5. .6.      voorbeeld download

Stap 4

Tekenen

Aangezien we nu elke mogelijke vorm kunnen tekenen moeten we onze draw functie iets dynamischer maken zodat niet elke keer een kubus wordt getekend.
Zet deze functie onder de set2Dto3D functie in de Shape.as

private function draw(points:Array, index:Number):Void {
     //
     var lineT:Number = this.surfaceArray[index].lineT;
     var lineC:Number = this.surfaceArray[index].lineC;
     var lineA:Number = this.surfaceArray[index].lineA;
     //
     var fillC:Number = this.surfaceArray[index].fillC;
     var fillA:Number = this.surfaceArray[index].fillA;
     //
     this.surfaceArray[index].mc.clear();
     //
     this.surfaceArray[index].mc.lineStyle(lineT, lineC, lineA);
     this.surfaceArray[index].mc.beginFill(fillC, fillA);
     //
     this.surfaceArray[index].mc.moveTo(points[0].x, points[0].y);
     //
     for (var i:Number = 0; i < surfaceArray[index].points.length; i++) {
         this.surfaceArray[index].mc.lineTo(points[i].x, points[i].y);
     }
     this.surfaceArray[index].mc.lineTo(points[0].x, points[0].y);
     //
     this.surfaceArray[index].mc.endFill();
     //
     var totalDepth = this.pointsArray[this.surfaceArray[index].points[0]].z;
     for (var j:Number = 1; j < this.surfaceArray[index].points.length; j++) {
         totalDepth += this.pointsArray[this.surfaceArray[index].points[j]].z;
     }
     totalDepth = 1000 + ((totalDepth / this.surfaceArray[index].points.length) * 10) + index;
     this.surfaceArray[index].mc.swapDepths(Math.floor(totalDepth));
}

Zoals je ziet krijgt de functie 2 parameters mee. De points Array logischerwijs. En ook de index. De index zegt de index van het vlak in de
surfaceArray. Hierna wordt de lijnkleur, -dikte, -alpha en ook fillkleur en -alpha uit de array gehaald.
We beginnen dan met de movieclip waar de lijnen in zijn opgeslagen te "clearen" (alle lijnen erin worden verwijderd)
De movieclip is ook opgeslagen in de surfaceArray (zie stap 2)
Vervolgens wordt de lineStyle vastgelegd en wordt ook de beginFill gestart.

En nu komt het. Het beginpunt wordt vastgelegd en is logischerwijs het allereerste punt. Het volgende punt wordt via een for loop
in de points array gezocht. Zo wordt elk punt met elkaar verbonden. Daarna wordt om de figuur af te sluiten terug naar het beginpunt gegaan.
En dan de endFill() om aan te tonen dat hij moet stoppen met deze kleur te vullen.

Nu moet de diepte van het vlak worden vastgelegd. Anders krijgt elk vlak een opeenvolgende diepte en dat zou niet correct zijn.
We moeten ervoor zorgen dat de vlakken die bovenop liggen de grootste z of diepte krijgen. Dit doen we door eerst alle dieptes van de punten in het
vlak op te tellen en te delen door het totale aantal. Het gemiddelde berekenen met andere woorden.
Dit wordt dan maal 10 gedaan en + 1000 om er voor te zorgen dat ze de grootste waarde in de flash movie krijgen. En tenslotte zie je dat er nog "+index" bij staat.
Dit dient ervoor dat wanneer verschillende vlakken dezelfde diepte hebben. Wanneer ze m.a.w. op dezelfde hoogte liggen niet constant zouden beginnen te flikkeren.
Daarom zorgen we ervoor dat wanneer 2 vlakken dezelfde diepte zouden krijgen dat er toch nog een waarde bij komt die er voor zorgt dat er NOOIT twee dezelfde dieptes
berekent worden. Op de laatste lijn krijgt de mc de berekende diepte.

>>> Ga naar stap 5
Geef hier je waardering: Matig 1 2 3 4 5 Geweldig!
  Waardering:
meerdere objecten eric lugtigheid (31 August 2010, 13:28)
Hallo, kun je ook gebruiken voor meerdere objecten? Met hartelijke groet, Eric Lugtigheid Studio Lugtigheid
RE: meerdere objecten Baptist vandersmissen (03 September 2010, 11:19)
Volgens mij is dat geen enkel probleem. Gewoon meerdere objecten aanmaken van de klasse shape en deze objecten de juist gegevens meegeven zoals weergegeven in de laatste stap. (Het is wel al heel lang geleden dat ik dit nog geschreven/bekeken heb. Dus ik kan er naast zitten. Groetjes, Baptist
3D engine (drawing API) Floris V. (06 March 2008, 15:50)

Hoi,

Er zijn er meer voor Flash MX die op deze manier werken. Ik heb me er een beetje in gespecialiseerd. Helaas werken de beste (met textures, etc.) niet in Flash MX.

Sandy 3d, Away 3d, Papervision 3d, allemaal voor Flash CS3.

Deze werkt gewoon met Drawing API en is zo vaak op Google te vinden (of varianten ervan). Maar wel leuk dat je je eigen versie hebt gemaakt...

Waar je vooral eens op moet zoeken op google is mx3d of 3d Flash Studio of 9elements 3d als je een Flash MX versie hebt of anders met CS3 zou ik vooral eens Sandy 3d, Papervision 3d etc proberen dat is echt cool!

Maar goed ik weet hier meer van ik heb urenlang op internet gesurfd en gekeken naar voorbeelden, etc. voor 3d in Flash MX en andere versies, dus als je iets wil weten mail me dan. En mijn conclusie is trouwens: 3d kan wel in Flash, maar je kunt er beter andere programma's voor gebruiken (zoals Adobe Director).

Groet,

Floris


hoe maak je ... Jaimy voorhaam (20 July 2007, 15:10)

haaj

wie weet hoe je een spel maakt zoals habbo hotel ?

maail me trug !!


shape.as Ate Visser (18 March 2007, 02:34)

En de Shape.as (waar de schaduw in staat) staat hier, als Shape.txt:

http://www.prosac.nl/upload/Shape.txt

Ate


1-5 | 6-9