three,js项目开发总结 - 创建精灵字体

makeTextSprite(message, parameters) {
  if (parameters === undefined) parameters = {}
  var fontface = parameters.hasOwnProperty("fontface") ? parameters["fontface"] : "Arial"
  /* 字体大小 */
  var fontsize = parameters.hasOwnProperty("fontsize") ? parameters["fontsize"] : 18
  /* 边框厚度 */
  var borderThickness = parameters.hasOwnProperty("borderThickness") ? parameters["borderThickness"] : 5
  /* 边框颜色 */
  var borderColor = parameters.hasOwnProperty("borderColor") ? parameters["borderColor"] : {
    r: 0,
    g: 0,
    b: 0,
    a: 1.0
  }
  /* 背景颜色 */
  var backgroundColor = parameters.hasOwnProperty("backgroundColor") ? parameters["backgroundColor"] : {
    r: 255,
    g: 255,
    b: 255,
    a: 1.0
  }
  /* 创建画布 */
  var canvas = document.createElement('canvas')
  var context = canvas.getContext('2d')
  /* 字体加粗 */
  context.font = "Bold " + fontsize + "px " + fontface
  /* 获取文字的大小数据,高度取决于文字的大小 */
  var metrics = context.measureText(message)
  var textWidth = metrics.width
  /* 背景颜色 */
  context.fillStyle = "rgba(" + backgroundColor.r + "," + backgroundColor.g + "," + backgroundColor.b + "," +
    backgroundColor.a + ")"
  /* 边框的颜色 */
  context.strokeStyle = "rgba(" + borderColor.r + "," + borderColor.g + "," + borderColor.b + "," + borderColor
    .a + ")"
  context.lineWidth = borderThickness
  /* 绘制圆角矩形 */
  this.roundRect(context, borderThickness / 2, borderThickness / 2, textWidth + borderThickness, fontsize * 1.4 +
    borderThickness, 6)
  /* 字体颜色 */
  context.fillStyle = "rgba(0, 0, 0, 1.0)"
  context.fillText(message, borderThickness, fontsize + borderThickness)
  /* 画布内容用于纹理贴图 */
  var texture = new THREE.Texture(canvas)
  texture.needsUpdate = true
  var spriteMaterial = new THREE.SpriteMaterial({
    map: texture
  })
  var sprite = new THREE.Sprite(spriteMaterial)
  /* 缩放比例 */
  sprite.scale.set(10, 5, 0)
  return sprite
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值