threejs精灵Sprite。通过canvas创建2d和3d的模型材质

Sprite精灵

Sprite叫精灵,计算机图形学中,精灵指包含于场景中的二维图像或动画(wiki)。在threejs中,这样说明Sprtite(doc) :
A sprite is a plane that always faces towards the camera , generally with a partially transparent texture applied.Sprites do not cast shadows.
即Sprite是一个永远面向相机的平面,通常用来加载纹理,并且,sprite不接受阴影。要直观看体会Sprite,可以点击Sprite例子。

使用Sprite创建2D形状
Sprite叫精灵,计算机图形学中,精灵指包含于场景中的二维图像或动画(wiki)。在threejs中,可以使用Sprite加载图像纹理,当然也包括用canvas创建的纹理,因此,canvas能创建什么图像,Sprite就能创建什么形状。下面的例子使用Sprite创建了一个圆:

function createSpriteShape(){
       /*1、创建一个画布,记得设置画布的宽高,否则将使用默认宽高,有可能会导致图像显示变形*/
        let canvas = document.createElement("canvas");
        canvas.width = 120;
        canvas.height = 120;
        /*2、创建图形,这部分可以去看w3c canvas教程*/
        let ctx = canvas.getContext("2d");
        ctx.fillStyle = "#ff0000";
        ctx.arc(50,50,50,0,2*Math.PI);
        ctx.fill();
        /*3、将canvas作为纹理,创建Sprite*/
        let texture = new THREE.Texture(canvas);
        texture.needsUpdate = true; //注意这句不能少
        let material = new THREE.SpriteMaterial({map:texture});
        let mesh = new THREE.Sprite(material);
        /*4、放大图片,每个精灵有自己的大小,默认情况下都是很小的,如果你不放大,基本是看不到的*/
        mesh.scale.set(100,100,1);
        return mesh;
}
//使用Sprite创建文字
function createSpriteText(){
        //先用画布将文字画出
        let canvas = document.createElement("canvas");
        let ctx = canvas.getContext("2d");
        ctx.fillStyle = "#ffff00";
        ctx.font = "Bold 100px Arial";
        ctx.lineWidth = 4;
        ctx.fillText("ABCDRE",4,104);
        let texture = new THREE.Texture(canvas);
        texture.needsUpdate = true;
        
       使用Sprite显示文字
        let material = new THREE.SpriteMaterial({map:texture});
        let textObj = new THREE.Sprite(material);
         textObj.scale.set(0.5 * 100, 0.25 * 100, 0.75 * 100);
        textObj.position.set(0,0,98);
        return textObj;
}

设置材质透明
使用图片或canvas作为纹理的时候,图片或纹理的底图可能会遮住别的图形,如下:

此时,可以将材质设为透明,如下:
let material = new THREE.SpriteMaterial({map:texture,transparent:true});
设置后效果如下:

参考的文献:https://teakki.com/pe/58a3c1c4f0d40775548c8e9b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值