Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-10-2003, 15:01   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2003
Ort: Dresden
Beiträge: 2
Question 3d-modelling mit flash actionscript

eure hilfe wäre wirklich sehr hilfreich und ich wäre aufs äußerste dankbar.

zur zeit arbeite ich in meiner ausbildung an einem projekt, in welchem ich innerhalb einer woche einen 3d-quader auf meinem bildschirm via 'actionscript' generieren soll. ich habe aber noch nie mit 'flash' geabreitet (in meinem fall 'mx'). abi hatte ich auch nicht, so daß ich mich gestern schon mal mit dem thema vektoren auseinandergesetzt habe. ich hätte nun folgende fragen:

wie erstelle ich mittels 'actionscript' variable laufzeit-grafiken?
wie kann ich diese transformieren?
ich besitze nur eine profireferenz, in welcher auf die einleitung in die grafische oberfläche von 'flash mx' vollkommen verzichtet wurde.

ich habe kein problem damit mich in dieses thema einzuarbeiten. jedoch fehlt mir der entscheidende ansatz und die zeit. mein projekt soll bis freitag, den 17.10. fertig sein.

Meine ICQ: 212335442
scientist ist offline   Mit Zitat antworten
Alt 14-10-2003, 15:03   #2 (permalink)
grau in grau
 
Benutzerbild von .:schek
 
Registriert seit: Nov 2002
Ort: wuppertal
Beiträge: 1.621
frag mal den h.storm aus diesem forum hier... der kann das
__________________
SCHEKALLA.DE
.:schek ist offline   Mit Zitat antworten
Alt 14-10-2003, 15:06   #3 (permalink)
Achim Math.PI
 
Benutzerbild von bloba
 
Registriert seit: Jul 2001
Ort: cool Colonia
Beiträge: 11.642
da hast du ja einen sehr eigenartigen ausbidler der recht komplexe prgrammierung von einem azubi mit tremindruck verlangt..
__________________
gruß bloba

2 x onkel² b_d
bloba ist offline   Mit Zitat antworten
Alt 14-10-2003, 15:28   #4 (permalink)
reXcel
 
Benutzerbild von Sören
 
Registriert seit: Aug 2002
Ort: Herford
Beiträge: 4.774
sorry. Kann es sein, dass die einfach sehen wollen wie "ihr" auf Stress reagiert???

Angenommen ich stell einen Mathestudenten ein, der 1 Semester vor seinem Diplom steht, und ich will ihn testen ob er was drauf hat, dann würde ich ihm folgende Aufgabe stellen:

Erstell innerhalb von 1 Woche einen 3D-Quarder. Die Ansicht soll perspektivisch korrekt sein und komplett in AS programmiert werden.

Dann mal los
Sören ist offline   Mit Zitat antworten
Alt 14-10-2003, 15:31   #5 (permalink)
alien
 
Benutzerbild von Smirgel
 
Registriert seit: May 2002
Ort: Colonia
Beiträge: 7.597
verschoben
__________________
bei fragen, fragen.
Smirgel ist offline   Mit Zitat antworten
Alt 14-10-2003, 15:43   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Zürich
Beiträge: 1.776
3d- engines gibbet ja jede menge im netz. und die sind wahrscheinlich auch nicht alle komplett "selbst geproggt". solange du die nicht im detail erklären musst, kannst du ja mal die hier nehmen: die engine ist vom saban ünlü, unserem nettrek. der hat aber vergessen, sein copyright reinzuhauen. anpassen musst du dann den bereich ab: hier bitte die objektdaten eingeben

ActionScript:
  1. // Hilfsmethoden
  2. // Konstante Rad - dieser Wert wird benötigt um die Winkel von Bogenmaß auf RAD zu berechnen´
  3. Math.RAD = Math.PI/180;
  4. // Sin Funktion für Grad Zahlen
  5. Math.sinD = function(degrees) {
  6.     return Math.sin(degrees*Math.RAD);
  7. };
  8. // Cos Funktion für Grad Zahlen
  9. Math.cosD = function(degrees) {
  10.     return Math.cos(degrees*Math.RAD);
  11. };
  12. // POINT
  13. // Die Point Klasse verwaltet die Punkte im 2D Raum
  14. function Point(x, y) {
  15.     this.x = x == undefined ? 0 : x;
  16.     this.y = y == undefined ? 0 : y;
  17. }
  18. // connectPoints verbindet den Punkt auf dem die Funktion angewandt  wurde
  19. // mit den Punkten die als Parameter (list := Array) übergeben wurden
  20. // targetMC ist die Instanz in der die Verbindung in form von Linien dargestellt werden soll
  21. Point.prototype.connectPoints = function(targetMC, list) {
  22.     var count = list.length;
  23.     targetMC.moveTo(this.x, this.y);
  24.     for (var i = 0; i<count; i++) {
  25.         targetMC.lineTo(list[i].x, list[i].y);
  26.     }
  27.     targetMC.lineTo(this.x, this.y);
  28. };
  29. // Point3D
  30. // Die Point3D Klasse verwaltet die Punkte im 3D Raum
  31. function Point3D(x, y, z) {
  32.     this.x = x == undefined ? 0 : x;
  33.     this.y = y == undefined ? 0 : y;
  34.     this.z = z == undefined ? 0 : z;
  35. }
  36. // move - Verschieb einen Punkt um einen Vektor und gibt einen neuen punkt zurück
  37. Point3D.prototype.moveNew = function(dx, dy, dz) {
  38.     return new Point3D(dx+this.x, dy+this.y, dz+this.z);
  39. };
  40. /* Die Methode getFlashCoord berechnet die 3D Koordinaten mittels Zentralprojektion  in 2D Koordinaten
  41. Für Flash um. Da Flash nicht kartesischen Koordinaten arbeitet wird das Vorzeichen
  42. der Y-Koordinate gewechselt.
  43. viewDistanz ist die Distanz zur Projektionsfläche. Dieser Wert wird benötigt und im Zweifel
  44. Mit dem defaultWert 300 angegebn
  45. Die Methode gibt ein neues Objekt der Klasse Point mit den entsprechenden Koordinaten zurück. */
  46. Point3D.prototype.getFlashCoord = function(viewDistanz) {
  47.     // get Perspective
  48.     viewDistanz = viewDistanz == undefined ? 500 : viewDistanz;
  49.     var div = this.z+viewDistanz;
  50.     // division durch mit null ist nicht möglich
  51.     div = div == 0 ? .0000000001 : div;
  52.     // perspektivenfaktor
  53.     perspective = viewDistanz/div;
  54.     return new Point(this.x*perspective, this.y*-perspective);
  55. };
  56. // Die Methode dient dem Debugging und gibt lediglich die aktuellen Werte eines Punktes zurück.
  57. Point3D.prototype.printPoint3D = function() {
  58.     trace("x:= "+this.x);
  59.     trace("y:= "+this.y);
  60.     trace("z:= "+this.z);
  61. };
  62. // rotX - rotiert den Punkt um die X-Achse. Als Parameter wird der Rotationswinkel
  63. // (degrees) erwartet
  64. Point3D.prototype.rotX = function(degrees) {
  65.     var ca = Math.cosD(degrees);
  66.     var sa = Math.sinD(degrees);
  67.     var tempY = this.y*ca-this.z*sa;
  68.     var tempZ = this.y*sa+this.z*ca;
  69.     this.y = tempY;
  70.     this.z = tempZ;
  71. };
  72. // rotY - rotiert den Punkt um die Y-Achse. Als Parameter wird der Rotationswinkel
  73. // (degrees) erwartet
  74. Point3D.prototype.rotY = function(degrees) {
  75.     var ca = Math.cosD(degrees);
  76.     var sa = Math.sinD(degrees);
  77.     var tempX = this.x*ca+this.z*sa;
  78.     var tempZ = this.z*ca-this.x*sa;
  79.     this.x = tempX;
  80.     this.z = tempZ;
  81. };
  82. // rotY - rotiert den Punkt um die Y-Achse. Als Parameter wird der Rotationswinkel
  83. // (degrees) erwartet
  84. Point3D.prototype.rotZ = function(degrees) {
  85.     var ca = Math.cosD(degrees);
  86.     var sa = Math.sinD(degrees);
  87.     var tempX = this.x*ca-this.y*sa;
  88.     var tempY = this.x*sa+this.y*ca;
  89.     this.x = tempX;
  90.     this.y = tempY;
  91. };
  92. // Klasse Object3d verwaltet ein 3D Objekt
  93. function Object3d() {
  94.     this.areas = new Array();
  95.     this.points = new Array();
  96. }
  97. // Verwaltet einzelne (nicht einer Fläche angehörigen) Punkte der Klasse Point3D
  98. Object3d.prototype.addPoint = function(point) {
  99.     var pos = undefined;
  100.     for (var i in this.points) {
  101.         // kontrolliere ob der Punkt bereits vorhanden ist
  102.         if (this.points[i].x == point.x && this.points[i].y == point.y && this.points[i].z == point.z) {
  103.             pos = i;
  104.         }
  105.     }
  106.     // wenn der Punkt noch nicht vorhanden ist füge ihn hinzu
  107.     if (pos == undefined) {
  108.         this.points.push(point);
  109.         pos = this.points.length-1;
  110.     }
  111.     // gebe den Array Index des Punktes zurück
  112.     return pos;
  113. };
  114. /* addArea verwaltet Flächen eines 3D Objektes und erwartet daher als Parameter eine Liste von
  115. Punkten (der Klasse Point3D) die eine Fläche definieren */
  116. Object3d.prototype.addArea = function() {
  117.     var area = new Array();
  118.     var count = arguments.length;
  119.     for (var i = 0; i<count; i++) {
  120.         var pointIndex = this.addPoint(arguments[i]);
  121.         area.push(pointIndex);
  122.     }
  123.     this.areas.push(area);
  124. };
  125. Object3d.prototype.rot = function(axis, degrees) {
  126.     for (var i in this.points) {
  127.         var currentPoint = this.points[i];
  128.         var fct = "rot"+axis.toUpperCase();
  129.         currentPoint[fct](degrees);
  130.     }
  131. };
  132. // rotX rotiert das gesamte 3D Objekt um die X-Achse bezüglich des angegebenen Rotationswinkels
  133. Object3d.prototype.rotX = function(degrees) {
  134.     this.rot("x", degrees);
  135. };
  136. // rotY rotiert das gesamte 3D Objekt um die Y-Achse bezüglich des angegebenen Rotationswinkels
  137. Object3d.prototype.rotY = function(degrees) {
  138.     this.rot("Y", degrees);
  139. };
  140. Object3d.prototype.rotZ = function(degrees) {
  141.     this.rot("Z", degrees);
  142. };
  143. // Zeichne die Flächen
  144. Object3d.prototype.drawAreas = function(target) {
  145.     for (var i in this.areas) {
  146.         var currentArea = this.areas[i];
  147.         var areaPoints = new Array();
  148.         for (var j in currentArea) {
  149.             var pointIndex = currentArea[j];
  150.             var point = this.points[pointIndex];
  151.             var flashPoint = point.getFlashCoord();
  152.             areaPoints.push(flashPoint);
  153.         }
  154.         var startPoint = areaPoints.shift();
  155.         startPoint.connectPoints(target, areaPoints);
  156.     }
  157. };
  158. this.createEmptyMovieClip("haus", 1);
  159. haus._x = 400;
  160. haus._y = 300;
  161. // hier bitte die Objektdaten eingeben
  162. haus.a = new Point3D(0, 0, -50);
  163. //
  164. haus.b = new Point3D(-100, -100, 50);
  165. haus.c = new Point3D(100, -100, 50);
  166. haus.d = new Point3D(100, 100, 50);
  167. haus.e = new Point3D(-100, 100, 50);
  168. //
  169. haus.a1 = new Point3D(0, 0, -40);
  170. //
  171. haus.b1 = new Point3D(-90, -90, 50);
  172. haus.c1 = new Point3D(90, -90, 50);
  173. haus.d1 = new Point3D(90, 90, 50);
  174. haus.e1 = new Point3D(-90, 90, 50);
  175. //
  176. haus.f = new Point3D(-80, -80, 50);
  177. haus.g = new Point3D(80, -80, 50);
  178. haus.h = new Point3D(80, 80, 50);
  179. haus.i = new Point3D(-80, 80, 50);
  180. //
  181. haus.j = new Point3D(-80, -80, 150);
  182. haus.k = new Point3D(80, -80, 150);
  183. haus.l = new Point3D(80, 80, 150);
  184. haus.m = new Point3D(-80, 80, 150);
  185. //
  186. haus.f1 = new Point3D(-78, -78, 50);
  187. haus.g1 = new Point3D(78, -78, 50);
  188. haus.h1 = new Point3D(78, 78, 50);
  189. haus.i1 = new Point3D(-78, 78, 50);
  190. //
  191. haus.j1 = new Point3D(-78, -78, 150);
  192. haus.k1 = new Point3D(78, -78, 150);
  193. haus.l1 = new Point3D(78, 78, 150);
  194. haus.m1 = new Point3D(-78, 78, 150);
  195. //
  196. haus.cube = new Object3d();
  197. haus.cube.addArea(haus.a, haus.b, haus.c);
  198. haus.cube.addArea(haus.a, haus.c, haus.d);
  199. haus.cube.addArea(haus.a, haus.d, haus.e);
  200. haus.cube.addArea(haus.a, haus.e, haus.b);
  201. haus.cube.addArea(haus.a1, haus.b1, haus.c1);
  202. haus.cube.addArea(haus.a1, haus.c1, haus.d1);
  203. haus.cube.addArea(haus.a1, haus.d1, haus.e1);
  204. haus.cube.addArea(haus.a1, haus.e1, haus.b1);
  205. haus.cube.addArea(haus.f, haus.g, haus.k, haus.j);
  206. haus.cube.addArea(haus.h, haus.g, haus.k, haus.l);
  207. haus.cube.addArea(haus.h, haus.i, haus.m, haus.l);
  208. haus.cube.addArea(haus.i, haus.f, haus.j, haus.m);
  209. haus.cube.addArea(haus.f1, haus.g1, haus.k1, haus.j1);
  210. haus.cube.addArea(haus.h1, haus.g1, haus.k1, haus.l1);
  211. haus.cube.addArea(haus.h1, haus.i1, haus.m1, haus.l1);
  212. haus.cube.addArea(haus.i1, haus.f1, haus.j1, haus.m1);
  213. // Rotationswinkel
  214. haus.degrees = 5;
  215. this.haus.onEnterFrame = function() {
  216.     if (Key.isDown(Key.UP)) {
  217.         this.cube.rotX(this.degrees);
  218.     }
  219.     if (Key.isDown(Key.DOWN)) {
  220.         this.cube.rotX(-this.degrees);
  221.     }
  222.     if (Key.isDown(Key.RIGHT)) {
  223.         this.cube.rotY(this.degrees);
  224.     }
  225.     if (Key.isDown(Key.LEFT)) {
  226.         this.cube.rotY(-this.degrees);
  227.     }
  228.     if (Key.isDown(Key.PGUP)) {
  229.         this.cube.rotZ(this.degrees);
  230.     }
  231.     if (Key.isDown(Key.PGDN)) {
  232.         this.cube.rotZ(-this.degrees);
  233.     }
  234.     this.clear();
  235.     this.lineStyle(.25);
  236.     this.cube.drawAreas(this);
  237. };
fresh ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele