c语言 粒子特效原理,【游戏编程】构架游戏中的粒子系统 附:现场直播+图文教程...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

在本实例中的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的教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值