threejs精灵(Sprite)

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**});

设置后效果如下:


持续更新【Sprite精灵】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

threejs加载3D模型例子

加载3D模型 首先要引入ColladaLoader加载器,Collada是一个3D模型交换方案,即不同的3D模型可以通过Collada进行相互转换,言外之意,threejs可以使用Collada将3D模型的数据转换成自己支持的格式,从而在浏览器上渲染出来。…

threejs纹理

纹理 纹理用来表现物体的细节。理论上可以将物体的每个细节建模出来,但是这样时间成本和性能成本都太高,因此,将物体的一些细节用纹理来表示。 图片纹理 图片纹理直接在物体表面应用图片。可以使用TextureLoader类的load方法来加载纹理。 …

threejs对象拾取

对象拾取 对象拾取也就是要获得鼠标事件发生位置的图形对象。在threejs中,是通过Raycaster 对象来拾取对象的,ray是射线,caster是投射器,从字面上即可理解其工作原理是:从某个方向发射一条射线,穿过鼠标所…

threejs指定对象旋转中心

指定对象旋转中心 默认情况下,对象的旋转中心都是自身的中心。对于组对象而言,也是如此。因此,可以利用这个特点,实现对象绕任何点旋转,也就是指定旋转中心。比如我们想要下图的对象绕A点旋转 我们可以添加我们的对…

threejs设置对象层次

设置层次 threejs提供了层次的支持。和相机处于同一层次的对象可见,否则不可见。在threejs中,最多可以设置32层,默认的层次是1。层次在有些系统中很有用,可以将不同的模式的对象设成不同的层次,这样,切换模…

Text段、Data段和BSS段

不同的compiler在编译的过程中对于存储的分配可能略有不同,但基本结构大致相同。 大体上可分为三段:Text段、Data段和BSS段。 text段用于存放代码,通常情况下在内存中被映射为只读,但data和bss是可写的。 数据存放通常分成如下几个…

threejs渲染器剔除模式

渲染器剔除模式 渲染器可以设置成舍弃某些面,如前面、背面等,在【WebGLRenderer Constants】中对此有说明。默认情况下,是剔除掉背面,也就是背对着相机的面。下面看看例子: 首先创建一个正方形,给每个面不…

threejs路径

路径 引用百度百科的解释: 路径通常指存在于多种计算机图形设计软件中的以贝塞尔曲线为理论基础的区域绘制方式。路径在Canvas、SVG上都有相关定义,一般用来创建形状。在threejs中,也可以用来创建形状,除此之外,还可…

OpenGL ES 纹理设置

纹理过滤纹理采样最近点采样线性纹理采样MIPMAP纹理纹理过滤 纹理拉伸:重复拉伸和截取拉伸 用于指定纹理坐标超过(00.0,1.0)范围时所发生的行为,使用glTexParameterf函数指定,GL_TEXTURE_WRAP_S 定义 s 坐标超出范围[0.0, 1.0]的情况&#xf…

ubuntu联网不稳定,时断时连问题的解决办法

概览 ubuntu联网不稳定,时断时连问题的解决办法现象网络一会儿连上,过一会又自动断开,再等一会儿又断了。问题原因可能是受ipv6的影响解决办法关闭掉ipv6 详细步骤 1、编辑连接,打开“ipv6 settings”,将method设置…

搭建GitLab+Jenkins持续集成环境图文教程

GitLab是一个代码仓库,用来管理代码。Jenkins是一个自动化服务器,可以运行各种自动化构建、测试或部署任务。所以这两者结合起来,就可以实现开发者提交代码到GitLab,Jenkins以一定频率自动运行测试、构建和部署的任务,…

threejs-经纬度转换成xyz坐标的方法

用threejs做3D应用时,很经常会接触到球状物体,比如说地球,要定义球上的一点,用经纬度是常用的办法。现在,我们要在北京这个地方标一个点,北京的坐标为——北纬39.9”,东经116. 3”,该…

dashboard windows 前端开发环境搭建

dashboard是kubernetes的云管平台UI界面,正常情况下,其是在linux下开发的,但是,有些特殊情况下,我们也可能希望在windows上搭建起dashboard的开发环境 这里我们将搭建的开发环境的结构如下: windows上只运…

Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法...

Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法: 具体问题如下: 分析原因:网上搜集了以下,出现异常的原因是安装了第三方控件,然后删除是没有删除干净,导致日…

跨域问题及CORS机制

跨域 跨域是指一个资源请求与其不在同一个域(源)的资源,不在同一个域(源)是指两个域的协议、域名或端口不同。 同源策略 出于安全考虑,浏览器制定了同源策略, 限制了某些跨域请求。同源策略是…

【LuoguP3038/[USACO11DEC]牧草种植Grass Planting】树链剖分+树状数组【树状数组的区间修改与区间查询】...

模拟题,可以用树链剖分线段树维护。 但是学了一个厉害的。。树状数组的区间修改与区间查询。。 分割线里面的是转载的: -------------------------------------------------------------------------------- [ 3 ] 上面都不是重点……重点是树状数组的区…

oracle .dbf文件过大_学习这篇Oracle数据库文件坏块损坏的恢复方法,拓展你的知识面...

一、Oracle数据库系统简介:ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间…

threejs- z-fighting 问题

Z-Buffer 在threejs中,使用深度缓冲(Z-Buffer)来完成场景可见性计算,即确定场景哪部分可见,哪部分不可见。深度缓冲(Z-Buffer)是一个二维数组,其中的每一个元素对应屏幕上的一个像素…

bower overrides 配置

bower 是一个常用的包管理工具,用起来和npm很相似,但是两者又有一些区别,可以参考 —— What is the difference between Bower and npm。这里不说bower本身,而想说一下bower的overrides配置。 何谓override override 本身是覆盖…

windows下搭建Vagrant+Virtualbox环境

对于开发人员来说,Vagrant就是一个提供标准化开发环境的工具。通过Vagrant: 使每个开发人员电脑上的代码运行环境一致,再也不会出现“在我电脑上运行起来明明没有问题的”这样的开发环境不一致的问题。你可以使用Vagrant在windows下提供linu…