该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在本实例中的HLSL代码如下(实现花的旋转效果)
float4x4 g_matWorldViewProj; // 世界/视图/投影变换矩阵
float g_texCutNumU = 1.0; //u坐标
float g_texCutNumV = 1.0; //v坐标
struct Particle {
float angle;
float texIndexU;
float texIndexV;
};
struct VS_INPUT { //顶点结构输入
float4 position : POSITION;
Particle particle : NORMAL;
float size : PSIZE;
float4 color : COLOR0;
};
struct VS_OUTPUT { //顶点输出结构
float4 position : POSITION;
float size : PSIZE;
float4 color : COLOR0;
float4 cossin : COLOR1;
float2 uv0 : TEXCOORD0;
}; const float PI = 3.1415926535;
VS_OUTPUT vs_main(VS_INPUT input) { VS_OUTPUT output;
output.position = mul(input.position, g_matWorldViewProj);
output.size = input.size;
output.color = input.color;
float angle = -input.particle.angle;
float cosne = cos(angle);
float sinne = sin(angle);
if(cosne >= 0.0){
output.cossin.x = cosne;
output.cossin.z = 0;
}else{
output.cossin.x = -cosne;
output.cossin.z = 1;
}
if(sinne >= 0.0){
output.cossin.y = sinne;
output.cossin.w = 0;
}else{
output.cossin.y = -sinne;
output.cossin.w = 1;
}
output.uv0 = 0.5; // 要有
return output;
} //const float PI = 3.14159265; sampler samp0 = sampler_state {
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
};
struct PS_INPUT { //像素着色器输入
float4 color : COLOR0;
float4 cossin : COLOR1;
float2 uv0 : TEXCOORD0;
};
float4 ps_main(PS_INPUT input) : COLOR0 {
float cosne = input.cossin.x;
float sinne = input.cossin.y;
if(input.cossin.z != 0.0){
cosne = -cosne;
}
if(input.cossin.w != 0.0){
sinne = -sinne;
}
float u = input.uv0.x - 0.5;
float v = input.uv0.y - 0.5;
float2 uv;
uv.x = u * cosne - v * sinne + 0.5; //计算旋转的关键代码
uv.y = u * sinne + v * cosne + 0.5;
return input.color * tex2D(samp0, uv); //纹理采样
}
technique techParticle { //技术定义
pass pass0 { //这里是Pass
VertexShader = compile vs_2_0 vs_main();
PixelShader = compile ps_2_0 ps_main();
}
}
//假如此帖能火的话,下次我就上GPU汇编与HLSL的教程