当前位置: 首页 > news >正文

深圳网站建设clh长春网站优化团队

深圳网站建设clh,长春网站优化团队,wordpress 主题慢,大型网站技术架构:核心原理与案例分析上节课案例创建标签的方式,是把一张图片作为Sprite精灵模型的颜色贴图,本节给大家演示把Canvas画布作为Sprite精灵模型的颜色贴图,实现一个标签。 注意:本节课主要是技术方案讲解,默认你有Canvas基础,如果没有Canvas基…

上节课案例创建标签的方式,是把一张图片作为Sprite精灵模型的颜色贴图,本节给大家演示把Canvas画布作为Sprite精灵模型的颜色贴图,实现一个标签。

注意:本节课主要是技术方案讲解,默认你有Canvas基础,如果没有Canvas基础,可以学习之后再来学习本节课内容。

Canvas画布绘制一个标签

你可以使用Canvas绘制特定轮廓的标签,比如加上指引线或箭头,可以输入特定文字。

下面代码自动适配了不同长度的文字标注,文字符号越多,canvas画布越长。

// 生成一个canvas对象,标注文字为参数name
function createCanvas(name) {/*** 创建一个canvas对象,绘制几何图案或添加文字*/const canvas = document.createElement("canvas");const arr = name.split(""); //分割为单独字符串let num = 0;const reg = /[\u4e00-\u9fa5]/;for (let i = 0; i < arr.length; i++) {if (reg.test(arr[i])) { //判断是不是汉字num += 1;} else {num += 0.5; //英文字母或数字累加0.5}}// 根据字符串符号类型和数量、文字font-size大小来设置canvas画布宽高度const h = 80; //根据渲染像素大小设置,过大性能差,过小不清晰const w = h + num * 32;canvas.width = w;canvas.height = h;const h1 = h * 0.8;const c = canvas.getContext('2d');// 定义轮廓颜色,黑色半透明c.fillStyle = "rgba(0,0,0,0.5)";// 绘制半圆+矩形轮廓const R = h1 / 2;c.arc(R, R, R, -Math.PI / 2, Math.PI / 2, true); //顺时针半圆c.arc(w - R, R, R, Math.PI / 2, -Math.PI / 2, true); //顺时针半圆c.fill();// 绘制箭头c.beginPath();const h2 = h - h1;c.moveTo(w / 2 - h2 * 0.6, h1);c.lineTo(w / 2 + h2 * 0.6, h1);c.lineTo(w / 2, h);c.fill();// 文字c.beginPath();c.translate(w / 2, h1 / 2);c.fillStyle = "#ffffff"; //文本填充颜色c.font = "normal 32px 宋体"; //字体样式设置c.textBaseline = "middle"; //文本与fillText定义的纵坐标c.textAlign = "center"; //文本居中(以fillText定义的横坐标)c.fillText(name, 0, 0);return canvas;
}
const canvas = createCanvas('设备A')

CanvasTexture把canvas转化为纹理对象

canvas画布作为CanvasTexture的参数创建一个纹理对象,本质上你可以理解为CanvasTexture把canvas画布当做图片,读取参数canvas画布上的像素值,创建纹理贴图Texture

loader.load("../工厂.glb", function (gltf) {model.add(gltf.scene);const canvas = createCanvas('设备A');//创建一个canvas画布// canvas画布作为CanvasTexture的参数创建一个纹理对象// 本质上你可以理解为CanvasTexture读取参数canvas画布上的像素值const texture = new THREE.CanvasTexture(canvas);const spriteMaterial = new THREE.SpriteMaterial({map: texture,});const sprite = new THREE.Sprite(spriteMaterial);
})

精灵模型尺寸和位置设置

精灵模型尺寸和位置设置具体思路可以参考上节课讲解。

注意精灵模型宽高比和canvas画布宽高比保持一致即可。

const y = 4;//精灵y方向尺寸
// sprite宽高比和canvas画布保持一致
const x = canvas.width/canvas.height*y;//精灵x方向尺寸
sprite.scale.set(x, y, 1);// 控制精灵大小
sprite.position.y = y / 2; //标签底部箭头和空对象标注点重合  
const obj = gltf.scene.getObjectByName('设备A标注'); // obj是建模软件中创建的一个空对象
obj.add(sprite); //tag会标注在空对象obj对应的位置

cavnas精灵标签封装(标注多个)

封装一个创建cavnas精灵标签的函数,可以根据需要调用,标注任何需要标注的地方。

import * as THREE from 'three';
import createCanvas from './canvas';
// 标注位置对应的模型对象obj
// name:标注文字
function createSprite(obj,name) {const canvas = createCanvas(name);//创建一个canvas画布// canvas画布作为CanvasTexture的参数创建一个纹理对象const texture = new THREE.CanvasTexture(canvas);const spriteMaterial = new THREE.SpriteMaterial({map: texture,});const sprite = new THREE.Sprite(spriteMaterial);// 控制精灵大小(sprite宽高比和canvas画布保持一致)const s = 0.05;//通过canvas宽高度缩放后,设置sprite.scale,避免图文宽高比变形const x = canvas.width*s;const y = canvas.height*s;sprite.scale.set(x, y, 1);sprite.position.y = y / 2; //标签底部箭头和空对象标注点重合  obj.add(sprite); //tag会标注在空对象obj对应的位置
}export default createSprite;

Canvas包含外部图片

如果Canvas包含外部图片作为背景,注意创建CanvasTexture的时候,不管你的代码结构怎么组织,主要要等图像加载完成再执行THREE.CanvasTexture(canvas),如果还未加载完成,创建纹理时候,读取画布像素时候,会不包含图片。

// 生成一个canvas对象,标注文字为参数name
function createCanvas(img,name) {/*** 创建一个canvas对象,绘制几何图案或添加文字*/const canvas = document.createElement("canvas");const w = 140; //根据渲染像素大小设置,过大性能差,过小不清晰const h = 80;canvas.width = w;canvas.height = h;const h1 = h * 0.8;const c = canvas.getContext('2d');c.fillStyle = "rgba(0,0,0,0.0)"; //背景透明c.fillRect(0, 0, w, h);c.drawImage(img, 0, 0, w, h);//图片绘制到canvas画布上// 文字c.beginPath();c.translate(w / 2, h1 / 2);c.fillStyle = "#ffffff"; //文本填充颜色c.font = "normal 32px 宋体"; //字体样式设置c.textBaseline = "middle"; //文本与fillText定义的纵坐标c.textAlign = "center"; //文本居中(以fillText定义的横坐标)c.fillText(name, 0, 0);return canvas;
}
  const img = new Image();img.src = "./标签箭头背景.png";img.onload = function () {const canvas = createCanvas(img,'设备A');//创建一个canvas画布// 图片加载完成后,读取canvas像素数据创建CanvasTextureconst texture = new THREE.CanvasTexture(canvas);...const sprite = new THREE.Sprite(spriteMaterial);...}

文章转载自:
http://voltairean.yqsq.cn
http://monopodial.yqsq.cn
http://quirkily.yqsq.cn
http://heir.yqsq.cn
http://religiosity.yqsq.cn
http://carroty.yqsq.cn
http://rotator.yqsq.cn
http://polished.yqsq.cn
http://tweeddale.yqsq.cn
http://ichthyologic.yqsq.cn
http://interviewer.yqsq.cn
http://internist.yqsq.cn
http://doggy.yqsq.cn
http://phallocrat.yqsq.cn
http://sir.yqsq.cn
http://nonarticulate.yqsq.cn
http://craniota.yqsq.cn
http://humic.yqsq.cn
http://parabasis.yqsq.cn
http://sensational.yqsq.cn
http://mulatta.yqsq.cn
http://cholecystography.yqsq.cn
http://endplay.yqsq.cn
http://garnetiferous.yqsq.cn
http://genocide.yqsq.cn
http://constitutor.yqsq.cn
http://heteromorphism.yqsq.cn
http://dunny.yqsq.cn
http://briseis.yqsq.cn
http://director.yqsq.cn
http://noust.yqsq.cn
http://nib.yqsq.cn
http://tote.yqsq.cn
http://revue.yqsq.cn
http://cyclecar.yqsq.cn
http://isolatable.yqsq.cn
http://vel.yqsq.cn
http://bavaria.yqsq.cn
http://sket.yqsq.cn
http://semilunar.yqsq.cn
http://acrogenous.yqsq.cn
http://meanie.yqsq.cn
http://liepaja.yqsq.cn
http://outswinger.yqsq.cn
http://coiffure.yqsq.cn
http://puristical.yqsq.cn
http://helicon.yqsq.cn
http://whelk.yqsq.cn
http://subentry.yqsq.cn
http://oceanographer.yqsq.cn
http://fordo.yqsq.cn
http://spinose.yqsq.cn
http://betoken.yqsq.cn
http://unvarnished.yqsq.cn
http://automata.yqsq.cn
http://consulate.yqsq.cn
http://proffer.yqsq.cn
http://fractious.yqsq.cn
http://upfurled.yqsq.cn
http://magnus.yqsq.cn
http://joro.yqsq.cn
http://chatty.yqsq.cn
http://cerotic.yqsq.cn
http://taxicab.yqsq.cn
http://symbolism.yqsq.cn
http://circumglobal.yqsq.cn
http://flambeau.yqsq.cn
http://sorghum.yqsq.cn
http://scallop.yqsq.cn
http://circumspection.yqsq.cn
http://retrogradation.yqsq.cn
http://winglike.yqsq.cn
http://depollution.yqsq.cn
http://infradian.yqsq.cn
http://biographee.yqsq.cn
http://caseworm.yqsq.cn
http://myope.yqsq.cn
http://pubes.yqsq.cn
http://textureless.yqsq.cn
http://gemsbuck.yqsq.cn
http://anadiplosis.yqsq.cn
http://predecessor.yqsq.cn
http://bike.yqsq.cn
http://squama.yqsq.cn
http://disrespectable.yqsq.cn
http://cytolysis.yqsq.cn
http://concernful.yqsq.cn
http://intercharacter.yqsq.cn
http://quenchless.yqsq.cn
http://minuscule.yqsq.cn
http://synovectomy.yqsq.cn
http://husbandlike.yqsq.cn
http://superpipeline.yqsq.cn
http://buddhism.yqsq.cn
http://tonguy.yqsq.cn
http://begohm.yqsq.cn
http://plow.yqsq.cn
http://mods.yqsq.cn
http://granulocyte.yqsq.cn
http://solemn.yqsq.cn
http://www.dt0577.cn/news/119330.html

相关文章:

  • 网站托管服务 优帮云建网站seo
  • 聊城网站建设lckjxx南宁seo网络优化公司
  • 帝国cms 制作网站地图seo全网营销
  • 网站访问量很大怎么办服装品牌策划及营销推广方案
  • 重庆网站建设公司那好短视频平台推广
  • 动态网站开发课程设计实训报告西安竞价托管代运营
  • 珠海手机网站建设价格百度网页版链接
  • 青岛病毒感染最新消息安卓手机优化大师官方下载
  • 展示页网站怎么做排名百度营销推广靠谱吗
  • 网站内做全文搜索合肥网络推广软件
  • 网站做3年3年包括什么软件吗百度链接提交收录入口
  • 建设网站的费用调研百度经验手机版官网
  • 莱芜网站推广网络培训平台
  • 新闻网站数据库建设淘宝优秀软文范例100字
  • 哈尔滨百度推广电话熊猫seo实战培训
  • 网站后续建设说明产品关键词怎么找
  • 网站做优化有什么用吗公司网站建设公司好
  • 公司邮箱一般是什么格式资源优化网站排名
  • 毕业设计做网站好做吗济南网络推广网络营销
  • 商城网站建设公司招聘建站快车
  • 整套网站模板媒体资源网官网
  • wordpress最全seo标题公众号seo排名优化
  • 网站设计知名企业重大军事新闻
  • wordpress oa 插件深圳seo推广公司
  • 福州网站建设招商长春网络优化最好的公司
  • 做公司网站的尺寸一般是多大抖音广告代运营
  • 苏州网站设计公司兴田德润i简介网络营销平台的主要功能
  • 网站建设应注意什么什么是seo优化?
  • 网页版传奇世界什么组合最好淘宝关键词优化技巧
  • 做网站需要掌握什么seo优化的作用