![]() |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe testweise mal die zoomfähige TSpriteEngineEx durch die normale TSpriteEngine ersetzt und den Quellcode entsprechend angepasst. Kostete Nerven und überhaupt nichts gebracht, die Lücken sind nach wie vor da :kotz:.
Das OpenGL-Plugin ist überhaupt nicht nutzbar (nur Fehlermeldungen mit Speicheradressen, nichts verwendbares bis jetzt), so dass ich Fins OpenGL-Befehle nicht testen kann. Immerhin habe ich etwas neues gefunden: Beim Scrollen fällt auf, dass selbst bei einem Zoom von 1.0 - also eigentlich keinem Zoom - es eine Art "Linie" gibt, entlang derer die Texturen verzerrt werden, so als ob die Projektion doch nicht 1:1 ist. Ich habe mal einen Screenshot angehangen und die Stellen markiert. Bewege ich die Kamera wandern diese Verzerrungen entsprechend mit. Ich hoffe das sagt Euch mehr als mir. Edit: Habe gemerkt, dass es mehrere solcher Linien gibt, die alle einen festen Abstand haben (der in etwa den Lücken zwischen den Sprites entspricht und daher immer nur eine Linie auf eine diagonale Feldkante Feld und sichtbar ist) |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Und der Vorschlag die Sprites ein Pixel überlappen zu lassen .. kann da was schlimmes bei rauskommen?
Wenn man den Bildern die selben Randpixel verpaßt, sollte es doch nicht auffallen. PS: Bei dem einen Beispielbild da oben wo es einmal mit und dann ohne diese Linien sein soll. Wenn man ganz genau hinsieht, dann sieht man in beiden Bildern diese Linie ... in der einen halt nur als "schwacher Schatten". |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Das Überlappen ist eine Lösung, aber keine schöne. Ich würde schon gerne wissen, wo das Problem liegt. Beim Hintergrund kann ich mit der Überlappung leben, auch wenn dann die Randanpassung der Texturen nahezu unnötig war. Aber was ist, wenn ich diese Streifen wieder in einer Situation habe, wo ich nicht überlappen lassen kann. Außerdem würde ich auch gerne diese Verzerrung loswerden und ich vermute, es ist beides das gleiche Problem.
|
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Zitat:
Treiber-Schweinereien können teilweise auch sowas auslösen :D Bei mir laufen auf allen Rechnern, auf denen ich es bisher getestet habe (6 Stück) die Andorra-Demos einwandfrei mit OpenGL. (GeForce-, ATI-, Intel-Karten..ok, auf den Intel gehen die Shader-Demos nicht, aber das ist ja klar :)) Ansonsten...leider stecke ich in Andorra nicht drin, sprich ich habe noch nie damit gearbeitet / programmiert. Bevor ich mich jetzt da aber komplett auf die Schnelle einlese, wäre ein kleines Demo-Projekt wohl das Beste, um gemeinsam auf die Fehlersuche gehen zu können. Wenn ein Projekt läuft und ich es kompilieren kann, dann kann ich auch zum "Unit-Diving" übergreifen :D Edit: Ich habe auch schon öfters feststellen müssen, dass auf manchen Grafikkarten der VSync schuld ist, wenn Texturen so ähnlich verzerrt werden, wie es in deinem Screenshot sichtbar ist. Man sieht z.B. bei der GeForce 8er-Serie ziemlich oft bei Shootern / MMOs, wie sich Texturen während des Laufens in der vertikalen Bildschirmmitte zusammenschieben und auseinanderreissen, wenn der VSync aktiviert ist, gerade bei DirectX ist mir das besonders aufgefallen. Zwar halte ich es in deinem Fall für unwahrscheinlich, da die äusseren Umstände dafür in deinem Projekt nicht gegeben sind (nur bei schneller Bewegung sichtbar, Betrachtungswinkel auf die Textur >80°, perspektivische Kamera), aber schalte ihn doch einfach mal aus und schau, ob sich dabei etwas ändert. |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Der VSync war ein guter Tipp :thumb:. Habe den über die Nvidia-Systemsteuerung mal mit "Immer aus" vorgegeben und *tata*: Die Verzerrungen sind schonmal weg. Die Lücken sind leider geblieben (wäre auch zu einfach gewesen).
Karte ist eine Nvidia Geforce 9800GT, Treiber sind die aktuellsten Nvidia 258.96 . |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Liste der Anhänge anzeigen (Anzahl: 1)
So, habe das Demoprojekt fertig. Du brauchst natürlich noch die DirectX- bzw. OpenGL-DLLs aus dem Andorra-Paket (und Andorra selbst um es zu kompilieren). Ansonsten müsste alles dabei sein und ich habe versucht es auf das Wesentliche zu reduzieren.
Edit: Im Form-Create ist auch eine auskommentierte Variante für die OpenGL-DLL von Andorra. Wenn ich diese nehme, dann hagelt es Speicherfehler (ohne Exception). Wäre interessant, ob ihr das auch reproduzieren könnt |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Ok, läuft, und ich habe die Lücken auch!
Eine Frage: Wie bekomme ich die Bilder denn aus der .ail exportiert? Ich würde die gerne exportieren, um sie mir an den Rändern mal und wegen der Bemaßung anzusehen. (keine Sorge, ich brauch deine Bilder nicht! ;)) |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
Liste der Anhänge anzeigen (Anzahl: 1)
Theoretisch mit dem Andorra ImageEditor, aber der exportiert soweit ich weiß nur BMP kein PNG mit Alphakanal. Habe die Bilder mal angehangen.
Wenn es ein Fehler in der Bemaßung wäre, ist das zwar peinlich, aber der wäre ja noch verhältnismäßig leicht zu korrigieren. |
AW: [Andorra] Verschwindende Lücken zwischen Sprites
*wuselwusel*
Aaaalso....irgendwie liegt das an der Konstanten "AdTextureOffset", die von Andorra in der DX3DMain.pas plötzlich beim Initialisieren auf 0.5 statt 0.0 gesetzt wird und deswegen die Texturen "unsauber" skaliert / positioniert werden (in TAdCustomImage.SetSrcRegion) Ich hab den Grund für das 0.5 Offset noch nicht gefunden, allerdings funktioniert es bei mir, wenn ich
Delphi-Quellcode:
nach
AdTextureOffset := 0 ;
Delphi-Quellcode:
setze, also:
SpriteEngine.Zoom := 1.0;
Delphi-Quellcode:
Ich glaube, für die Erklärung muss Igel sich zu Wort melden, warum in der DX3DMain das Texturen-Offset auf 0,5 gesetzt wird, statt auf 0.0, ich bin auch nicht so DirectX-firm :):
procedure TEditorForm.ResizeAndorra(Sender: TObject);
{ Wird ausgelöst, wenn die größe des Fensters verändert wird. Dann muss Andorra neu initialisiert werden, da sonst die Darstellung verzerrt ist } begin if Draw.Initialized then begin Draw.Setup2DScene; Draw.Restore; SpriteEngine.Zoom := 1.0; AdTextureOffset := 0 ; // <----------- HIER! Center := Point(ClientOrigin.X + (Width div 2), ClientOrigin.Y + (Height div 2)); end; end;
Delphi-Quellcode:
function TDXApplication.GetTextureOffset: single;
begin result := 0.5; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz