0

奇妙な問題。私のGLSLプログラムは、ロジックや仕様が示唆するものとは異なる動作をしているようです。頂点シェーダーは次のとおりです。

#version 120

uniform mat4 q;
varying vec2 TextureCoord;

void main()
{
  gl_FrontColor = gl_Color;
  gl_TexCoord[0] = gl_MultiTexCoord0;
  vec4 p = q*gl_Vertex;
  TextureCoord = vec2(.01f,.01f);
  gl_Position= gl_ModelViewProjectionMatrix*p;
  gl_PointSize = gl_Normal.x / -p.z;
}

そして、これがフラグ シェーダです。

#version 120

uniform sampler2D theTex;
varying vec2 TextureCoord;

void main()
{
  vec2 realTexCoord = ( gl_TexCoord[0].st*vec2(0.024f,0.024f)) + TextureCoord;
  gl_FragColor = gl_Color*texture2D(theTex, realTexCoord);

}

シワはこれです。+ TextureCoord をフラグ シェーダにドロップし、(.1f,.1f) のような一定の vec2 に置き換えると、テクスチャが表示されます。しかし、このように、奇妙なガベージカラーノイズが発生します。これは、スムーズ ポイントとテクスチャ座標がオンに置き換えられた GL_POINTS です。gl_PointCoord は常にゼロなので、TexCoord[0].st を使用しています...

何が起こっているように見えますか? しかし、これはどのように起こるでしょうか?また、これらの値が頂点シェーダーとフラグメント シェーダーの間で何らかの形で「補間」されている場合、どのようなロジックが適用されるのでしょうか?

値をユニフォームに送信しようとしましたが、それも常にゼロです。

私はLWJGLを使用しています。

4

2 に答える 2

0

GPU HWとは何ですか?最新のドライバをインストールしてみましたか?別のベンダーのGPUでコードを実行してみましたか?これは、シェーダー間でバリエーションが正しくリンクされていない場合に発生する可能性があります。これは、一部のバグのある/古いOpenGL実装で発生する可能性があります。

GL_TRIANGLE_STRIPで同じことを試しましたか?ここでは、GL_POINTSトポロジのバグがあるだけかもしれません。ところで。GL_POINTSのテクスチャリングは私にとって奇妙なアイデアです。

変化は、現在のgl_Positionに従ってプリミティブを介して補間されます。GL_POINTSの場合、アセンブルされたプリミティブごとに1つの頂点があるため、補間は行わないでください。

于 2012-06-30T00:36:44.590 に答える
0

古いATIカードで同様の問題が発生しました。

メインプログラムを呼び出してみることができglTexEnvf( GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE );ます-それは私のためにgl_PointCoordを修正しました。

これがうまくいくかどうかはわかりませんが(なぜうまくいったのかわかりません...)_coord = gl_TexCoord[0].xy;、フラグメントシェーダーの最後に行を追加することで、さまざまな文字化けの問題が修正されました(_coordはそれ以外の場合は使用されていません) vec2と私は他のどこにもgl_TexCoordを呼び出しませんでした)。私はこれがフォーラムで提案されているのを見つけました、しかし私の人生のために私はそれを再び見つけることができません!

于 2012-10-03T15:41:02.310 に答える