Vertex Shader - 正弦波模拟

1.此DEMO没有特别之处,思路是依照DX官方的实例程序 “HLSLwithoutEffects.fx”

2.详尽的说明在程序代码注释中


源代码:

/*
 * File name : SinWave.vsh
 * Date : 2011.12.9
 * Author : Domry.X.Cui
 * Description :
 */

 // Global var
 matrix worldViewProjMat;
 float	fTime;

 // Output
 // Description :
 // 输出结构中由于需要获得顶点变化后的明暗效果,所以需要输出颜色
 // ,明暗强度根据COS值计算(这里没有使用法线与入射光角度决定明暗
 // 强度,此处主要探究如何让顶点根据正弦波运动,所以,官方可能不打
 // 算将明暗处理作复杂的计算最后导致读者不能很好的理解这个实例程序)。
 struct VS_OUTPUT
 {
	float4 position : POSITION;
	float4 diffuse	: COLOR0;
 };

 // Input
 // Description :
 // 输入结构中仅有顶点位置信息(此Shader正是仅对顶点位置进行变换)。
 struct VS_INPUT
 {
	float2 position : POSITION;
 };

 // Main.(Named Ripple)
 VS_OUTPUT Ripple(VS_INPUT input)
 {
	VS_OUTPUT output = (VS_OUTPUT)0;

	float fSin;
	float fCos;

	// 基于时间计算 正、余弦自变量
	float x = length(input.position) * sin(fTime) * 15.0f;

	// 根据计算出来的 x 值获得正弦值与余弦值
	sincos(x, fSin, fCos);

	// 将计算出来的正弦值作为引子来变换顶点位置的 Y 分量
	output.position = mul(float4(input.position.x, fSin * 0.1f, input.position.y, 1.0f), worldViewProjMat);

	// 笔者认为这是粗糙的明暗面计算,没有实际的意义
	output.diffuse = 0.5f - 0.5f * fCos;

	return output;
 };


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值