Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-09-2003, 13:48   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Aachen
Beiträge: 1.081
3d fläschen tiefen problem

hi,


bastel grad an einem kleinem 3d engime.

Problem ist, das ich nicht wirklich weiß, wie ich meine Fläschen
so sortiere, das die Vorderen zuletzt gezeichnet werden, damit
sie die dahinterliegenden Verdecken.

addierte Z Koordinaten aller Punkte der Fläschen miteinander
Vergleichen is nix.
Voderste z Koordinate vergleichen bringt auch nix.

Wie macht man sowas ?
__________________
G.M. | working @ source lounge
georgexp ist offline   Mit Zitat antworten
Alt 06-09-2003, 14:44   #2 (permalink)
Revived @ Sunday
 
Benutzerbild von MacEvil
 
Registriert seit: Apr 2003
Ort: Nowhereland
Beiträge: 3.244
Hi,
versteht ich dich falsch... ? :
nen EmptyMc machen und da einfach die tiefe bestimmen.
MacEvil ist offline   Mit Zitat antworten
Alt 06-09-2003, 14:59   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Aachen
Beiträge: 1.081
Zitat:
versteht ich dich falsch... ? :
ja.



Die Fläschen werden mittels draw API gezeichnet.

Vorher soll so sortiert werden, das die hinteren Fläschen
zuerst gezeichnet werden.

Problem wird im Anhang deutlich.
Angehängte Dateien
Dateityp: zip 3d.zip (1,7 KB, 18x aufgerufen)
__________________
G.M. | working @ source lounge
georgexp ist offline   Mit Zitat antworten
Alt 06-09-2003, 15:12   #4 (permalink)
...
 
Registriert seit: Oct 2002
Ort: Nürnberg
Beiträge: 3.611
wie ist denn der aufbau der engine, oder post doch mal einen kl. codeausschnitt o.ae
thorben.schmitt ist offline   Mit Zitat antworten
Alt 06-09-2003, 15:15   #5 (permalink)
Revived @ Sunday
 
Benutzerbild von MacEvil
 
Registriert seit: Apr 2003
Ort: Nowhereland
Beiträge: 3.244
Achso.
Hab gedacht du hast per draw api irgendwelche "Flaschen" gezeichnet die sich stapeln
MacEvil ist offline   Mit Zitat antworten
Alt 06-09-2003, 15:31   #6 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Aachen
Beiträge: 1.081
zur engime :

ActionScript:
  1. // Def. Punkte
  2. p1 = { px: (xc-(breite/2)), py: (yc-(hoehe/2)), pz: (zc-(tiefe/2))}
  3. //...
  4. // Def. Fläschen
  5. f1 = { p1: p1, p2: p2, p3: p6, p4: p5, rgb: 0xff84cc } // Eine Fläschen mit 4 ankerpunkten
  6. f = [ f1, f2, f3 , f4, f5, f6 ] // alle Fläschen.
  7.  
  8. // rotation
  9. rotateX = function () {
  10.     for (u=1; u<=8; u++) {
  11.         tz = this["p"+u].pz
  12.         ty = this["p"+u].py
  13.         this["p"+u].pz = tz * Math.cos((rotationX) * (Math.PI/180) ) - ty*Math.sin((rotationX)*(Math.PI/180))
  14.         this["p"+u].py = ty * Math.cos((rotationX) * (Math.PI/180) ) + tz*Math.sin((rotationX)*(Math.PI/180))
  15.     }
  16. }
  17. // Zeichnen :
  18. setShapes = function ( ) {
  19.     reihe = bubblesort(f)
  20.     clear()
  21.     for (n=reihe.length; n>=0; n--) {
  22.         ziel=reihe[n]
  23.         with ( this ) {
  24.             lineStyle(undefined,0x000000,100)
  25.             beginFill(ziel.rgb,100)
  26.             moveTo(ziel.p1.x,ziel.p1.y)
  27.             lineTo(ziel.p2.x,ziel.p2.y)
  28.             lineTo(ziel.p3.x,ziel.p3.y)
  29.             lineTo(ziel.p4.x,ziel.p4.y)
  30.             endFill()
  31.         }
  32.     }
  33.     delete reihe
  34.     delete ziel
  35.     delete n
  36. }
  37. // bubble sort
  38. function bubblesort(myarray) {
  39.   for (j=myarray.length-2; j>=0; j--) {
  40.     for (i=0; i<=j; i++) {
  41.         //w1 = ersteZ ( myarray[i].p1, myarray[i].p2, myarray[i].p3, myarray[i].p4 )
  42.         //w2 = ersteZ ( myarray[i+1].p1, myarray[i+1].p2, myarray[i+1].p3, myarray[i+1].p4 )
  43.         w1 = ( myarray[i].p1.pz + myarray[i].p2.pz + myarray[i].p3.pz + myarray[i].p4.pz ) /4
  44.         w2 = ( myarray[i+1].p1.pz + myarray[i+1].p2.pz + myarray[i+1].p3.pz + myarray[i+1].p4.pz ) / 4
  45.         if(w1 < w2) {
  46.             temp=myarray[i]
  47.             myarray[i]=myarray[i+1]
  48.             myarray[i+1]=temp
  49.        }
  50.     }
  51.   }
  52.   return(myarray)
  53. }

jetzt haste ne Menge Code, und doch nix davon...

bubble sortiert hier nach dem Mittelwert der z Koor. der vier Ankerpunkte.

das is ja wohl nix

Wie geht man denn da im allgemeinen vor ?
__________________
G.M. | working @ source lounge

Geändert von georgexp (06-09-2003 um 15:33 Uhr)
georgexp ist offline   Mit Zitat antworten
Alt 07-09-2003, 20:44   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Aachen
Beiträge: 1.081
hmm...niemand ne Idee ?
__________________
G.M. | working @ source lounge
georgexp ist offline   Mit Zitat antworten
Alt 07-09-2003, 22:37   #8 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Ort: Vorm PC
Beiträge: 1.583
Im OOP gab's doch seit längerem einen Thread von rotze, da steht auch wie man sortiert.

Vielleicht hilft dir auch das Wort "Z-Ordering" weiter.


Gnut
Gnut ist offline   Mit Zitat antworten
Alt 07-09-2003, 22:58   #9 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Ort: Vorm PC
Beiträge: 1.583
War wohl ein schlechter Tipp, den Thread gibt's nicht mehr. Wenn man aber nach Z-Ordering googlet findet man das hier: http://download.macromedia.com/pub/d...amurai_ch2.pdf

Bei deinem Fall gilt auch diese BackFace-Formel einer Fläche:

px = Punkte einer Fläche
sx und sy = Screenkoordinaten der Punkte

b = (p2.sx-p1.sx)*(p3.sy-p1.sy)-(p2.sy-p1.sy)*(p3.sx-p1.sx);

wenn b < 0, dann Fläche zeichnen, sonst nicht.



Gnut
Gnut ist offline   Mit Zitat antworten
Alt 08-09-2003, 05:20   #10 (permalink)
Use your brain!
 
Benutzerbild von MaDDeePee
 
Registriert seit: Aug 2003
Beiträge: 207
Zitat:
Problem ist, das ich nicht wirklich weiß, wie ich meine Fläschen
so sortiere, das die Vorderen zuletzt gezeichnet werden, damit
sie die dahinterliegenden Verdecken.
...du solltest die "dahinterliegenden" gar nicht erst zeichnen;
Nur das, was man auch sieht!


Grüße,

MaDDeePee
__________________
(?`·.??.->MaDDeePee<-.??.·´?)

(NULL == Ein Messer ohne Klinge, bei dem der Griff fehlt)
MaDDeePee ist offline   Mit Zitat antworten
Alt 08-09-2003, 05:21   #11 (permalink)
Use your brain!
 
Benutzerbild von MaDDeePee
 
Registriert seit: Aug 2003
Beiträge: 207
Zitat:
Hab gedacht du hast per draw api irgendwelche "Flaschen" gezeichnet die sich stapeln
Hehe...Fläschen...
__________________
(?`·.??.->MaDDeePee<-.??.·´?)

(NULL == Ein Messer ohne Klinge, bei dem der Griff fehlt)
MaDDeePee ist offline   Mit Zitat antworten
Alt 08-09-2003, 07:51   #12 (permalink)
Neuer User
 
Registriert seit: Jan 2002
Ort: Aachen
Beiträge: 1.081
hi,

erstmal vielen Dank Gnut.

Die Formel funtioniert hier irgendwie nicht.
Kann es sein, das diese nur für dreieckige Fläschen gültig ist ?

Der Link hat mir übrigens gut weiter geholfen.
Zumindest hat er gezeigt, das ich anders an die Sache rangehen sollte.


Zitat:
.du solltest die "dahinterliegenden" gar nicht erst zeichnen;
Nur das, was man auch sieht!
schon klar. wollte mich halt langsam rantasten...
__________________
G.M. | working @ source lounge
georgexp ist offline   Mit Zitat antworten
Alt 08-09-2003, 15:28   #13 (permalink)
Neuer User
 
Registriert seit: Apr 2002
Ort: Vorm PC
Beiträge: 1.583
Zitat:
Geschrieben von georgexp
Kann es sein, das diese nur für dreieckige Fläschen gültig ist ?
Sie funzt auch für 4eckige Flächen und ist an deinem Beispiel mit den drehenden Rechtecken bezogen.







Gnut
Gnut 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:40 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele