游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2104|回复: 2

各位大虾,帮我把它翻译成HLSL,谢谢了

[复制链接]

65

主题

225

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
发表于 2005-7-15 14:36:00 | 显示全部楼层 |阅读模式
//vertex shader for grass..
//sinusoidal vertex motion for waving grass
//pos + sumOverI(wavedirI * texcoordy * sin( xdirI * (xpos+time)) + ydirI * (ypos+time)))
// v0   - Vertex Position
// v7   - Vertex Texture Data u,v
// c0  - commonConst ( 0.0, 0.5, 1.0, 2.0);
// c1  - appConst( time, 0.0, 0.0, 0.0);
// c4  - Composite World-View-Projection Matrix
// c8  - sin9 ( -1/3!, 1/5!, -1/7!, 1/9! )
// c10 - frcFixup ( 1.07, 0.0, 0.0, 0.0)
// c11 - waveDistortx ( 3.0, 0.4, 0.0, 0.3)
// c12 - waveDistorty ( 3.0, 0.4, 0.0, 0.3)
// c13 - waveDistortz ( -1.0, -0.133, -0.333, -0.10)
// c14 - waveDirx ( -0.006, -0.012, 0.024, 0.048)
// c15 - waveDiry ( -0.003, -0.006, -0.012, -0.048)
// c16 - waveSpeed ( 0.3, 0.6, 0.7, 1.4)
// c17 - piVector (4.0, pi/2, pi, pi*2)
// c18 - lightingWaveScale ( 0.35, 0.10, 0.10, 0.03);
// c19 - lightingScaleBias ( 0.6, 0.7, 0.2, 0.0);

vs.1.1

mul r0, c14, v0.x     // use vertex pos x as inputs to sinusoidal warp
mad r0, c15, v0.y, r0 // use vertex pos y as inputs to sinusoidal warp

mov r1, c1.x          // get current time
mad r0, r1, c16, r0   // add scaled time to move bumps according to speed
frc r0.xy, r0         // take frac of all 4 components
frc r1.xy, r0.zwzw    //
mov r0.zw, r1.xyxy    //
   
mul r0, r0, c10.x     // multiply by fixup factor (due to inaccuracy of taylor series)
sub r0, r0, c0.y      // subtract 0.5
mul r1, r0, c17.w     // *=2pi coords range from(-pi to pi)
   
mul r2, r1, r1        // (wave vec)^2
mul r3, r2, r1        // (wave vec)^3
mul r5, r3, r2        // (wave vec)^5
mul r7, r5, r2        // (wave vec)^7
mul r9, r7, r2        // (wave vec)^9
   
mad r0, r3, c8.x, r1  //(wave vec) - ((wave vec)^3)/3!
mad r0, r5, c8.y, r0  //  + ((wave vec)^5)/5!
mad r0, r7, c8.z, r0  //  - ((wave vec)^7)/7!
mad r0, r9, c8.w, r0  //  - ((wave vec)^9)/9!
   
dp4 r3.x, r0, c11
dp4 r3.y, r0, c12
dp4 r3.zw, r0, c13

sub r4, c0.z, v7.y
mul r4, r4, r4      
mul r3, r3, r4        // attenuate sinusoidal warping by (1-tex0.y)^2  

mov r2.w, v0
add r2.xyz, r3, v0          // add sinusoidal warping to grass position

m4x4 oPos, r2, c4
dp4  r1.x, r0, c18                           //scale and add sin waves together
mad  oD0, c19.xzxz, -r1.x, c19.y        //scale and bias color values (green is scaled more // than red and blue)
mov  oT0, v7                       

414

主题

611

帖子

621

积分

高级会员

Rank: 4

积分
621
发表于 2005-7-16 10:59:00 | 显示全部楼层

Re:各位大虾,帮我把它翻译成HLSL,谢谢了

?在9.0c已??成高??言了

65

主题

225

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
 楼主| 发表于 2005-7-18 14:28:00 | 显示全部楼层

Re:各位大虾,帮我把它翻译成HLSL,谢谢了

void vs_Grass( float4 InputPos : POSITION ,
               float2 Tex : TEXCOORD0 ,
               out float4 oPos : POSITION ,
               out float2 oTex : TEXCOORD0 ,
               out float4 oColor : COLOR)
{
        // use vertex pos x as inputs to sinusoidal warp
        //mul r0, c14, v0.x
        float4 waveDirx = float4( -0.006, -0.012, 0.024, 0.048 );
        float4 R0 = mul( waveDirx , InputPos.x );
        // use vertex pos y as inputs to sinusoidal warp  //mad dst, src0, src1, src2 (src0 * src1) + src2
        //mad r0, c15, v0.y, r0
        float4 waveDiry = float4( -0.003, -0.006, -0.012, -0.048 );
        R0 = mul( waveDiry , InputPos.y ) + R0 ;
        // get current time

        // add scaled time to move bumps according to speed
        //mov r1, c1.x
        //mad r0, r1, c16, r0
        float4 WaveSpeed = float4( 0.3, 0.6, 0.7, 1.4 );
        R0 = mul( g_fTime , WaveSpeed ) + R0;
        // take frac of all 4 components
        //frc r0.xy, r0
        //frc r1.xy, r0.zwzw
    //mov r0.zw, r1.xyxy
        R0.x = R0.x - (float)floor(R0.x);
        R0.y = R0.y - (float)floor(R0.y);
        R0.z = R0.z - (float)floor(R0.z);
        R0.w = R0.w - (float)floor(R0.w);
          
        // multiply by fixup factor (due to inaccuracy of taylor series)
        //mul r0, r0, c10.x
        R0 *= 1.07f;
        // subtract 0.5
        //sub r0, r0, c0.y
        R0 -= 0.5f;
        // *=2pi coords range from(-pi to pi)
        //mul r1, r0, c17.w
        float4 wavev = R0*(3.14159265*2.0);

        //mul r2, r1, r1        // (wave vec)^2
        //mul r3, r2, r1        // (wave vec)^3
        //mul r5, r3, r2        // (wave vec)^5
        //mul r7, r5, r2        // (wave vec)^7
        //mul r9, r7, r2        // (wave vec)^9
        float4 wavew[5];
        wavew[0] = wavev * wavev;
        wavew[1] = wavew[0] * wavev;
        wavew[2] = wavew[1] * wavew[0];
        wavew[3] = wavew[2] * wavew[0];
        wavew[4] = wavew[3] * wavew[0];
          
        //mad r0, r3, c8.x, r1  //(wave vec) - ((wave vec)^3)/3!
        //mad r0, r5, c8.y, r0  //  + ((wave vec)^5)/5!
        //mad r0, r7, c8.z, r0  //  - ((wave vec)^7)/7!
        //mad r0, r9, c8.w, r0  //  - ((wave vec)^9)/9!
        float4 v = ( wavew[1] * (-0.16161616f) ) + wavev;
        v = ( wavew[2] * 0.0083333f ) + v;
        v = ( wavew[3] * (-0.00019841f) ) + v;
        v = ( wavew[4] * 0.000002755731f ) + v;

        //dp4 r3.x, r0, c11
        //dp4 r3.y, r0, c12
        //dp4 r3.zw, r0, c13
        float4 v2=1;
        v2.x = dot(v , float4( 3.0, 0.4, 0.0, 0.3) );
        v2.y = dot(v , float4( 3.0, 0.4, 0.0, 0.3) );
        v2.z = dot(v , float4( -1.0, -0.133, -0.333, -0.10 ) );
        v2.w = v2.z;
          
        // attenuate sinusoidal warping by (1-tex0.y)^2  
        //sub r4, c0.z, v7.y
        //mul r4, r4, r4      
        //mul r3, r3, r4
        float s = 1.0f - Tex.y;
        v2 = v2 * ( s*s );


        // add sinusoidal warping to grass position
        //mov r2.w, v0
        //add r2.xyz, r3, v0
        wavew[0].w = InputPos.w;
        wavew[0].xyz = v2 + InputPos;

        //m4x4 oPos, r2, c4
        oPos = mul(wavew[0],g_WVP);
        //scale and add sin waves together
        //dp4  r1.x, r0, c18
        float f= dot(v,float4( 0.35, 0.10, 0.10, 0.03) );
        //scale and bias color values (green is scaled more // than red and blue)
        //mad  oD0, c19.xzxz, -r1.x, c19.y
        oColor = float4( 0.6, 0.2, 0.6, 0.2) * (-f) +0.7f;       
        oColor.a = 1.0f;
        //mov  oT0, v7       
        oTex = Tex;
}

好人真是越来越少了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 11:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表