3d模型 平面投影

论坛改版后一直登陆不了,今天找 南塔斯反馈了一下解决了,喜大普奔,庆祝一下.分享一个干货:
cocos 3D模型的 平面投影 解决方案:

材质:

technique normal_shadow
	{
		pass normal
		{
			shader
			{
				defines = MAX_DIRECTIONAL_LIGHT_NUM 0;MAX_POINT_LIGHT_NUM 0;MAX_SPOT_LIGHT_NUM 0 //define this macro set light work
				vertexShader = shaders/3d_position_normal_skin_tex.vert
				fragmentShader = shaders/3d_color_normal_tex.frag
			}
		}
		pass shadow
		{
			renderState
			{
				cullFace = true
				depthTest = true
			}
			shader
			{
				defines = MAX_DIRECTIONAL_LIGHT_NUM 0;MAX_POINT_LIGHT_NUM 0;MAX_SPOT_LIGHT_NUM 0 //define this macro set light work
				vertexShader = shaders/3d_position_normal_skin_shadow.vert
				fragmentShader = shaders/3d_color_normal_shadow.frag
				// Uniforms
				u_planeNormal = 0.0, 1.0, 0.0//平面法线
				u_planeHeight = 0.0//平面高度
				u_lightDir = -1.0,-2.0,-1//光线方向
			}
		}
	}

顶点着色器部分代码:

void main()
{
    vec4 position;
    getPosition(position);//动画运算由GPU处理,此处获取动画中的顶点位置

    vec4 ePosition = CC_MVMatrix * position;
    ///
    /// begin Projection Coordinates Transformation
    vec4 pos = ePosition;
    float t = 0;
    //此处基于Nplane为(0,1,0)进行了优化运算,具体运算为对应后面的注释
    //t = (Nplane*Pplane - Nplane*p0)/(Nplane*Dir)
    float ndd = u_lightDir.y;//dot(u_planeNormal,u_lightDir);//
    float ndo = pos.y;//dot(u_planeNormal,vec3(pos.x,pos.y,pos.z));//
    if (ndd == 0)
    {
        t = 0;
    }    
    else
    {
        t =  (u_planeHeight-ndo) / ndd ;
    } 
    ePosition = vec4(pos.x+u_lightDir.x*t,pos.y+u_lightDir.y*t,pos.z+u_lightDir.z*t,pos.w);  
    /// end Projection Coordinates Transformation

    gl_Position = CC_PMatrix * ePosition;
}

片源着色器部分代码:

void main(void)
{
    gl_FragColor = vec4(0.105,0.086,0.071,1);//u_color;
}

效果图:

2赞

你这是打算做实时阴影了?在安卓机器上性能怎么样?目前我看到国内的3D RPG都还不敢做实时阴影上去。

呵呵,没有,这个只局限在一个固定平面上,不是真正的阴影.运行效率相当于一次普通的模型绘制.
人物不多的时候,可以考虑试试,代替目前大部分游戏里面的一个圆形贴图来做阴影的效果.
真实效果跟真正的ShadowMapping没法比.当然性能我觉得也可以接受(多画一次的性能开销)

屌炸天,看腻了圆形阴影了。

王总可以看看契约2的效果

实时阴影肯定可以的,好多都有了啊,我们连PSSM都做了,iphone6/6s无压力,虽然项目不敢用哈哈。。。

理解了,这倒是一个不错的折中办法

圆形的阴影只不过是一个假影子。。楼主这个阴影应该是平面阴影,之前整过这种

太牛X了,整天弄那个圆阴影太苦比勒.能不能分享个完整的使用示例,不胜感激! 523465280@qq.com