Seite 1 von 3

Sprite3D um die y Achse drehen

Verfasst: 19.01.2010 16:23
von Schoppy
Hi,

also mit RotateSprite3D(#Sprite3D, 60, 0) kann ich das Sprite auf der X Achse drehen.

Gibt es eine Möglichkeit das Sprite auf der Y-Achse zu drehen?

Ich möchte ein Film Archiv schreiben welches das Cover in der Mitte Normal gerade anzeigt und rechts und links daneben die Filme leicht schräg zeigt.

Gruss
Schoppy

Re: Sprite3D um die y Achse drehen

Verfasst: 19.01.2010 16:25
von Kaeru Gaman
schau dir mal TransformSprite3D an.

Re: Sprite3D um die y Achse drehen

Verfasst: 19.01.2010 18:08
von STARGÅTE
also mit RotateSprite3D(#Sprite3D, 60, 0) kann ich das Sprite auf der X Achse drehen.
:?
DIe x-Achse geht von Links nach Rechts auf dem Bildschirm.
RotateSprite3D dreht das Bild um den Mittelpunkt des Sprites, also um eine gedachte z-Achse ...

Wenn du nun wirklich um die Y-Achse drehen willst dann solltest du wie Kaeru Gaman schrieb mit
TransformSprite3D arbeiten.

Einfachste Variante wäre, die Eckpunkte (x,y) so zu wähel als wäre es ein normales Sprite.
Dann musst du n bisschen mit den Werten spielen bis das gewünschte ergebnis kommt, z-Parameter nicht vergessen damit die Textur nicht verzerrt.

Falls du es aber richtig machen willst, musst du dir die RotationsMatrizen holen, und die Raumpunkte umrechnen in 2D.
Dazu gehört dann auch n Art Kamera mit öffnungswinkel usw.

Re: Sprite3D um die y Achse drehen

Verfasst: 19.01.2010 19:22
von hörmi
also wenns einfach gehen soll kann man das auch mit sinus und kosinus lösen

Re: Sprite3D um die y Achse drehen

Verfasst: 27.10.2010 09:07
von Sebastian
Ich sitze vor dem gleichen Problem. Auch ich möchte das Sprite um die y-Achse drehen, um so eine 3-Dimensionalität zu erhalten. Ich habe mich an TransformSprite3d versucht, aber ich scheitere an dem Befehl. Die Hilfe ist keine Hilfe. Man soll einen z-Parameter angeben. Aber nach welchem Kriterium? Wie wird dieser errechnet? Gibt es irgendwo ein Tutorial oder nähere Informationen zu dem Befehl?

Re: Sprite3D um die y Achse drehen

Verfasst: 27.10.2010 09:52
von super_castle
nimm 3d und ogre, da kannste eine fläche herstellen und kannst durch verschiebung der koordinaten auch den drehpunk bestimmen.
für "schiene.png" setzt ein eigenes bild ein.
schau dir ogre an, da kannst auch transparente flächen machen.

gruss

Code: Alles auswählen

Global Dim spr.l(150),zz.l

InitEngine3D() 
InitSprite() 
InitKeyboard()

    OpenWindow(0,0,0,640,480,"3D Mesh Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    OpenWindowedScreen(WindowID(0),200,10,400,400,0,0,0)
    Add3DArchive("Data", #PB_3DArchive_FileSystem)
  
    For zz=0 To 2
      CreateMesh(zz,10)
      SetMeshData(zz, #PB_Mesh_Vertex|#PB_Mesh_UVCoordinate, ?Ecken, 4)
      SetMeshData(zz, #PB_Mesh_Face, ?Viereck, 4)
   
      CreateMaterial(0, LoadTexture(0,"schiene.png"))
      CreateEntity(zz, MeshID(zz), MaterialID(0))
    Next
    
    colorlight = 0
 
    If colorlight = 0
      CreateLight(0, RGB(255,255,255), 100.0, 0, 0)  ; White Light
    Else
      CreateLight(0, RGB(0,0,255), 100.0, 0, 0)   ; Blue Light
      CreateLight(1, RGB(255,0,0), -100.0, 0, 0)  ; Red Light
      CreateLight(2, RGB(255,255,0), 0.0, 100, 0) ; Yellow Light
    EndIf 
    
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,50)

    CameraBackColor(0, RGB(255,255,255))
    
    Repeat
      ExamineKeyboard()
      
      Select WindowEvent()
        Case #PB_Event_CloseWindow
          Quit = #True
      EndSelect
     
      rot=1
      RotateEntity(0,0,0,rot*0.1,#PB_Relative)
      RotateEntity(1,0,rot,rot*0.3,#PB_Relative)
      RotateEntity(2,rot,0,rot*0.5,#PB_Relative)
      
      RenderWorld()
      FlipBuffers()
   
    Until KeyboardPushed(#PB_Key_Escape) Or Quit

End


DataSection

  Ecken:
    Data.f -10, 0,  0 ; Ecke 0 lu           
    Data.f 0,1
    Data.f  10, 0,  0 ; Ecke 1 ru         
    Data.f 1,1
    Data.f  10,  20,  0 ; Ecke 2 ro         
    Data.f 1,0
    Data.f -10,  20,  0 ; Ecke 3 lo           
    Data.f 0,0
   
  Viereck:
    Data.w 0, 1, 2  ; Dreieck 1 besteht aus den Ecken 0, 1 und 2
    Data.w 2, 3, 0  ; Dreieck 2 besteht aus den Ecken 2, 3 und 0
                    ; = 1 Viereck Vorderseite
    Data.w 0, 3, 2  ; Dreieck 1 besteht aus den Ecken 0, 3 und 2
    Data.w 2, 1, 0  ; Dreieck 2 besteht aus den Ecken 2, 1 und 0
                    ; = 1 Viereck Rueckseite

EndDataSection


Re: Sprite3D um die y Achse drehen

Verfasst: 27.10.2010 19:17
von Sebastian
Der Tipp ist nett gemeint, aber nicht praktikabel. Nur, um eine Karte mit einer Drehung darzustellen lohnt es sich wohl kaum, eine komplette 3D-Enginge einzubinden. Außerdem ist es mit TransformSprite3D möglich. Die Frage ist nur: Wie?

Re: Sprite3D um die y Achse drehen

Verfasst: 27.10.2010 19:19
von STARGÅTE
Hier mein Beispiel aus dem Englischen Forum:
http://www.purebasic.fr/english/viewtop ... 66#p333066

Re: Sprite3D um die y Achse drehen

Verfasst: 27.10.2010 20:24
von Sebastian
Ja! Endlich! Das ist es! Schade, dass das Beispiel nicht kommentiert ist. Ich werde mal versuchen, es nachzuvollziehen.

Re: Sprite3D um die y Achse drehen

Verfasst: 27.10.2010 20:29
von Sebastian
Bei dem Beispiel fällt mir auf: Die recht Fläche scheint ein wenig um den Mittelpunkt zu "eiern". Woran liegt es und kann man es umgehen?