Aktuelle Zeit: 08.03.2021 00:00

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: PB_DX9Sprite - Textur-Kachelung - Sprite3D-Färbung
BeitragVerfasst: 21.07.2010 21:45 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Tachchen,

weil es gerade wieder "hoch kam", würde ich euch bitte mal folgenden Code zu testen.

Quelle: ClipSprite3D for DirectX7 / DirectX9 (x86/x64) (Fluid Byte)

Voraussetzung: DirectX 9 , PB 4.50
Was soll passieren: Ein kleines Sprite3D (32x32), oben links zu sehen, soll mittels ClipSprite3D gekachelt werden und mit RotateSprite3D und ZoomSprite3D behandelt werden wie ein großen Sprite3D,
dabei soll die Kachelung auch innerhalb des anzeigebereiches, sich bewegen.

Code:
InitSprite()
InitSprite3D()

; DirectX9
Structure D3DTLVERTEX
  x.f:y.f:z.f
  rhw.f:Color.l
  tu.f:tv.f
EndStructure 

Structure PB_DX9Sprite3D
  TexRes.i                    ; TexRes
  Vertice.D3DTLVERTEX[4]      ; The 4 vertices for the rectangle sprite
  TmpVertice.D3DTLVERTEX[4]   ; The 4 vertices for the rectangle sprite
  Width.l                     ; width set with ZoomSprite3D()
  Height.l                    ; height set with ZoomSprite3D()
  RealWidth.l
  RealHeight.l
  Angle.f
  Transformed.l
EndStructure


Procedure ClipSprite3D(Sprite3D, x, y, Width, Height)
  Protected *Sprite3D.PB_DX9Sprite3D = IsSprite3D(Sprite3D)
  With *Sprite3D
    \Vertice[0]\tu = x / \RealWidth
    \Vertice[0]\tv = y / \RealHeight
    \Vertice[1]\tu = (x + Width) / \RealWidth
    \Vertice[1]\tv = y / \RealHeight
    \Vertice[2]\tu = x / \RealWidth
    \Vertice[2]\tv = (y + Height) / \RealHeight
    \Vertice[3]\tu = (x + Width) / \RealWidth
    \Vertice[3]\tv = (y + Height) / \RealHeight
  EndWith
EndProcedure

OpenWindow(0, 0, 0, 800, 600, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)

  Sprite3DQuality(1)
 
  CreateSprite(1, 32, 32, #PB_Sprite_Texture)
  StartDrawing(SpriteOutput(1))
    Box(0,0,16,16,$FFFF00)
    Box(16,16,16,16,$00FFFF)
  StopDrawing()
  CreateSprite3D(1, 1)


Repeat

  ClearScreen(0)
   
  Start3D()
 
  ClipSprite3D(1, 0, 0, 32, 32)
  RotateSprite3D(1, 0, #PB_Absolute)
  ZoomSprite3D(1, 32, 32)
  DisplaySprite3D(1, 128, 64)

  Time.f = ElapsedMilliseconds()/1000

  ClipSprite3D(1, Mod(Time*50,256), Mod(Time*70,256), 256, 256)
  RotateSprite3D(1, Time*25, #PB_Absolute)
  ZoomSprite3D(1, 256, 256)
  DisplaySprite3D(1, 128, 128)

  Stop3D()

  FlipBuffers()

Until WindowEvent() =  #PB_Event_CloseWindow


Bild

Wenn dieser Code wirklich nahezu überall läuft, würde ich von nun an diese Art der Kachelung nutzen, statt dem "normalen" For-Schleifen.

_________________
Bild
 
BildBildBild


Zuletzt geändert von STARGÅTE am 01.08.2010 01:03, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 21.07.2010 22:03 
Offline

Registriert: 11.06.2007 12:55
bei mir funktioniert alles

[OT]wie bist du an die struckturen gekommen D3DTLVERTEX/PB_DX9Sprite3D? [/OT]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 21.07.2010 22:04 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Sry hab den "Ur-Autor" dieser Funktion vergessen:
ClipSprite3D for DirectX7 / DirectX9 (x86/x64) Fluid Byte
Ich habe einfach nur die Sicherheitsabfragen entfernt :lol:

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 21.07.2010 22:08 
Offline

Registriert: 11.06.2007 12:55
wow danke an dich und nautürlich auch Fluid Byte :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 21.07.2010 22:49 
Offline
Benutzeravatar

Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte
Naja, ich hab' diese Funktion auf DirectX 9 aktualisiert, 64-bit-kompatibel gemacht und diversen Overhead entfernt.
Dennoch ist der "Ur-Author" Stefan Moebius, nicht ich. Ohne seine damalige Arbeit am DirectX 9 Subsystem wäre all dies nicht umzusetzen gewesen.
Der Quelltext dafür ist immer noch online und ist nahezu identisch mit der Implementation die wir heute in PureBasic haben.

Ich kann nur jedem empfehlen sich die Files zu schnappen solange es noch online ist: http://www.purebasic.fr/english/viewtop ... 27&t=22184

@STARGÅTE:
Ich habs zuerst für 64-Bit getestet ...

Geiler LSD-Trip! 8)

Ja, mit 32-Bit funktioniert es wie es soll.

_________________
Windows 10 Pro, 64-Bit / Outtakes | Derek


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 21.07.2010 23:20 
Offline
BotHunter
Benutzeravatar

Registriert: 26.12.2005 14:14
Wohnort:   
Im Grunde sollten wir alle André, freak und Fred danken, weil ohne sie gäbs das alles garnicht :mrgreen:

_________________
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 22.07.2010 07:50 
Offline

Registriert: 13.07.2008 10:05
Ich habe es mal auf Windows 7 64 Bit getestet mit Pure Basic 32 Bit läuft es super mit Pure Basic 64 Bit nicht da sieht es dann ziemlich seltsam aus.

Edit:
@STARGÅTE du hast einen kleinen Fehler in der Structure PB_DX9Sprite3D gemacht die Variable TexRes.l muss TexRes.i sein dann läuft es auch unter 64 Bit.
Code:
Structure PB_DX9Sprite3D
  TexRes.i                    ; TexRes
  Vertice.D3DTLVERTEX[4]      ; The 4 vertices for the rectangle sprite
  TmpVertice.D3DTLVERTEX[4]   ; The 4 vertices for the rectangle sprite
  Width.l                     ; width set with ZoomSprite3D()
  Height.l                    ; height set with ZoomSprite3D()
  RealWidth.l
  RealHeight.l
  Angle.f
  Transformed.l
EndStructure

_________________
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 22.07.2010 08:27 
Offline

Registriert: 18.10.2005 10:22
Wohnort: Welschbillig
Bei mir funktioniert es auch.
Gruß Christian

Systeminformationen
AMD Sempron(tm) 2200+ (1499 MHz)
Betriebssystem: Microsoft Windows XP
DirectX-Version: 9.0c
Informationen über die Grafikkarte
GeForce FX 5200
ForceWare-Version: 175.16
Speicher: 128 MB
Video-BIOS-Version: 4.34.20.18.00
Bus: AGP 8X


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 22.07.2010 10:01 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
jo habs geändert, ich hatte noch n ältere version des codes ...

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ClipSprite3D - Textur-Kachelung - Bitte auf Funktion tes
BeitragVerfasst: 01.08.2010 01:02 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Nun spiele ich gerade mit \Color rum, und möchte nun wieder mal wissen, ob bei euch das Sprite3D gefärbt wird:
Code:
InitSprite()
InitSprite3D()

; DirectX9
Structure D3DTLVERTEX
  x.f:y.f:z.f
  rhw.f:Color.l
  tu.f:tv.f
EndStructure 

Structure PB_DX9Sprite3D
  TexRes.i                    ; TexRes
  Vertice.D3DTLVERTEX[4]      ; The 4 vertices for the rectangle sprite
  TmpVertice.D3DTLVERTEX[4]   ; The 4 vertices for the rectangle sprite
  Width.l                     ; width set with ZoomSprite3D()
  Height.l                    ; height set with ZoomSprite3D()
  RealWidth.l
  RealHeight.l
  Angle.f
  Transformed.l
EndStructure

Procedure ClipSprite3D(Sprite3D, x, y, Width, Height)
  Protected *Sprite3D.PB_DX9Sprite3D = IsSprite3D(Sprite3D)
  With *Sprite3D
    \Vertice[0]\tu = x / \RealWidth
    \Vertice[0]\tv = y / \RealHeight
    \Vertice[1]\tu = (x + Width) / \RealWidth
    \Vertice[1]\tv = y / \RealHeight
    \Vertice[2]\tu = x / \RealWidth
    \Vertice[2]\tv = (y + Height) / \RealHeight
    \Vertice[3]\tu = (x + Width) / \RealWidth
    \Vertice[3]\tv = (y + Height) / \RealHeight
  EndWith
EndProcedure


Procedure Sprite3DColor(Sprite3D, Color0, Color1, Color2, Color3)
  Protected *Sprite3D.PB_DX9Sprite3D = IsSprite3D(Sprite3D)
  With *Sprite3D
    \Vertice[0]\Color = Color0
    \Vertice[1]\Color = Color1
    \Vertice[2]\Color = Color2
    \Vertice[3]\Color = Color3
  EndWith
EndProcedure


OpenWindow(0, 0, 0, 800, 600, "SCREEN", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
 
  Sprite3DQuality(1)
 
  CreateSprite(1, 32, 32, #PB_Sprite_Texture)
  StartDrawing(SpriteOutput(1))
    Box(0,0,8,8,$FFFFFF)
    Box(24,0,8,8,$FFFFFF)
    Box(0,24,8,8,$FFFFFF)
    Box(24,24,8,8,$FFFFFF)
    Box(8,8,16,16,$808080)
  StopDrawing()
  CreateSprite3D(1, 1)
  Sprite3DColor(1, $FF0000, $00FF00, $0000FF, $FFFFFF)
 
Repeat

  ClearScreen(0)
   
  Start3D()
 
  ClipSprite3D(1, 0, 0, 32, 32)
  RotateSprite3D(1, 0, #PB_Absolute)
  ZoomSprite3D(1, 32, 32)
  DisplaySprite3D(1, 128, 64)
 
  Time.f = ElapsedMilliseconds()/1000
 
  ClipSprite3D(1, Time*50, Time*70, 256, 256)
  RotateSprite3D(1, Time*25, #PB_Absolute)
  ZoomSprite3D(1, 256, 256)
  DisplaySprite3D(1, 128, 128)
 
  Stop3D()
 
  FlipBuffers()

Until WindowEvent() =  #PB_Event_CloseWindow


Bild

Echt praktisch.

Wieso nur bin ich erst jetzt darauf gestoßen :lol:

Das erspart mir (wenns denn überall unterstützt wird) n menge Arbeit in den Punkten:
- einfärben von Grau-Stufen-Bildern
- Licht-Effekten

_________________
Bild
 
BildBildBild


Zuletzt geändert von STARGÅTE am 01.08.2010 09:55, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye