Seite 1 von 1

Spiegeln mit TransformSprite3D()

Verfasst: 02.05.2011 10:51
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?

Re: Spiegeln mit TransformSprite3D()

Verfasst: 02.05.2011 11:31
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 ...