AntiAlias und 2D-Grafiken in Blitz3D

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Skabus

Betreff: AntiAlias und 2D-Grafiken in Blitz3D

BeitragFr, Apr 11, 2008 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich möchte die 3D-Funktionen für mein kleines 2D-Minispiel nutzen(Transparenz u.a.) nutzen.
Leider gelingt es mir nicht, den Charme des 2D-Spiels zu erhalten, da scheinbar das AntiAliasing
die 2D-Grafiken seltsam darstellt.....

Ich habe gehört, dass man das AntiAliasing nicht ausstellen kann, da neue GraKas den Befehl "AntiAlias 0"
nicht mehr unterstützen.

Kann man diesen Befehl noch irgendwie anders umgehen, oder gibts da andere Möglichkeiten, dll´s oder dergleichen?

Wäre für jede Hilfe dankbar!
Danke im vorraus!


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu
 

ChristianK

BeitragFr, Apr 11, 2008 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Anti-Aliasing kannst du nicht ausmachen, wenn der User es in der Treiber-Config aktiviert hat.
Mir ist bisher auch noch nie aufgefallen, dass Grafiken falsch dargestellt werden. Kannst du ein Bild davon machen?
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Who

BeitragFr, Apr 11, 2008 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

so wie ich das verstehe meinst du nicht AntiAlias, sondern pixelgenaues Darstellen der Sprites (also 1 Texel wird auf 1 Pixel gerendert). Dazu musst du die X-/Y-Koordinate des Sprites um einen halben Pixel verschieben.

Code: [AUSKLAPPEN]
Graphics3D 512, 512, 32, 2

Kamera = CreateCamera()

Bild = CreateSprite()
PositionEntity Bild, 0, 0, 4

Tex = CreateTexture(128, 128)

SetBuffer TextureBuffer(Tex)
Color 255, 0, 0
For U = 0 To 32 Step 2
   Rect U, U, 128 - U * 2, 128 - U * 2, 0
Next
Color 0, 255, 0
For U = 36 To 60 Step 4
   Rect U, U, 128 - U * 2, 128 - U * 2, 0
Next
EntityTexture Bild, Tex

SetBuffer BackBuffer()
Color 255, 255, 255

Repeat
   If KeyDown(57) Then PositionEntity Bild, -1.0 / 128, 1.0 / 128, 4 Else PositionEntity Bild, 0, 0, 4
   RenderWorld
   Text 10, 10, "Drücke die Leertaste, um pixelgenaues Anzeigen zu aktivieren"
   Flip 0
   Delay 10
Until KeyHit(1)


Allerdings ist dieser Code nur für diese Auflösung und Texturgröße geeignet.

MFG Who

Skabus

BeitragMo, Apr 14, 2008 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm....

Also hier nochmal mein Problem:

user posted image


Links ist das Ganze mit Sprite realisiert, rechts mit 2D-Methodik.
Beim Kreis sieht man eindeutig, dass irgendwie bestimmte Dinge angepasst
wurden, was aber nicht sein sollte, aussehen soll es wie rechts aufgezeigt....


Hier mein aktueller Code:

Code: [AUSKLAPPEN]

Graphics3D 320,240,16,1
SetBuffer BackBuffer()
cam=CreateCamera()
sprite=CreateSprite()

texture=CreateTexture(320,240)
EntityTexture sprite,texture
ScaleSprite sprite,3.0,1.0
AntiAlias 0
TFormFilter 0
PointEntity cam,sprite
MoveEntity cam,0,0,-1

b = LoadImage("test.png")

While Not KeyHit(1)

Cls

SetBuffer TextureBuffer(texture)


DrawImage b,0,0

SetBuffer BackBuffer()

UpdateWorld

RenderWorld

Flip
Wend



Wäre für weitere Hilfe wirklich dankbar^^"


MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu
 

ChristianK

BeitragMo, Apr 14, 2008 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
2D durch 3D funktioniert nur, wenn ein Texel auch einem Pixel entspricht. In deinem Fall ist das Sprite zu groß ( vielleicht wird der Effekt auch durch die falsche Skalierung noch verstärkt ).

Kannst ja mal nachschauen, wie hectic das bei Draw3D gemacht hat. Wink
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

Who

BeitragMo, Apr 14, 2008 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest auch beachten, dass Texturen immer quadratisch sein müssen und die Seitenlänge muss 2^x sein. x geht von Null bis zB. 10, also geht die Texturgröße von 1*1 bis zB. 1024*1024.

Wenn du jetzt eine Textur so auf einem Mesh darstellst, dass theoretisch 1 Texel 1 Pixel entsprechen müsste, dann schau dir meinen oberen Code an. So kann man die "Glättung", bzw das "Verwaschen" vermeiden.

MFG Who

D2006

Administrator

BeitragMo, Apr 14, 2008 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde mit ql:ScaleSprite das Seitenverhältnis des Sprites dem des Bildes anpassen.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Skabus

BeitragMo, Apr 14, 2008 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Who hat Folgendes geschrieben:
Du solltest auch beachten, dass Texturen immer quadratisch sein müssen und die Seitenlänge muss 2^x sein. x geht von Null bis zB. 10, also geht die Texturgröße von 1*1 bis zB. 1024*1024.

Wenn du jetzt eine Textur so auf einem Mesh darstellst, dass theoretisch 1 Texel 1 Pixel entsprechen müsste, dann schau dir meinen oberen Code an. So kann man die "Glättung", bzw das "Verwaschen" vermeiden.

MFG Who


Vielen Dank für die Erklärung an ChristianK und dir^^
Ich wusste zwar, das Texturen im Normalfall quadratisch sind....aber ich wusste net,dass
es ausschließlich so geht....mein einziges Problem an deinem Code ist jetzt nur, dass
ich keine quadratischen Bildauflösungen bekomme, weil diese von meiner(und sicher auch fast
allen anderen) nicht unterstützt werden!

Weiß jemand wie ich das Problem umgehen kann?

D2006: Das habe ich bereits versucht, leider wird das Bild dann zu groß und passt nicht mehr auf den Bildschirm....

MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

D2006

Administrator

BeitragMo, Apr 14, 2008 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Skabus hat Folgendes geschrieben:
D2006: Das habe ich bereits versucht, leider wird das Bild dann zu groß und passt nicht mehr auf den Bildschirm....


Dann hast du es schlicht und ergreifend falsch gemacht. Wink
Wenn dein Bild zB 16 pixel breit, aber nur 8 hoch ist, dann hat es ein Seitenverhältnis von 2:1.
Also muss du das Sprite so scalen:

Code: [AUSKLAPPEN]
ScaleSprite sprite, 2,1
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Skabus

BeitragMo, Apr 14, 2008 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
Skabus hat Folgendes geschrieben:
D2006: Das habe ich bereits versucht, leider wird das Bild dann zu groß und passt nicht mehr auf den Bildschirm....


Dann hast du es schlicht und ergreifend falsch gemacht. Wink
Wenn dein Bild zB 16 pixel breit, aber nur 8 hoch ist, dann hat es ein Seitenverhältnis von 2:1.
Also muss du das Sprite so scalen:

Code: [AUSKLAPPEN]
ScaleSprite sprite, 2,1


Achso...verstehe....Danke^^

Blieb letzlich nur die Frage warum bei einer Auflösung von 320x240 und der Texturgröße 400x400 im Verhältnis 1:1 immer noch diese Glättung gemacht wird....Quadratische Auflösungen krieg ich ja schlecht....
Und es sollte einfach bündig abschließen, ohen Glättung und Stauchung o.O

MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

D2006

Administrator

BeitragMo, Apr 14, 2008 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, probier mal bei ql:LoadSprite im Parametermodu +16 und +32 zu aktivieren.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Skabus

BeitragMo, Apr 14, 2008 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
Hmm, probier mal bei <a href="http://www.blitzbase.de/befehle3d/loadsprite.htm" class="postlink" target="_blank">LoadSprite<img src="/images/quicklink.gif" width="13" height="11" alt="" title="Begriff nachschlagen" border="0"></a> im Parametermodu +16 und +32 zu aktivieren.



Da ändert sich rein gar nichts..... Confused



MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

D2006

Administrator

BeitragMo, Apr 14, 2008 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
*patsch* Es ist sicher zu groß. Wenn du pixel=textel haben willst, steht hier wie's geht:

http://www.unrealsoftware.de/o...to_2d.html
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Skabus

BeitragMo, Apr 14, 2008 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
*patsch* Es ist sicher zu groß. Wenn du pixel=textel haben willst, steht hier wie's geht:

http://www.unrealsoftware.de/o...to_2d.html


Vielen Dank Very Happy
Jetzt funktioniert alles so wie es soll^^



MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

Who

BeitragMo, Apr 14, 2008 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bemühe mich, jetzt alles klarzustellen Idea

Code: [AUSKLAPPEN]
Graphics3D 640,480,32,2

Local Camera=CreateCamera()
CameraClsMode Camera,0,1
CameraRange Camera,1,700

Local Sprite=CreateSprite()

; Erstellen einer einfachen Schärfetest-Textur
Local Tex = CreateTexture(64, 64)
EntityTexture Sprite, Tex
SetBuffer TextureBuffer(Tex)
ClsColor 255, 255, 255
Color 0, 0, 0
Cls
Line 0, 0, 63, 63
Rect 10, 10, 44, 44, 0
Color 255, 255, 255
ClsColor 0, 0, 0

;   Position, Spritegröße, Bildschirmauflösung
Local X#, Y#, SX, SY     , XAufl = GraphicsWidth(), YAufl = GraphicsHeight()
X# = 64 -0.5; 0.5 ist konstant und muss, um Pixelgenauigkeit zu erreichen, abgezogen werden
Y# = 64 -0.5; einfach mal -0.5 auskommentieren und vergleichen
SX = 64
SY = 64

ScaleSprite Sprite,SX, SY
EntityColor Sprite,255,0,0
EntityAlpha Sprite,0.5

PositionEntity Sprite,((X#)*2)-XAufl+SX,-((Y#)*2)+YAufl-SY,XAufl

SetBuffer BackBuffer()

   Cls
   For X=0 To 20 Step 2
      For Y=0 To 15 Step 2
         Rect X*32,Y*32,32,32,1
      Next
   Next
   RenderWorld()
   Flip 0
WaitKey()

Vergleiche meinen Code mit dem Tutorialcode. Ich hoffe dadurch wird der Unterschied klar.

Meinen ersten Code oben im Thema habe ich ohne die Positionierungsformel geschrieben und um schnell eine pixelgenaue Lösung zu haben, habe ich als Auflösung 4 * Texturgröße genommen => PositionEntity Bild, 0, 0, 4. Die obige Formel erlaubt dir, alle quadratischen Texturen auf Sprites exakt darzustellen. Für nicht-quadratische pixelgenaue Bilder muss man die Texturkoordinaten anpassen.

MFG
Who

Ach ja: Zitat:
Texturgröße 400x400
geht nicht (nur bei ATi, und da wirds auf 512 gestreckt, oder?), das Nächstgrößere ist 512x512

Skabus

BeitragMo, Apr 14, 2008 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hat sich erledigt!

Danke nochmal an alle^^
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group