使用threejs和canvas创建中文文字精灵

╰+攻爆jí腚メ 2022-10-11 12:21 295阅读 0赞

threejsjquery 的支持下,可以在三维空间里创建文字精灵,精灵模型始终面向用户,支持中文。参考代码如下:

  1. // 创建文字精灵
  2. var getTextCanvas = function ( text, opt ) {
  3. var option = {
  4. fontFamily: 'Microsoft Yahei',
  5. fontSize: 40,
  6. fontWeight: 'normal',
  7. lineHeight: 1.4, // g 字符的空间
  8. color: '#000000',
  9. borderWidth: 4,
  10. borderRadius: 6,
  11. borderColor: 'transparent',
  12. backgroundColor: 'transparent',
  13. }, canvas, context, textWidth, texture, materialObj, spriteObj;
  14. $.extend( option, opt );
  15. canvas = document.createElement('canvas');
  16. context = canvas.getContext('2d');
  17. context.font = option.fontWeight + ' ' + option.fontSize + 'px ' + option.fontFamily;
  18. textWidth = context.measureText( text ).width;
  19. context.fillStyle = option.backgroundColor;
  20. context.strokeStyle = option.borderColor;
  21. context.lineWidth = option.borderWidth;
  22. setBackground(context, option.borderWidth * 0.5, option.borderWidth * 0.5, textWidth + option.borderWidth,
  23. option.fontSize * option.lineHeight + option.borderWidth, option.borderRadius);
  24. context.fillStyle = option.color;
  25. context.fillText(text, option.borderWidth, option.fontSize + option.borderWidth);
  26. texture = new THREE.Texture(canvas);
  27. texture.needsUpdate = true;
  28. materialObj = new THREE.SpriteMaterial({
  29. map: texture, color: 0xffffff
  30. });
  31. spriteObj = new THREE.Sprite( materialObj );
  32. spriteObj.scale.set(30, 20, 20);
  33. function setBackground(ctx, x, y, w, h, r) {
  34. ctx.beginPath();
  35. ctx.moveTo(x+r, y);
  36. ctx.lineTo(x+w-r, y);
  37. ctx.quadraticCurveTo(x+w, y, x+w, y+r);
  38. ctx.lineTo(x+w, y+h-r);
  39. ctx.quadraticCurveTo(x+w, y+h, x+w-r, y+h);
  40. ctx.lineTo(x+r, y+h);
  41. ctx.quadraticCurveTo(x, y+h, x, y+h-r);
  42. ctx.lineTo(x, y+r);
  43. ctx.quadraticCurveTo(x, y, x+r, y);
  44. ctx.closePath();
  45. ctx.fill();
  46. ctx.stroke();
  47. }
  48. return spriteObj;
  49. }

发表评论

表情:
评论列表 (有 0 条评论,295人围观)

还没有评论,来说两句吧...

相关阅读

    相关 threejs

    Three.js是一个基于WebGL技术的JavaScript库,它可以简化3D图形的创建和展示。使用Three.js,你可以在网页上创建复杂的3D场景、模型和动画。 Thr

    相关 ThreeJs创建天空盒

    ThreeJS创建天空盒比较简单,可以理解成给一个立方体贴图,所以需要给六个面分别贴图,6张图构建整个场景的图片。这六张图分别是朝前的(posz)、朝后的(negz)、朝上的(