cocoscreator制作鱼的阴影

方法1:

常用的简单方案是使用材质,effect里输出颜色为黑色与调整下透明度就可以实现,由于使用了shader,会打断drawcall,这样我们就很难达到批渲染了,也就没法对游戏做进一步的优化了

方法2:

(1)这里介绍的是另一种解决方案,思路是在鱼身上添加一个节点,节点添加sprite,然后在update函数里重置下新节点的图片(spriteFrame)

(2)图片是有了,那怎么显示阴影,这个很简单,只要把节点颜色调成黑色,在调下透明度和位置就可以了

initShadom() {
    this.shadow = new cc.Node()
    this.shadow.color = new cc.Color(0, 0, 0)
    this.shadow.opacity = 100
    this.shadom.parent = this.node
}
update(dt) {
    let sp : cc.Sprite = this.shadow.getComponent(cc.Sprite)
    let fishSp : cc.Sprite = this.node.getComponent(cc.Sprite)
    sp.spriteFrame = fishSp.spriteFrame
       
    // 动态调整位置,这里比较简单,好一点的可以做成沿一个方向下的投影
    this.shadom.x = this.node.x + 10
    this.shadom.y = this.node.y - 10 
}

Cocos Creator 2.4 中制作阴影,首先需要了解Cocos Creator自带的Shader系统,然后编写自定义的GLSL shader脚本来处理阴影效果。这里是一个简单的例子,展示如何创建一个基础的动态阴影效果: 1. **创建精灵和材质**: 首先,你需要创建一个模型精灵,并为其添一个默认的材质。选择精灵 -> 右键 -> 创建新材质 -> 新建Standard Shader。 2. **打开Shader编辑器**: 打开“Project”面板,找到刚创建的材质,双击打开“Shader”属性,切换到"GLSL ES"标签页。 3. **编写shadow.shader**: 在Shader编辑器内,点击右下角的`+`按钮新建一个着色器片段(Fragment)。复制并粘贴下面的代码作为基础的阴影代码: ```glsl #version 300 es precision mediump float; uniform sampler2D u_Texture; uniform vec2 u_MVPMatrix[2]; // MVP矩阵,用于计算光源和像素之间的向量 // 阴影映射相关的变量 uniform sampler2D u_ShadowMap; // 阴影贴图 uniform float u_ShadowStrength; // 阴影强度 out vec4 fragColor; void main() { vec4 textureColor = texture(u_Texture, gl_FragCoord.xy); vec3 normal = normalize(texture2D(sampler2D(u_ShadowMap, 0), gl_FragCoord.xy).rgb * 2.0 - 1.0); // 转换阴影值为法线 // 计算光照方向和深度偏移 vec3 lightDir = normalize(vec3(0.0, -1.0, -5.0)); // 假设光源位于正上方 float depthOffset = (u_MVPMatrix[1].z - u_MVPMatrix[0].z) / (-lightDir.z); if(dot(normal, lightDir) > 0.9 && textureColor.a > 0.5) { // 简单的模糊判断条件 // 添阴影和原色彩 fragColor = vec4(textureColor.rgb * u_ShadowStrength + shadowColor.rgb * (1.0 - u_ShadowStrength), textureColor.a); } else { fragColor = textureColor; // 如果不在阴影区域,则直接使用原始颜色 } } ``` 4. **应用阴影模型**: 将这个shader链接到你的模型上,设置必要的uniform变量,如MVP矩阵、阴影贴图等。可以在Script组件里通过代码设置这些值。 注意:这只是一个基本示例,实际项目中可能需要根据光照、遮挡和更复杂的阴影算法调整代码。同时,阴影贴图通常需要通过渲染到纹理的方式生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值