Probleme mit Sprites auf "Entfernung"

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Raoudi

Betreff: Probleme mit Sprites auf "Entfernung"

BeitragMo, Apr 30, 2007 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag,

ich habe folgendes Problem:
Wenn ich ins Wasser schieße, entstehen Wasserringe (Sprite). So ist es gedacht:

user posted image


Allerdings gibt es eine gewisse Grenze; Man sieht den Sprite nur richtig, wenn er sich in der unmittelbaren Mitte der Sicht befindet. (Wenn ich mich auf ihn zubewege, wird er wieder deutlich.)

user posted image

Wie wäre das zu korrigieren?
 

ChristianK

BeitragMo, Apr 30, 2007 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das könnte vielleicht am Mipmapping liegen.
Versuch mal ClearTextureFilters, bevor du das Sprite/die Textur lädst.
 

Raoudi

BeitragMo, Apr 30, 2007 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe versucht es überall einzusetzen, hilft leider nicht.
 

ChristianK

BeitragMo, Apr 30, 2007 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Texture Flags hast du beim Laden des Sprites angegeben?
 

Raoudi

BeitragMo, Apr 30, 2007 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Sprite:
Code: [AUSKLAPPEN]
spr_waterring = LoadSprite("res\water2.png",2)


Textur:
Code: [AUSKLAPPEN]
tex_water = LoadTexture("res\water.png")


--------

Editiert:

Habe eine weitere Entdeckung gemacht: wenn ich den Alpha-Wert des Wassers auf null setze (sodass es nicht mehr sichtbar ist), funktionieren die Ringe auch auf eine hohe Distanz.

user posted image

Mr.Keks

BeitragMo, Apr 30, 2007 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, es liegt offensichtlich daran, dass die sprites sich eben auf wasserniveau befinden und je nach kameraposition mal über und mal unter dem wasser gezeichnet werden. lässt sich mit entityorder, klarerer positionierung oder umstieg der sprites auf blendmode3 lösen.
MrKeks.net

skey-z

BeitragMo, Apr 30, 2007 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
aus diesem 3ten Screen wäre die Schlussfolgerung zu schließen, dass du die Sprites genau auf der y-Positione des Wassers erstellst, versuche mal die y-Koordinate um wenige millimeter(0.01 oder so) nach oben zu setzen.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

Raoudi

BeitragMo, Apr 30, 2007 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Merkwürdigerweise funktioniert es an manchen Stellen der map problemlos (auch ohne Erhöhung der Sprites), an anderen aber gar nicht. Der Blend-Mode hat leider auch nichts gebracht.
Auch komisch ist, dass es anscheinend davon abhängt, von wo ich schieße (bzw wo die Kamera ist). Das Ganze erscheint mir ziemlich unlogisch..
 

Dreamora

BeitragMo, Apr 30, 2007 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein

ZBuffer ungenauigkeit.

Bist du im 16 Bit Modus (denn dort wird das Problem noch viel schöner) oder im 32Bit Modus?

Hat deine Kamera intelligente Reichtweiten? Denn du brauchst ja keine gigantische Sichtweite in diesem Einsatzfall.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Raoudi

BeitragMo, Apr 30, 2007 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe jetzt den 16Bit Modus drin, macht allerdings gar keinen Unterschied.
Die Reichweiten der Kamera würde ich nicht unbedingt intelligent nennen, aber auf die Weise sieht es besser aus.
Code: [AUSKLAPPEN]
CameraRange cam,0.1,5000

Mit einer Range von zB. 1000 sieht das Wasser im Hintergrund "abgeschnitten" aus. Einen Unterschied bei meinem Spriteproblem macht es nicht.
 

Dreamora

BeitragMo, Apr 30, 2007 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Faktor 5000 kann durchaus solche Tiefenbufferprobleme herbeiführen.
Anstatt wasser in die Ewigkeit fortzusetzen würdeste da sinnvollerweise besser einen Hintergrund nehmen oder eine zweite Kamera die nur 1000,5000 rendert damit die Sprite Cam nicht in ZBuffer Probleme rennt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Raoudi

BeitragMo, Apr 30, 2007 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kann gut sein, allerdings scheint das auch nicht die Lösung zu sein. Ich habe die Kamera testweise auf 20-500 gemacht, ändert sich nichts. Ich bezweifle fast schon, dass es ein ZBuffer-Fehler ist, weiß es aber nicht genau.

Zur Verdeutlichung habe ich mal ein Video zusammengestellt:
Zuerst sieht man es ähnlich wie auf den oberen beiden Screens. Auf Entfernung werden die Spritzer fast unsichtbar. Wenn ich aber aus einer anderen Position schieße, wird alles richtig dargestellt.

http://home.arcor.de/raoudi/fehlervideo.wmv (~2,5mb)
 

Dreamora

BeitragMo, Apr 30, 2007 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne definitiv kein ZBuffer aber das sagte ich ja auch nicht.

Sieht allerdings irgendwie strange aus, denn als er im Sprung ist gibts das Problem nicht.

wie bzw. auf was wird der sprite genau orientiert? vielleicht ist er da und man sieht ihn wegen der ausrichtung und mipmap einfach nicht (kannst testweise mal ladeflag +256 machen)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Raoudi

BeitragMo, Apr 30, 2007 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Befehle für den Sprite lauten wie folgt:
Code: [AUSKLAPPEN]
;Erstellen
  wat.waterring = New waterring
  wat\sprite = CopyEntity(spr_waterring)
  wat\alpha = 0.75
  wat\size = 20
  SpriteViewMode wat\sprite,2
  RotateEntity wat\sprite,90,0,0
  PositionEntity wat\sprite,EntityX(bul\mesh),waterheight,EntityZ(bul\mesh)

;Schleife
For wat.waterring = Each waterring
PositionEntity wat\sprite,EntityX(wat\sprite),waterheight+1,EntityZ(wat\sprite)
If cam_inwater=1 RotateEntity wat\sprite,-90,0,0 Else RotateEntity wat\sprite,90,0,0
If wat\alpha > 0
   wat\alpha = wat\alpha-0.5*looptime
   wat\size = wat\size+20*looptime
   EntityAlpha wat\sprite,wat\alpha
   ScaleSprite wat\sprite,wat\size,wat\size
Else
   FreeEntity wat\sprite
   Delete wat
EndIf
Next


Der Ladeflag 256 behebt das Problem auch nicht.

--------

Editiert: Hier sieht man eine weitere Merkwürdigkeit: der Laserstrahl sollte eigentlich durchgehend rot sein, allerdings .. ist er es nicht.

user posted image

-------

Nochmal editiert: Wenn das Alpha des Wassers 1 oder 0 ist, funktioniert alles, sogar der Laserstrahl. Sollte aber schon transparent sein..

Silver_Knee

BeitragMi, Mai 02, 2007 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ist nur ne idee aber villeicht ligt es an deiner graka meine setzt zb gerne eine 1-pixel linie auf den bildschirm hatte mal ein thema dazu eröffnet hier un im englischen forum aber keiner sieht die linie.... villeicht liegt hier ein ähnliches problem vor
 

ChristianK

BeitragMi, Mai 02, 2007 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte da auch mal so ein Problem mit Alpha. Da werden manche Objekte bzw. Polygone in der falschen Reihenfolge angezeigt.
Versuch mal, statt Alphablending Masking zu verwenden.

NightPhoenix

BeitragFr, Mai 04, 2007 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem Wasserring Flag4 statt Flag2? Wie sieht das denn aus? ^^
Es gibt Probleme bei bestimmten Abständen der Flag2 Objekte (dein Fall Wasserringe) zum anderen Flag2 Alpha Objekt (dein Fall Wasser). Diese Z-Buffer Probleme schieben manchmal Objekte die sonst vor dem einen Alphaobjekt liegen dahinter.
Verwende für das Wasser lieber einen Mirror, oder eine Cubemap + Wassertextur... Beispiel dafür:
http://marinext.ma.funpic.de/i...being1.PNG

MfG.
 

Raoudi

BeitragSo, Mai 06, 2007 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
In Ordnung. Werde mir also die Alternativen ansehen müssen, danke für die Antworten.
 

Dreamora

BeitragSo, Mai 06, 2007 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest auch einen weiteren test einbauen. Alpha nur von 1 - 0.48
damit sollte das alpha tiefenbuffer problem, falls es es wäre, nicht eintreten.

aber dein verschwindender Laser da macht mir eigentlich mehr sorgen.

Ich würde dazu raten, double render zu nutzen um mal zu testen ob das wasser da reinfunkt.

einfach erst mal nur wasser und level rendern, restliche entity gehided.
dann camclsmode umstellen und die dynamischen objekte wie laser, wasser und dein pacman rendern oben drüber.
damit sollte es eigentlich funktionieren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group