MipMapping
Re: Floatzahl manipulieren
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.)
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
PureBasic
ForEver
Re: Floatzahl manipulieren
Float für diesen Fall zu "manipulieren" geht wohl nur über Änderung der Mantisse.
Also:
Von Float sind dann die letzten 23 Bits interessant, das ist die Mantisse, also der Wert nach dem Komma:
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:
Wenn einem dieser Wert o.K. erscheint, kann der Rest der Mantisse gelöscht werden:
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
Also:
Code: Alles auswählen
f.f = 5.0 / 3.0
Debug f
Float.l = PeekL(@f)
Debug Bin(Float)
Code: Alles auswählen
10101010101010101010101
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
Code: Alles auswählen
Float & %11111111111111111100000000000000 ;auf 32-Bit Länge achten
PokeL(@f, Float) ;Wert zurückschreiben
Debug f
Gruß
Helle
Re: Floatzahl manipulieren
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
Thx und Grüsse
Alex
Repeat
PureBasic
ForEver
PureBasic
ForEver
- 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
Wahrscheinlich liegt es daran, dass bei Texturen nicht die obere linke Ecke eines Pixels angegeben werden muss, sondern der Mittelpunkt eines Pixels.
Re: Floatzahl manipulieren
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
PureBasic
ForEver
Re: Floatzahl manipulieren
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:
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".
*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
@Moderator: Thread bitte nach "Grafik & Sound Programmierung" verschieben".
Repeat
PureBasic
ForEver
PureBasic
ForEver
Re: Floatzahl manipulieren
Nicht unbedingt, dafür gibt es Mip Mapping.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.
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
Re: Floatzahl manipulieren
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)
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
PureBasic
ForEver
Re: Floatzahl manipulieren
Du kannst in deinem ersten Beitrag den Titel selber ändern.Darie hat geschrieben:...
@Mod: (falls möglich, den Thread bitte umbenennen in : Mipmapping)
Re: MipMapping
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.
Für mich heisst dass leider, den Code nochmal umschreiben, ich gönne mir aber erstmal eine kleine Pause davon.
Repeat
PureBasic
ForEver
PureBasic
ForEver