屈折についての質問があります。OpenGL屈折、テクスチャが楕円体オブジェクト上で繰り返されています
屈折のためにテクスチャ画像(refertest_car.png)を使用しています。
しかし、何とか質感は私は、次のシェーダを使用しています乗じとgivinga歪んだ画像(Screenshot.pngを参照してください)
なっています。
attribute highp vec4 vertex;
attribute mediump vec3 normal;
uniformhighp mat4 matrix;
uniformhighp vec3 diffuse_color;
uniformhighp mat3 matrixIT;
uniformmediump mat4 matrixMV;
uniformmediump vec3 EyePosModel;
uniformmediump vec3 LightDirModel;
varyingmediump vec4 color;
constmediump float cShininess = 3.0;
constmediump float cRIR = 1.015;
varyingmediump vec2 RefractCoord;
vec3 SpecularColor= vec3(1.0,1.0,1.0);
voidmain(void)
{
vec3 toLight = normalize(vec3(1.0,1.0,1.0));
mediump vec3 eyeDirModel = normalize(vertex.xyz -EyePosModel);
mediump vec3 refractDir =refract(eyeDirModel,normal, cRIR);
refractDir = (matrix * vec4(refractDir, 0.0)).xyw;
RefractCoord = 0.5 * (refractDir.xy/refractDir.z) + 0.5;
vec3 normal_cal = normalize(matrixIT *normal);
float NDotL = max(dot(normal_cal, toLight), 0.0);
vec4 ecPosition = normalize(matrixMV * vertex);
vec3 eyeDir = vec3(1.0,1.0,1.0);
float NDotH = 0.0;
vec3 SpecularLight = vec3(0.0,0.0,0.0);
if(NDotL > 0.0)
{
vec3 halfVector = normalize(eyeDirModel + LightDirModel);
float NDotH = max(dot(normal_cal, halfVector), 0.0);
float specular =pow(NDotH,3.0);
SpecularLight = specular * SpecularColor;
}
color = vec4((NDotL * diffuse_color.xyz) + (SpecularLight.xyz) ,1.0);
gl_Position = matrix * vertex;
}
そして
varyingmediump vec2 RefractCoord;
uniformsampler2D sTexture;
varyingmediump vec4 color;
voidmain(void)
{
lowp vec3 refractColor = texture2D(sTexture,RefractCoord).rgb;
gl_FragColor = vec4(color.xyz + refractColor,1.0);
}
誰も私がこの問題の解決策を知っていることはできますか?
ありがとうございました。
申し訳ありませんが、画像を添付できません。
refractColorの計算は完全にうまくいっていて、本当に問題を引き起こしているのはRefractCoordだけなのでしょうか?イメージをどこかにアップロードできるのであれば、私はあなたのためにそれを添付することができます - 私は彼らが評判が一定量以下の人々のためにイメージを無効にすると思います。 – Tommy