1

そこで、クリスタルの色を時間の経過とともに少しずつ変化させるシェーダーを作成しようとしていましたが、光源から離れても暗くならないことに気付くまで、すべてうまくいきました (デフォルトの opengl ライトの今! )。そのため、光からの距離によって色の値をトーンダウンしようとしましたが、うまくいきませんでした。後で、(ワールド座標の頂点の x 位置が特定の値よりも大きい場合に色を赤に設定することにより)、vertex.x 値が約 0 であることを発見しました。

void main()
{
    vec3 vertexPosition = vec3(gl_ModelViewMatrix * vertexPos);
    vec3 surfaceNormal = (gl_NormalMatrix * normals).xyz;
    vec3 lightDirection = normalize(gl_LightSource[0].position.xyz - vertexPosition);
    float diffuseLI = max(0.0, dot(surfaceNormal, lightDirection));

    vec4 texture = texture2D(textureSample, gl_TexCoord[0]);
    if(vertexPosition.x > 0)gl_FragColor.rgba = vec4(1, 0, 0, 1);
    /*And so on....*/
}

私が知る限り、 gl_ModelViewMatrix * gl_Vertex は頂点の世界座標を与えるはずです。私はただ愚かですか、それとも何ですか?(私も正しいライト位置でif文をやろうとしました!)

4

0 に答える 0