AntiAlias und 2D-Grafiken in Blitz3D
Übersicht

![]() |
SkabusBetreff: AntiAlias und 2D-Grafiken in Blitz3D |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm....
Also hier nochmal mein Problem: 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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..... ![]() 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 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
*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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bemühe mich, jetzt alles klarzustellen ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group