Jack کاربر اخراج شده
تاريخ عضويت: جمعه 11 دي 1383 تعداد ارسالها: 199 محل سكونت: Earth planet
جمعه 22 ارديبهشت 1385 - 03:00 |
|
|
بازم سوالي داشتي بپرس . خوشحال مي شم بتونم جوابشو بدم
يك نمونه كد shader براي ايجاد موج روي اب .
كد: |
float4x4 mTransformation : VIEWPROJ;
float4 vMaterialColor;
float4 CurrentTime;
float4 mCameraPos;
// Set up an output structure defining the output to the pixel shader.
struct VS_OUTPUT_TEXCOORD0
{
float4 Position : POSITION;
float4 Diffuse : COLOR0;
float4 Specular : COLOR1;
float2 Texture0 : TEXCOORD0;
float2 Texture1 : TEXCOORD1;
float1 Fog: FOG;
};
VS_OUTPUT_TEXCOORD0 main
(float3 vPos : POSITION, float3 vNormal : NORMAL, float2 vTexCoord0 : TEXCOORD0)
{
float3 vTransformedPosition = {0,0,0};
VS_OUTPUT_TEXCOORD0 Output;
float3 WorkPos;
float2 mCameraOffset;
float WaterScale = 1/1000.0f;
float ViewRadius = 128;
float TileScale = 128;
float2 ScrollSpeed = float2(0.000075, 0.000075);
float2 ScrollSpeed2 = float2(0.0002, 0.0002);
float RadiusByTile = ViewRadius*2 * TileScale;
float RadiusByTileByWater = RadiusByTile * WaterScale;
float TextureRepeat = 32;
float ooTileScale = 1.0f / (TileScale*8);
mCameraOffset.x = (mCameraPos.x / TileScale) % TileScale;
mCameraOffset.y = (mCameraPos.z / TileScale) % TileScale;
WorkPos.x = ((vPos.x) * RadiusByTileByWater);
WorkPos.y = vPos.y;
WorkPos.z = ((vPos.z) * RadiusByTileByWater);
// Transform vertex position
Output.Position = mul(float4(WorkPos, 1.0f), mTransformation);
Output.Texture0.x = vTexCoord0.x*TextureRepeat + mCameraPos.x * ooTileScale;
Output.Texture0.y = vTexCoord0.y*TextureRepeat - mCameraPos.z * ooTileScale;
Output.Texture0.xy += (CurrentTime.x*ScrollSpeed) % TileScale;
Output.Texture1.x = vTexCoord0.x*TextureRepeat + mCameraPos.x * ooTileScale;
Output.Texture1.y = vTexCoord0.y*TextureRepeat - mCameraPos.z * ooTileScale;
Output.Texture1.xy += (CurrentTime.x*ScrollSpeed2) % TileScale;
// Color of material
Output.Diffuse = vMaterialColor;
// Specular color
Output.Specular = float4 (0,0,0,0);
// Fog calculation
Output.Fog.x = (RadiusByTile-Output.Position.z)/RadiusByTile;
return Output;
} |
|
|
|