MipMapping

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Floatzahl manipulieren

Beitrag von Darie »

Oh natürlich, hatte total vergessen meinen Dropboxlink zu posten. Bin schon etwas unkonzentriert. Hier ist der komplette Sims https://www.dropbox.com/s/c703hwjcmvdxd ... blocks.zip. Ich habe auch noch einen anderen Bug entfernt, die schwarzen Linien zwischen
den Texturen sind aber leider immer noch vorhanden (ich hatte das Problem ein paar Programmversionen davor schon einmal berichtigt, aber der aktuelle Code sieht anders aus und ich vermute, dass
es mit den UV-Koordinaten bzw. mit deren Nachkommastellen zu tun hat.)
Repeat
PureBasic
ForEver
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Re: Floatzahl manipulieren

Beitrag von Helle »

Float für diesen Fall zu "manipulieren" geht wohl nur über Änderung der Mantisse.
Also:

Code: Alles auswählen

f.f = 5.0 / 3.0
Debug f
Float.l = PeekL(@f)
Debug Bin(Float)
Von Float sind dann die letzten 23 Bits interessant, das ist die Mantisse, also der Wert nach dem Komma:

Code: Alles auswählen

10101010101010101010101
Das MSB (also das linke Bit) repräsentiert den Wert 2^-1 = 0.5, das nächste Bit 2^-2 = 0.25 usw. Die Werte werden dann einfach addiert:

Code: Alles auswählen

10101010101010101010101 =
1*0.5
0*0.25
1*0.125
0*0.0625
1*0.03125
0*0.015625
1*0.0078125
0*0.00390625
1*0.001953125 = 0.666015625
Wenn einem dieser Wert o.K. erscheint, kann der Rest der Mantisse gelöscht werden:

Code: Alles auswählen

Float & %11111111111111111100000000000000 ;auf 32-Bit Länge achten
PokeL(@f, Float) ;Wert zurückschreiben
Debug f
Wenn der Wert doch noch nicht gefällt, kann der obige letzte Wert auf Null gesetzt werden (Bit löschen) und dafür das nächste Bit gesetzt werden usw. Wäre eine schöne Optimierungs-Aufgabe!
Gruß
Helle
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Floatzahl manipulieren

Beitrag von Darie »

Danke, du hast das mit den Floats wirklich gut erklärt, Helle. Hab das direkt mal an meinem Code ausprobiert und festgestellt, dass es doch nicht an den Float-Nachkommastellen liegt. Daher habe ich den Hintergrund der Textur testweise mal gelb gemacht, man sieht dann sehr gut, dass die UV-Koordinaten nicht genau auf dem letzten Pixel der Textur liegen, sondern etwas darüber. Ich weiss jedoch nicht, woran das liegt.

Thx und Grüsse

Alex
Repeat
PureBasic
ForEver
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Floatzahl manipulieren

Beitrag von NicTheQuick »

Wahrscheinlich liegt es daran, dass bei Texturen nicht die obere linke Ecke eines Pixels angegeben werden muss, sondern der Mittelpunkt eines Pixels.
Bild
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Floatzahl manipulieren

Beitrag von Darie »

Dann frage ich mich, wie man das richtig berechnet. Ich habe das bisher so gemacht (als Texturatlas, daher Amount = Anzahl der Texturen für V-Koordinate und umt für U-Koord.)

Code: Alles auswählen

u.f =  1/6 * u.f + (umt*(1/6)) 
v.f = 1/amount * id - 1/amount * v.f
Repeat
PureBasic
ForEver
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Floatzahl manipulieren

Beitrag von Darie »

Stargate hatte recht: es liegt an der Filterung der Texturen. Hab auch einen Link gefunden, wo dasselbe Problem diskutiert wird (http://www.informatik-forum.at/showthre ... oordinaten. Die U-Koordinate etwas zu verkleinern, behebt mein Problem leider nicht.

*EDIT: Es geht doch, so hab ich das Problem gelöst:

Code: Alles auswählen

If u.f = 0.0 : tex.f =  0.005 : Else : tex.f = -0.005 : EndIf
u.f =  (1.0/6.0 * u.f + (umt*(1.0/6.0))) + tex.f
If v.f=1.0:v.f=0.0:Else:v.f=1.0:EndIf
If v.f = 0.0 : tex.f =  -0.005 : Else : tex.f = 0.005 : EndIf
v.f = (1.0/amount * id - 1.0/amount * v.f ) + tex.f
Da ich den Submeshes verschiedene Materialien zuweisen will, bin ich leider auf den Texturatlas angewiesen. Wenn man sich weit vom Objekt entfernt, dann sieht man die interpolierten Pixel wieder. Die Lösung ist also nicht ganz optimal. Bei nur einer Textur pro Material sah das einfach besser aus. Naja, muss ich wohl mit Leben. Dankeschön noch!

@Moderator: Thread bitte nach "Grafik & Sound Programmierung" verschieben".
Repeat
PureBasic
ForEver
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

Re: Floatzahl manipulieren

Beitrag von Rebon »

Darie hat geschrieben:Wenn man sich weit vom Objekt entfernt, dann sieht man die interpolierten Pixel wieder. Die Lösung ist also nicht ganz optimal. Bei nur einer Textur pro Material sah das einfach besser aus. Naja, muss ich wohl mit Leben.
Nicht unbedingt, dafür gibt es Mip Mapping.
http://de.wikipedia.org/wiki/Mip_Mapping
Aber frag mich bitte nicht ob und wie dies in PB funktioniert. In dem Wiki Artikel wird am Ende auch noch auf andere Filter verlinkt die ebenso wichtig sind.

Ich kenne das meiste davon aber auch nur aus der Sicht des Konsumenten.
PB 4.00 | Windows XP Home SP3
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Floatzahl manipulieren

Beitrag von Darie »

Soweit ich das aus der Ogre-Wiki entnehmen kann, generiert Ogre die Mipmaps automatisch. Mir ist nur unklar, wie ich das überprüfen könnte. Ich glaube für MipMaps sollten
Texturen auch quadratisch sein, dass ist bei mir nicht der Fall. Falls jemand weiss, wie es mit dem Mipmapping für PB aussieht, wäre ich dankbar. Ich hab auch schon ein wenig
mit einem Materialskript herumgespielt (mipmapbias, filtering etc.), habe aber nichts damit erreicht.

Naja, vielleicht sollte man für 3D Programmierung doch lieber C++ oder C#, vielleicht auch Java lernen... Gute Nacht!




@Mod: (falls möglich, den Thread bitte umbenennen in : Mipmapping)
Repeat
PureBasic
ForEver
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Floatzahl manipulieren

Beitrag von Lord »

Darie hat geschrieben:...
@Mod: (falls möglich, den Thread bitte umbenennen in : Mipmapping)
Du kannst in deinem ersten Beitrag den Titel selber ändern. :wink:
Bild
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: MipMapping

Beitrag von Darie »

Danke, Lord. Das wusste ich noch nicht. Hab auch herausgefunden, dass Ogre von quadratische Texturen automatisch MipMaps erstellt und die Filterung sieht damit wieder gut aus.
Für mich heisst dass leider, den Code nochmal umschreiben, ich gönne mir aber erstmal eine kleine Pause davon.
Repeat
PureBasic
ForEver
Antworten