Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

08.02.2013, 08:29

Ok. Versteh ich es also richtig, das es keine Möglichkeit gibt, die Rundungsfehler bei float Zahlen auszugleichen? Und das die einzige Lösung zu meinem Problem ist, das ich auf Fixpunktzahlen (integers) umsteige?

Ich habe in der SFML Dokumentation gelesen, dass sf::Texture intern das Format RGBA 32-Bit hat. Das bedeutet das jede Farbkomponente von einem 8-Bit Integer dargestellt wird. Also sind die Daten die ich brauche ja schon Integer. Das wiederum heißt das erst der Zugriff durch texture2D(tex, coords); floats zurück gibt. Gibt es eine Möglichkeit wie man im Shader direkt an die Integer kommt?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

22

08.02.2013, 09:51

Ok. Versteh ich es also richtig, das es keine Möglichkeit gibt, die Rundungsfehler bei float Zahlen auszugleichen? Und das die einzige Lösung zu meinem Problem ist, das ich auf Fixpunktzahlen (integers) umsteige?
Richtig. Wenn Du von "texture2D" einen Float geliefert bekommst, dann ist dort automatisch durch die Umwandlung von int (0..255) in float (0..1) sicher schon irgendwo ein Rundungsfehler passiert. Den bekommst Du auch nicht wieder weg. Vielleicht kann das aber mal jemand mit mehr numerischem Wissen bestätigen, es handelt sich immerhin um eine Division mit 255 als Divisor und ich will ungern Quatsch erzählen. Ich kann's mir aber nicht vorstellen, dass alle Zahlen von 0 bis 255 in float konvertiert und durch 255 dividiert da keine Rundsfehler erzeugen. Aber wer weiß welche Magic die GPU da macht, vielleicht macht sie es ja fehlerfrei.

Gibt es eine Möglichkeit wie man im Shader direkt an die Integer kommt?
Ist mir nicht bekannt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

08.02.2013, 12:07

Ich denk das Problem hier ist wohl, dass erstens 8 Bit einfach nicht genug Genauigkeit sind und zweitens deine 8 Bit unsigned Texture überhaupt keine negativen Zahlen speichern kann. An deiner Stelle würde ich eine float Textur verwenden, 8 Bit RGBA ist jedenfalls sicher komplett ungeeignet...

Ab Shader Model 4.0 kann man auf der GPU auch nativ mit Integern rechnen, ich bezweifle allerdings, dass das hier was bringen würde.

Werbeanzeige

Ähnliche Themen