Spiegeln mit TransformSprite3D()

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Spiegeln mit TransformSprite3D()

Beitrag von Lebostein »

Hallo,

ich kann mich noch erinnern, dass man mit negativen Werten für bestimmte Koordinaten ein 3D-Sprite spiegeln konnte.
Leider bekomme ich das nicht mehr hin. Sobald (Beispiel: horizontal) die rechten Koordinaten kleiner werden als die linken, verschwindet das 3D-Sprite.

Geht das Spiegeln mit dieser Methode überhaupt (noch)? Also die Rückseite des Sprites zu betrachten?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Spiegeln mit TransformSprite3D()

Beitrag von STARGÅTE »

Nur mit TransformSprite3D() geht es nicht, da eine Spiegelung ja die Rückseite eines Sprites wäre, welche aber nicht gerendert wird.

Dazu musst die dies Aktivieren:

Code: Alles auswählen

Define pd3d.IDirect3DDevice9
; [...]
Start3D()
  ; Zum Rändern der "anderen" Seite
  EnableASM
    !extrn _PB_Screen_Direct3DDevice
    !MOV dword EAX, [_PB_Screen_Direct3DDevice]
    !MOV dword [v_pd3d],EAX
  DisableASM
  pd3d\SetRenderState(22,1)

Code: Alles auswählen

InitSprite()
InitSprite3D()

OpenWindow(0, 0, 0, 800, 600, "Screen", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)

Sprite3DQuality(1)

Font = FontID(LoadFont(#PB_Any, "Arial", 192))
CreateSprite(1, 256, 256, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
  DrawingFont(Font) : DrawingMode(1)
  Box(0,0,256,256,$FF0000)
  DrawText(0,0,"F", $0000FF, 0)
StopDrawing()
CreateSprite3D(1, 1)
   
Define pd3d.IDirect3DDevice9

Repeat

  ClearScreen(0)

  #HalfSize = 150
 
  Start3D()

  ; Zum Rändern der "anderen" Seite
  EnableASM
    !extrn _PB_Screen_Direct3DDevice
    !MOV dword EAX, [_PB_Screen_Direct3DDevice]
    !MOV dword [v_pd3d],EAX
  DisableASM
  pd3d\SetRenderState(22,1)

  a.f = ElapsedMilliseconds()/1000
     
  ZoomSprite3D(1,200*Sin(a),200)
  DisplaySprite3D(1, 400-100*Sin(a), 200)

  FlipBuffers()

Until WindowEvent() = #PB_Event_CloseWindow 
Dann kannst du auch mit ZoomSprite3D arbeiten ...
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
Antworten