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

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

1

20.01.2010, 21:55

Merkwürdiges Shader-Problem

Hallo

Ich habe in einem Fragment-Shader folgende Zeile:

C-/C++-Quelltext

1
float specular_coefficient = pow( max( dot( half_vector, normal ), 0.0 ), channels2.z );


Der Wert von channels2.z wird über eine Textur eingelesen und hat den korrekten Wert 6.0, wie ich durch ein Ersetzen dieser Zeile mit den folgenden überprüft habe:

C-/C++-Quelltext

1
2
float specular_coefficient = (channels2.z == 6.0 ? 1.0 : 0.1);
gl_FragColor = vec4( specular_coefficient, specular_coefficient, specular_coefficient, 1.0 );


Jedenfalls erkenne ich beim Rendern mit der Original-Zeile unerwartete weiße Ränder:


(Link)


Ersetze ich die Zeile jedoch durch folgende (also channels2.z durch 6.0), verschwinden die weißen Umrandungen:

C-/C++-Quelltext

1
float specular_coefficient = pow( max( dot( half_vector, normal ), 0.0 ), 6.0 );


Kann mir das jemand erklären?

Vielen Dank im Voraus
<< an dieser Stelle ist eine Signatur verstorben >>

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

2

20.01.2010, 22:37

Nutzt du Mip Maps? Wenn ja, sind die Mip Levels alle korrekt generiert / geladen worden? Zeig mal den Code, der aus der Textur liest.
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

3

20.01.2010, 22:47

Nope keine MipMaps, nur lineare Filterung.
Gelesen aus der Textur wird ganz einfach mit:

C-/C++-Quelltext

1
2
3
vec4 channels0 = texture2D( texture0, gl_TexCoord[0].xy );
vec4 channels1 = texture2D( texture1, gl_TexCoord[0].xy );
vec4 channels2 = texture2D( texture2, gl_TexCoord[0].xy );


Dass in allen drei Fällen dieselben Texturkoordinaten verwendet werden, ist beabsichtigt.

Könntest es trotzdem irgendwas mit der Texturfilterung zu tun haben? Auch wenn ich jetzt selbst nich wirklich wüsste, was...

EDIT: Tatsächlich, mit GL_NEAREST an Stelle von GL_LINEAR funkt es. Aber verstehen warum, tu ich dennoch nicht :?:
<< an dieser Stelle ist eine Signatur verstorben >>

Werbeanzeige