glTexGen の GLSL 置換を GL_OBJECT_LINEAR で実装するために数時間試みてきました。OpenGL ES 2.0 用。Ogl GLSL には、これを簡単にする gl_TextureMatrix がありますが、OpenGL ES 2.0 / OpenGL ES Shader Language 1.0 では利用できません。
いくつかのサイトでは、GLSL vert シェーダーでこれを行うのは「簡単」であると述べています。しかし、私はそれを機能させることができません。
私の直感では、飛行機を正しく設定していないか、私の理解に何かが欠けています。
私はウェブを熟読しました。しかし、ほとんどのサイトは投影されたテクスチャについて話しているので、平面投影に基づいて UV を作成しようとしているだけです。モデルは Maya で構築されており、50,000 個のポリゴンがあり、モデラーは平面マッピングを使用していますが、Maya は UV をエクスポートしません。だから私はこれを理解しようとしています。
glTexGen のマンページ情報を見てきました。
g = p1xo + p2yo + p3zo + p4wo
グとは?g は texture2d 呼び出しの s の値ですか?
私はサイトを見てきました:
http://www.opengl.org/wiki/Mathematics_of_glTexGen
別のサイズで同じ機能が説明されています。
座標 = P1*X + P2*Y + P3*Z + P4*W
coord (私の頭の中の UV vec2) が内積 (スカラー値) と等しいかどうかわかりませんか? 「g」で以前に発生したのと同じ問題。
飛行機を何に設定しますか?私のopengl c++ 3.0コードでは、[0、0、1、0](基本的にユニットz)に設定すると、glTexGenがうまく機能します。
私はまだ何かが欠けています。
私の頂点シェーダーは基本的に次のようになります: WVPMatrix = World View Project Matrix. POSITION はモデル頂点の位置です。
vec4 kOutBaseTCoord を変化させます。 ボイドメイン() { gl_Position = WVPMatrix * vec4(位置、1.0); vec4 sPlane = vec4(1.0, 0.0, 0.0, 0.0); vec4 tPlane = vec4(0.0, 1.0, 0.0, 0.0); vec4 rPlane = vec4(0.0, 0.0, 0.0, 0.0); vec4 qPlane = vec4(0.0, 0.0, 0.0, 0.0); kOutBaseTCoord.s = dot(vec4(POSITION, 1.0), sPlane); kOutBaseTCoord.t = dot(vec4(POSITION, 1.0), tPlane); //kOutBaseTCoord.r = dot(vec4(POSITION, 1.0), rPlane); //kOutBaseTCoord.q = dot(vec4(POSITION, 1.0), qPlane); }
フラグ シェーダー
精度中位浮動小数点数。 均一サンプラー2D BaseSampler; mediump vec4 kOutBaseTCoord を変化させます。 ボイドメイン() { //gl_FragColor = vec4(kOutBaseTCoord.st, 0.0, 1.0); gl_FragColor = texture2D(BaseSampler, kOutBaseTCoord.st); }
Fragシェーダーでtexture2DProjを試しました
ここに私が調べた他のリンクのいくつかがあります
http://www.gamedev.net/topic/407961-texgen-not-working-with-glsl-with-fixed-pipeline-is-ok/
前もって感謝します。