Sprite3D um die y Achse drehen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Schoppy
Beiträge: 9
Registriert: 28.03.2009 04:41

Sprite3D um die y Achse drehen

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Sprite3D um die y Achse drehen

Beitrag von Kaeru Gaman »

schau dir mal TransformSprite3D an.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sprite3D um die y Achse drehen

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: Sprite3D um die y Achse drehen

Beitrag von hörmi »

also wenns einfach gehen soll kann man das auch mit sinus und kosinus lösen
BildBild Bild
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Sprite3D um die y Achse drehen

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Re: Sprite3D um die y Achse drehen

Beitrag 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

Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Sprite3D um die y Achse drehen

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Sprite3D um die y Achse drehen

Beitrag von STARGÅTE »

Hier mein Beispiel aus dem Englischen Forum:
http://www.purebasic.fr/english/viewtop ... 66#p333066
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Sprite3D um die y Achse drehen

Beitrag von Sebastian »

Ja! Endlich! Das ist es! Schade, dass das Beispiel nicht kommentiert ist. Ich werde mal versuchen, es nachzuvollziehen.
(Win 11 64-bit, PB 6.04 und 6.10)
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Sprite3D um die y Achse drehen

Beitrag 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?
(Win 11 64-bit, PB 6.04 und 6.10)
Antworten