CreateSprite3D - Frage zur Hilfe, Sprite-Grössen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

CreateSprite3D - Frage zur Hilfe, Sprite-Grössen

Beitrag von STARGÅTE »

Tachchen,

nun muss ich auch mal wieder n Anfängerfrage loslassen:

In der Hilfe für CreateSprite3D() steht ja:
"Die Textur muss ein Quadrat in den folgenden Grössen sein: 16*16, 32*32, 64*64, 128*128 oder 256*256.
Andere Größen funktionieren möglicherweise auf einigen Grafikkarten, aber nicht auf allen."


In wie fern hat das "Heute" noch gültigkeit?
Das Heute bezieht sich auf:
PB 4.50, DX9, heutige Grafikkarten.

Einfaches Beispiel:

Code: Alles auswählen

InitSprite()
InitSprite3D()

OpenWindow(0, 0, 0, 800, 600, "Beispiel", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
 
  Sprite3DQuality(#PB_Sprite3D_BilinearFiltering)
 
  CreateSprite(1, 17, 67, #PB_Sprite_Texture)
  StartDrawing(SpriteOutput(1))
    Box(0, 0, 17, 67, $FFFFFF)  : Box(1, 1, 15, 65, $FF0000)
    Line(0, 0, 17, 67, $00FF00) : Line(16, 0, -17, 67, $0000FF)
  StopDrawing()
  CreateSprite3D(1,1)
 
Repeat
 
  Repeat
    Event = WindowEvent()
    Select Event
      Case #PB_Event_CloseWindow
        End
    EndSelect
  Until Not Event
 
  ClearScreen(0)

  Angle + 1

  Start3D()
 
    ZoomSprite3D(1, 17, 67)
    RotateSprite3D(1, 0, #PB_Absolute)
    DisplaySprite3D(1, 50, 100)
   
    ZoomSprite3D(1, 17, 67)
    RotateSprite3D(1, Angle, #PB_Absolute)
    DisplaySprite3D(1, 250, 100)
    
    ZoomSprite3D(1, 34+Sin(Radian(Angle))*17, 67)
    RotateSprite3D(1, 0, #PB_Absolute)
    DisplaySprite3D(1, 450, 100) 

    ZoomSprite3D(1, 34, 67+Sin(Radian(Angle))*67)
    RotateSprite3D(1, Angle, #PB_Absolute)
    DisplaySprite3D(1, 650, 100) 
    
  Stop3D()
 
  FlipBuffers()

ForEver
Bei "mir" werden die Sprite3Ds alle richtig dargetsellt.

Ich meine wenn man jetzt eh DX9 benutzt, gibt es da noch Grafik-Karten auf denen DX9 läuft, bei denen es aber genau hier Probleme gibt ?

Oder gibt es andere Nachteile von "krummen" Sprite3Ds ?

Klar kann man jedes Sprite auf 16*16, 32*32, 64*64, 128*128 oder 256*256 bringen, aber wozu leere Stellen erzeugen wenns auch ohne geht ....
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: CreateSprite3D - Frage zur Hilfe, Sprite-Grössen

Beitrag von Kaeru Gaman »

zu DX9 Zeiten sollte eine Textur eine 2^x * 2^y Größe haben, also z.B. auch 128x1024.
maximale Texturgrößen liegen irgendwo bei 4096² oder 8192².
ganz krumme seitenverhältnisse (243x722) funktionieren erfahrungsgemäß auf NV-Karten besser als auf ATI, eher auf ATI garnicht als auf NV,
zumindest haben sie auf beiden eine gute chance, wesentlich langsamer zu sein als 2^x * 2^y oder gar (2^n)².

also, auch wenn die alte Einschränkung kaum noch gilt, dass es nicht geht,
es besteht zumindest noch die einschränkung, dass es höchstwahrscheinlich wesentlich langsamer sein wird.
eigentlich ist es doch auch garnicht nötig, oder?
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: CreateSprite3D - Frage zur Hilfe, Sprite-Grössen

Beitrag von STARGÅTE »

Kaeru Gaman hat geschrieben:es besteht zumindest noch die einschränkung, dass es höchstwahrscheinlich wesentlich langsamer sein wird.
eigentlich ist es doch auch garnicht nötig, oder?
Das ist halt die Frage ...

Wenn ich zB ein Buchstaben habe der genau 70*70 Pixel groß ist (und auch so groß sein soll !)
Ob es dann schneller ist ein Bild mit 128*128 zu nutzen wo ca 70% leer sind, RGBA(0,0,0,0),
oder das 70*70 zu nutzen, weil dort weniger Pixel zu "Blenden" sind.

Dafür habe ich zu wenig erfahrung im Bereich DirectX ...
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: CreateSprite3D - Frage zur Hilfe, Sprite-Grössen

Beitrag von Kaeru Gaman »

dann würde ich gegebenenfalls eine Textur nehmen, wo der Komplette Zeichensatz drauf ist, und das Quad selber clippen.
guck mal im englischen nach ClipSprite3D, reine DX-API.

oder grundsätzlich gleich die 128² beim rendern voll ausnutzen, und das Sprite3D zoomen, wenn der Char nur 70 groß sein soll.
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: CreateSprite3D - Frage zur Hilfe, Sprite-Grössen

Beitrag von STARGÅTE »

Das ClipSprite3D ist perfekt.

Da ich es eh nur intern nutze, konnte ich alle Abfragen wie "außerhab des Bereiches?" entfernen.

Somit sollte das "einstellen" des Clippens schnell sein, und DX9 hätte es ja eh gemacht nur halt immer von 0-1 ^^

Super Idee :allright: Danke, nun bin ich auf der sicheren und schellen Seite und hab auch noch Sprites gespart :allright:

und an die 4096² werde ich wahrscheinlich nicht rankommen, dort wäre jedes Zeichen 256*256 groß, das sollte reichen ^^
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
Schlumpf
Beiträge: 19
Registriert: 21.03.2010 00:52
Wohnort: Der Puff von Schlumpfhausen

Re: CreateSprite3D - Frage zur Hilfe, Sprite-Grössen

Beitrag von Schlumpf »

Ich würde eher einzelne Sprites für die Buchstaben benutzen.
Eine ganze Textur für 16x16 oder auch nur 8x8 Zeichen bekommt man doch kaum ausgereizt.
Für die meisten Spiele oder Demos reichen 26 Buchstaben, 10 Ziffern und eine Handvoll Satzzeichen.
PB 4.41 - Win XP pro
Antworten