美文网首页GIS相关
threejs 精灵(Sprite)的实现

threejs 精灵(Sprite)的实现

作者: 不决书 | 来源:发表于2019-10-15 16:55 被阅读0次

Sprite叫精灵,计算机图形学中,精灵指包含于场景中的二维图像或动画。在threejs中,可以使用Sprite加载图像纹理,当然也包括用canvas创建的纹理,因此,canvas能创建什么图像,Sprite就能创建什么形状。精灵的最大用途就是,它可以用一张纹理或一个面来表示三维场景中的一个物体,而且这个面始终对着相机,通过这个特效,我们在游戏中进行绘制草,树等一些固定不变的内容就可以采用精灵,需要要太多的顶点来完成.
今天研究了一天threejs 是如何实现让纹理始终对着相机,个人学习的知识结构和理解是需要通过相机的lookAt方向,设置物体的法向量与这个方向相同,每次变化物体,重新计算,而threejs不是这样实现的,很讨巧,它是在shader中,物体的模型矩阵和视图矩阵都不改变顶点的x,y坐标,只改变z坐标,具体实现可以按下面的代码:

precision highp float;
#define SHADER_NAME SpriteMaterial
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
uniform float rotation;
uniform vec2 center;
uniform vec2 scale;
uniform vec2 uvOffset;
uniform vec2 uvScale;
attribute vec2 position;
attribute vec2 uv;
varying vec2 vUV;
varying float fogDepth;
void main() {
    vUV = uvOffset + uv * uvScale;
    vec2 alignedPosition = ( position - center ) * scale;
    vec2 rotatedPosition;
    //绕精灵的中心旋转,精灵的中心默认(0,0) 
    rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
    rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
    vec4 mvPosition;
   //物体的模型矩阵和视图矩阵都不改变顶点的x,y坐标,顶点是vec4(0.0, 0.0, 0.0 ,1.0) 
    mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
    mvPosition.xy += rotatedPosition;
    gl_Position = projectionMatrix * mvPosition;
    fogDepth = - mvPosition.z;
}

相关文章

  • threejs 精灵(Sprite)的实现

    Sprite叫精灵,计算机图形学中,精灵指包含于场景中的二维图像或动画。在threejs中,可以使用Sprite加...

  • 【转】unity2017新功能Sprite Atlas详解

    Sprite Atlas(精灵图集)Sprite Atlas 针对现有的图集打包系统Sprite Packer在性...

  • Pygame精灵和精灵组

    Pygame精灵和精灵组 Pygame提供了两个类 pygame.sprite.Sprite—— 存储图像数据 i...

  • 饥人谷-任务9-2

    一、CSS Sprite(雪碧图|精灵图)指什么? 有什么作用 css雪碧图又叫css精灵或css sprite,...

  • 游戏初探

    SpriteKit: 首先要知道什么是Sprite。Sprite的中文译名就是精灵,在游戏开发中,精灵指的是以图像...

  • CSS常见技巧

    1.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用 CSS Sprite(雪碧图|精灵图)指该方法是将...

  • webpack css图像合图实现

    雪碧图也叫CSS精灵, 是一CSS图像合成技术,这里介绍webpack实现雪碧图 安装webpack-sprite...

  • CSS 样式介绍(五)

    1. css 精灵技术(sprite) css 精灵技术(sprite):将多个小背景图片合成一个大的背景图片(精...

  • Sprite和points

    Sprite 精灵精灵由于一直正对着相机的特性,一般使用在模型的提示信息当中。通过THREE.Sprite创建生成...

  • 每个前端工程师都应该懂的前端性能优化总结:

    采用css雪碧图(css sprite/css图片精灵)技术 采用css雪碧图(css sprite/css图片精...

网友评论

    本文标题:threejs 精灵(Sprite)的实现

    本文链接:https://www.haomeiwen.com/subject/mulsuctx.html