-3

2Dタイルベースのマップと高さマップの画像があります。これを使用して、マップの平坦度を低くします。しかし、SFMLで使用されるGLSLは初めてです。タイルテクスチャと高さマップの一部を同じ座標または何かに渡して高さの錯覚を作成できるGLSLシェーダーを探しています。しかし、私はすべてを自分でやっていて、使用したいこの1つのシェーダーのためだけにGLSLを学ぶ時間がないので、返信をありがとう(誰かがシェーダーコードを投稿してダミーに説明してくれるといいでしょう) .cppファイルで使用)

4

3 に答える 3

0

あなたはおそらく「視差隠蔽マッピング」のテクニックに興味があるでしょう。良い実装はここにあります。

于 2011-07-05T14:08:52.490 に答える
0

これにより、画面上の Z がキックされ、高さマップのような錯覚が生じます。実際にはジオメトリは変更されません。[編集] これは、トップダウン ビューでは役に立ちません。新しい Z と光の方向に基づいて、ある種の影の効果を追加してみてください。

この行: pos.z += color.x + color.y + color.z; は Z を押すものです。scale には正または負の数値を指定できます。

/* Vertex Program
 * Shifts Z by Textures color     
 */
uniform sampler2D color_texture;
uniform float scale;
varying vec4 p_color;
void main()
{
     vec2 texcoords = gl_MultiTexCoord0.st;
     p_color = texture2D(color_texture,texcoords);
     vec4 color = texture2D(color_texture,texcoords);
     vec4 pos = gl_Vertex;
     pos.z +=  color.x + color.y + color.z;
     pos.z*=scale;
   gl_Position = gl_ModelViewProjectionMatrix * pos;
}

そして、これが非常に単純なフラグメントプログラムです..

/* Fragment Program
   Copies incoming fragment color without change.
*/
varying vec4 p_color;
 void main()
{
    gl_FragColor = p_color;
}  
于 2011-07-05T18:48:52.900 に答える
0

これは、ライトがワールド空間にある場合はいつでも、泡/ドーム形状のベースで地形メッシュを変形させます。地形がテッセレーションされているほど、結果は良くなります。

Const Float PI = 3.1415928;
vec3 vVertex = vec3( gl_Vertex);
float d = distance(lightPos , gl_Vertex);
float d2;
    if (d < 1500.0)
    {
    d2 = d/1500.0;
    d = cos(PI*2.0*d2);
    }
    else
    {
    d=0.0;
    d2=0.0;
    }
vVertex.y += (d*75.0)*(1.0-d2)-50.;

gl_Position = gl_ModelViewProjectionMatrix* vec4(vVertex,gl_Vertex.w);
于 2016-02-06T17:18:18.530 に答える