Seite 1 von 2

z-Wert bei TransformSprite3D()

Verfasst: 02.07.2005 18:51
von Batze
Also,
ich hab ein Problem mit dem Befehl TransformSprite3D().
Grundsätzlich kapier ich das ja: man gibt da die xy-Koordinaten der 4 Eckpunkte an. Aber wozu sind die z-Koordinaten?
Ich habs leider durch Probieren nicht rausgefunden und die Themen, die ich mit der Forensuche gefunden habe haben mir auch nicht geholfen.
Deshalb: Wie geht das? Am besten mit Beispiel.

Verfasst: 02.07.2005 19:07
von Green Snake
ich habe dabei auch probleme.
bei mir wird das kein bischen verformt.
das heisst, es bleibt einfach bein normalen sprite.
das komische, eine fehlermeldung wird auch nciht ausgegeben.
auch die hilfe is schleir haft.
warum wird dort eine ascii zeichnung gezeigt? :lol:

wäre auch um hilf fro :allright:

Re: z-Wert bei TransformSprite3D()

Verfasst: 02.07.2005 19:08
von DarkDragon
Batze hat geschrieben:Also,
ich hab ein Problem mit dem Befehl TransformSprite3D().
Grundsätzlich kapier ich das ja: man gibt da die xy-Koordinaten der 4 Eckpunkte an. Aber wozu sind die z-Koordinaten?
Ich habs leider durch Probieren nicht rausgefunden und die Themen, die ich mit der Forensuche gefunden habe haben mir auch nicht geholfen.
Deshalb: Wie geht das? Am besten mit Beispiel.
z ist die Tiefe(also nach hinten). Es sieht deshalb aus wie das normale sprite, weil ja noch eine orthogonale anzeige ist.

Verfasst: 02.07.2005 20:44
von Batze
Es gibt aber ne Veränderung wenn ich die y-Werte ändere. Wenn die garkeine Auswirkungen haben, wie kommt das dann?

Edit: ein Beispiel das im PureBasic >> Examples Verzeichnis läuft

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 Or later", 0)
  End
EndIf

If InitSprite3D() = 0
  MessageRequester("Error", "Direct3D system can't be initialized correctly", 0)
  End
EndIf

If OpenScreen(640, 480, 16, "Sprite")

  LoadSprite(0, "Data\Geebee2.bmp", #PB_Sprite_Texture)
  CreateSprite3D(0, 0)
  CreateSprite3D(1, 0)
  CreateSprite3D(2, 0)
  
  Sprite3DQuality(1)
  
  TransparentSpriteColor(0, 255, 0, 255) ; Our pink is transparent :)
  
  DefType.f H, V 
  
  Repeat
    FlipBuffers()
    
    ClearScreen(0,50,128)
    
    If     KeyboardPushed(#PB_Key_W) : Y - 1
    ElseIf KeyboardPushed(#PB_Key_S) : Y + 1
    ElseIf KeyboardPushed(#PB_Key_A) : x - 1
    ElseIf KeyboardPushed(#PB_Key_D) : x + 1   
    EndIf
    
    If     KeyboardPushed(#PB_Key_Left ) : H - 0.01
    ElseIf KeyboardPushed(#PB_Key_Right) : H + 0.01
    ElseIf KeyboardPushed(#PB_Key_Up   ) : V - 0.01
    ElseIf KeyboardPushed(#PB_Key_Down ) : V + 0.01
    EndIf
    If Start3D()        ;   x1  y1  z1    x2  y2  z2    x3  y3  z3   x4  y4  z4
      TransformSprite3D(0, 128,000,  V,  128,128,  V,  000,128,  H, 000,000,  H)
      DisplaySprite3D(0, x, Y, 255)
      Stop3D()
    EndIf
    
    ExamineKeyboard()
    
  Until KeyboardPushed(#PB_Key_Escape)
  
Else
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf

End   
Also bei mir tut sich bei den Pfeiltasten was!

Verfasst: 03.07.2005 08:36
von DarkDragon

Code: Alles auswählen

Verformt ("transform") das 3D-Sprite auf die neu angegebenen Koordinaten. Dies erfolgt typischerweise beim Durchführen von Echtzeit-Verformungen. Warnung: Da ein Sprite3D sich in 2 Richtungen ausdehnt (2 Dreiecke), kann die Verformung sehr seltsam aussehen... 

Wenn einer der optionalen 'z'-Parameter verwendet wird, müssen alle angegeben werden. 
  ;
  ; 1           2
  ;   ---------
  ;   |      /|
  ;   |    /  |     
  ;   |  /    |
  ;   |/      |
  ;   ---------
  ; 4           3
  ;

Das Sprite3D(eine Textur) wird ja auf ein Viereck gelegt, das wiederum aus 2 Dreiecken besteht. Und nur die Eckpunkte kann man verändern. Wenn du 2 Sprite3D hast und die übereinanderlegst musst du zuerst prüfen, welches du zuerst zu zeichnen hast.

Verfasst: 03.07.2005 09:25
von Batze
Ja, und was sagt mir das jetzt?
Ich hab nur ein Sprite, und das wird komisch verformt.

Verfasst: 04.07.2005 09:53
von kutta
hallöle
hatte mich auch schonmal damit beschäftigt
das kam dabei raus :
http://forums.purebasic.com/german/arch ... 46ecba9707

ist schon jahr her hoffe es läuft noch

mfg

Verfasst: 04.07.2005 14:33
von Batze
Danke,
ich setz mich jetzt erstmal 2 Stunden vor den Code und versuch ihn zu verstehen. :mrgreen:

Edit: 2 Stunden werden reichen :lol:

Verfasst: 04.07.2005 14:59
von kutta
naja so schlimm is ja nun auch nich
wenn du fragen hast poste

Verfasst: 26.07.2005 16:48
von Batze
So jetzt hab ich's durch. Gut, ich hab auch nicht die ganze Zeit dran gesessen sondern eigentlich erst heute wieder mal geguckt.

Das ganze lässt sich irgendwie recht schön als simple 3D-Engine anwenden.
Nochmal danke.
Könnte ich den Code wohl verwenden?

Edit: (Ein Ja wär nicht schlecht)