ssRenderPlugin渲染篇--车道线(二)

        继上一篇shader车道线效果,这一篇将实现动态车道线效果。上效果:

        上一篇我们利用的是三角函数sin的y随着x的变化,在-1~0~1的变化规律,改变虚线的不可见位置,我们动态改变sin函数的x参数。

        首先要解决的问题就是如何在shader中获取一个动态的参数,我们需要先定义一个uniform 类型的变量var_param,然后把参数加载三角函数的公式中。

//Fragment Shader     
char fShaderStr_my[] =
"precision mediump float;                  \n"
"varying vec2 ssUV;                        \n"
"uniform sampler2D ssTextureSampler;       \n" //【不可修改】变量名固定    
"uniform vec3 myColor;                     \n" //【自定义】变量       
"uniform float var_param = 0.0;                     \n" //【自定义】变量   
"float line_kx(vec2 st, float k, float t, float line_width) {\n"
"	float y = k*st.x + t;\n"
"	return step(y, st.y) - step(y + line_width, st.y);\n"
"}\n"
"void main()                               \n"
"{\n" 
"float alpha = (line_kx(ssUV, 4.5, -0.3, 0.2) + line_kx(ssUV, -4.5, 4.2, 0.2)) * smoothstep(0.0, 1.0, sin(30 * (ssUV.y + var_param))); \n"
"gl_FragColor = vec4(myColor, alpha);\n"
"}\n";

        然后我们需要在标准接口updateMyVar中定义var_param参数的动态变化实现,ssRender渲染引擎会自动调用updateMyVar接口,调用频率大概是每20ms调用一次,然后想要给shader中的var_param,需要调用setFloat接口,达到与shader的联动。

void UserPluginDLL::updateMyVar()
{
	//修改自定义变量的值     
	 setVec3("myColor", 1.0, 1.0, 1.0);
	 setFloat("var_param", time_index); 
	if (time_index < 100.0)
	{
		time_index += 0.005;
	}
	else
	{
		time_index = 0.0;
	}
}

二、将编译完成的Plugin加载到ssRender工具端进行调试

        当我们将代码编译完成之后,加载到ssRender Editor工具端,这样我们就可以在Preview窗口,看到我们实现的具体效果。

        本篇到此结束,下一篇我们将实现曲线的车道线效果,如果本篇内容对您有多启发,点个赞先Hi~ o(* ̄▽ ̄*)ブ!

        ssRender力争做国人自己的渲染引擎!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值