html中sprite标签,Three.js模型标签
Three.js模型标签
在很多的实际的项目中,你可能需要给一个Three.js的模型添加标签,标签可以通过一个包含文字图形信息的HTML元素或者一个three.js的精灵模型来表示。
层级模型
复杂的项目,一个three.js场景往往包含包含多个模型对象,模型对象也会有一些父对象,这样就会形成一个层级模型,从数据结构的角度来看就是树结构。
一个模型相对世界坐标系原点的位置是世界坐标,相对父对象的位置是局部坐标。
获取模型位置
你如果想给一个模型设置标签,首先需要获得模型在世界坐标系中所在的位置,如果你希望标注一个模型的某个局部位置,那就要获得该局部区域的一个顶点坐标。
.position属性是一个模型的局部位置,相对父对象的位置,如果一个网格模型Mesh直接属于场景Scene,没有除了Scene意外的父对象
.vertices如果几何体是Geometry类型,可以通过.vertices属性访问顶点,通过下标可以访问具体的顶点位置坐标。
.attributes.position如果几何体是BufferGeometry类型,可以通过.attributes.position属性访问顶点位置数据。
.getWorldPosition()实际项目中一个模型对象可以有多个父对象,这个时候想获得该模型对象的世界坐标,就不能通过.position属性,应该通过.getWorldPosition()方法实现,该方法的使用参考基类Object3D。
实际项目中获得一个模型,可能是通过点击获得,或者遍历对象根据属性值找到某个或某些模型,等等这里不展开说,这不是本节课的重点,关于递归遍历模型或者鼠标点击选中某个模型可以关注课程的其它部分。
精灵模型Sprite作为标签
在使用精灵模型表示标签之前,你应该先了解精灵模型Sprite有什么特点。使用精灵模型表示一个模型对象的标签,那么精灵模型就要位于模型对象的附近。可以获得要标注模型的世界坐标,然后来设置精灵标签的位置,适当偏移一点就可以,当然也可以把精灵对象插入到模型对象的父对象中,和模型对象一样作为父对象的子对象,这样的话如果模型父对象的位置变化,精灵模型可以跟着一起变化。
标签的样式可以让美术设计好直接作为精灵的贴图就可以,如果标签不是特定的,比如用户输入文字,平台自动生成模型标签,可以通过程序自动化合成一个纹理作为精灵模型的贴图,关于如何自动合成纹理贴图这里不详细阐述。
/**
* 创建点精灵模型
*/
// 创建精灵材质对象SpriteMaterial
var spriteMaterial = new THREE.SpriteMaterial({
map: new THREE.TextureLoader().load("立方体.png"), //设置精灵纹理贴图
transparent: true,//开启透明(纹理图片png有透明信息)
});
// 创建精灵模型对象,不需要几何体geometry参数
var sprite = new THREE.Sprite(spriteMaterial);
sprite.scale.set(30, 30, 1); //精灵大小
// 把精灵模型插入到模型对象的父对象下面
group.add( sprite);
// 父对象group位置变化,网格模型及其对象的标签同样发生变化
group.position.set(10, 0, -80);
// 表示标签信息的精灵模型对象相对父对象设置一定的偏移
sprite.translateY(30);
div等html元素作为标签(世界坐标转屏幕坐标)
通过html元素表示标签相比较使用精灵来说比较麻烦,需要进行坐标变换,一个模型显示在Canvas画布上,经过了相机的视图、投影变换,如果想把一个div元素标注在一个模型附近,就需要计算模型渲染到画布上的具体位置,也就是所谓的屏幕坐标。使用html元素的好处是可以直接输入汉字,利用css来设置一下标签的样式,当然也可以直接加载美术设计的标签。
世界坐标转WebGL标准设备坐标
世界坐标:世界坐标简单说就是模型在three.js三维空间中的位置,但是注意不是局部位置属性.position,你可以通过.getWorldPosition()方法获得世界坐标,每个子对象都有一个相对父对象的位置,把一个对象的所有父对象相对Scene坐标原点的位置加起来就是一个模型的世界坐标
屏幕坐标:你可以理解为Canvas画布上的位置,单位是像素px,这和HTML说的像素是一样的。//创建一个三维向量作为世界坐标
var worldVector = new THREE.Vector3();
//获取网格模型boxMesh的世界坐标,赋值给worldVector
boxMesh.getWorldPosition(worldVector);
//世界坐标转标准设备坐标,standardVector是WebGL设备坐标
var standardVector = worldVector.project(camera);
.project()是向量Vector3的方法,一个表示位置的向量Vector3把相机作为参数执行该方法可以得到经过相机变换后的坐标。一般threejs渲染器渲染的时候,会自动从相机对象读取视图和投影矩阵对模型的顶点进行变换。
WebGL标准设备坐标转屏幕坐标
Canvas全屏显示的时候复合下面的计算规则,如果不是全屏要注意修改计算规则。如果不是全屏,计算a和b的值,不能使用window.innerWidth,而应该使用canvas的具体宽高。如果canvas是局部显示相对body区域的左上角有偏移,那么div元素也要设置一定的偏移。
// 根据WebGL标准设备坐标standardVector计算div标签在浏览器页面的坐标
var a = window.innerWidth / 2;
var b = window.innerHeight / 2;
var x = Math.round(standardVector.x * a + a); //标准设备坐标转屏幕坐标
var y = Math.round(-standardVector.y * b + b); //标准设备坐标转屏幕坐标
/**
* 设置标签元素的位置
*/
div.style.left = x + 'px';
//这里的130px主要是为了标签和模型有一定偏移,当然也可以不设置,两者叠加在一起
div.style.top = y - 130 + 'px';
相关文章:

D3D11中的硬件反锯齿 SSAA/MSAA/EQAA/CSAA(3)
五 、EQAA/CSAA EQAA(enhanced quality AA)和CSAA(coverage sample AA)其实是同样的采样技术,EQAA是AMD的实现,CSAA是NV的实现,下面我以EQAA为例看看这两种AA的原理: 在MSAA中,每个采样都有一个sample color缓冲相对应…

[ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例: class Person:def __init__(self, name, hp, aggr, sex):self.name nameself.hp hpself.aggr aggrself.sex sexdef hit(self, dog):dog.hp - self.aggrprint(\033[31;1m%s被打,掉了%s的血.\033[0…

ceph nautilus相对于minic的主要改动
改动信息 详情可以查看ceph官网nautilus Dashboard功能 增加的新功能 支持多用户使用SSO的用户验证模式支持审计模式新的登录页,可以展示更多的集群健康指标使用swagger api的rest api文档 增加的新的管理特性 对于OSD的管理(将osd标记为down,out,修…

word2003计算机应用考试,2017职称计算机考试Word2003操作练习题
2017职称计算机考试Word2003操作练习题实验操作能力是计算机考试考查的一项基本能力,下面是小编给大家提供的职称计算机考试Word2003操作练习题,大家可以参考练习,更多习题练习请关注应届毕业生考试网。1. 将所选文本的字体设置为“华文彩云”…

虚拟化及云厂商聚焦
虚拟化及云厂商聚焦转载于:https://blog.51cto.com/itcn001/1069736

题解:无线通讯网
qwq 跑最小生成树 一共n个电话,所以相当于最小生成树里删去最大的n-1的边 所以答案即为最小生成树的第n大边 prim或者kruskal都行 这是prim 1 #include<iostream>2 #include<cstdio>3 #include<algorithm>4 #include<cmath>5 using namespa…

linux常用操作指令—— 查看磁盘、内存使用情况(df、du、free、top)
显示指定磁盘文件的可用空间。如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。当文件系统也确定删除了该文件后,这时候du与df就一致了。实例4:显示目前磁盘空间和使用情况 (最常用)top:“实时查看” ,按。退出 (实时动态显示)

广东电网计算机考试,考点爆料!2019广东电网计算机专业居然考这些!
原标题:考点爆料!2019广东电网计算机专业居然考这些!本文由广东中公国企为您整理:2019广东电网校园招聘预计于2018年10~11月份开启,计算机类也是其中一个招聘大类,那么2019广东电网校园招聘计算机类专业考什…

修改ceph crush map,并指定到资源池
版本:ceph L 版本 12.2.1 环境:单节点 15 osd -1 0 root default -3 94.53119 host node1 0 hdd 5.37108 osd.0 up 1.00000 1.00000 1 hdd 5.37108 osd.1 …

常见的七种加密算法及实现
**数字签名**、**信息加密** 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、`oauth` 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 **签名加密算法** 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。## 正文### 1. 数字签名**数字签名**,简单来说就是通过提供 **可鉴别** 的 **数字信息** 验证 **自身身份** 的一种方式。一套 **数字签名** 通常定义两种 **互补

MySQL慢查询日志slowlog
慢速查询日志记录的是执行时间超过秒和检查的行数超过的SQL语句,这些语句通常是需要进行优化的。官方参考文档:https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html。

Ubantu下hadoop运行第一个例子wordcount过程
Ubantu12.04下hadoop-1.2.1运行第一个例子wordcount过程,分享一下 将WordCount.java文件放在Hadoop安装目录下,并在安装目录下创建输入目录input,目录下有输入文件file1,file2,其中: file1内容:…

jsp - EL
E L(Expression Language) 作用:能够用于在 JSP 文件中嵌入 Java 代码的表达式语言,替代小脚本 1、语法结构 ${expression} 2、 EL 提供“.“和“[ ]“两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如…

node 常用指令 node 扩展链接
node -v node 版本 npm -v npm版本号,npm是在安装nodejs时一同安装的nodejs包管理器 (注册、安装模块,和小乌龟有点像) npm list 当前目录已安装插件 npm list -g 查看所有全局安装的模块: npm…

增加内核的ceph模块的日志打印
本文主要是在梳理cephfs内核方式挂载的内核代码逻辑所做的准备 环境:Centos 7.5 内核源码版本:3.10.0-862.el7.x86_64 打开ceph模块的debug信息 单独编译ceph模块的.ko文件 ceph在内核的通用模块主要有三个: ceph.ko 模块路径:/usr/src/k…

计算机系统安装和维护实验,2计算机系统安装维护实验报告.doc
2计算机系统安装维护实验报告计算机系统安装维护实验报告院系: 班级: 姓名: 学号:【实验目的】学习了解u盘硬盘启动维护系统【实验内容】通过GHOST11软件进行系统的相关操作用户可以通过GHOST11软件进行硬盘对拷,分区对拷…

Javascript年月日联动
代码 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">2 <html>3 <head>4 <title> New Document </title>5 <meta name"Generator" content&…

emmmmmm(官宣?)
实验室永远不会是学习的唯一地点,不是吗? 总后悔当初退竞赛,现在却还是选择退出,大概是自己真的不适合吧。。。转载于:https://www.cnblogs.com/LOW-ctfer/p/9896781.html

ceph unfound object问题的解决
查看丢失对象的pg id ceph health detail 查找该pg下丢失的object ceph pg 8.32 list_missing 尝试修复该pg: ceph pg repair 8.32 ceph pg scrub 8.32 修复不成功的话,可以直接告诉ceph使用已有的版本或者直接删除 尝试切换到旧版本的object:ceph pg 8.32 mark_…

Apache ‘mod_pagespeed’模块跨站脚本漏洞
漏洞名称:Apache ‘mod_pagespeed’模块跨站脚本漏洞CNNVD编号:CNNVD-201310-677发布时间:2013-11-05更新时间:2013-11-05危害等级: 漏洞类型:跨站脚本威胁类型:远程CVE编号:CVE-20…

设备漏电对计算机影响,电脑机箱漏电对电脑有影响吗
电脑机箱漏电一般原因是长期使用在潮湿或高温环境下,电源线或主板的裸露部件因绝缘下降或积灰受潮等原因,接地电转载自电脑百事网容轻微损坏;这时,机箱的带电感觉较明显,有时用试电笔也能点亮。这种情况就要引起注意了…

eoiioe IE 和 firefox js 兼容问题
1、判断浏览器类型 1var ver"IE6";2if (window.XMLHttpRequest)3 ver (!window.ActiveXObject) ? "Mozilla or Safari" : "IE7"; 4return ver;2、获取位置,在firefox中,无法使用object.style.pixelLeft,只…

团队博客(第四周)-“名字好难想”
一,已完成工作 1.美术资源设计完毕 2.界面设计完毕 3.客户端登录程序实现 二,待完成工作 1.服务器的实现 2.等待界面和战斗场景的脚本实现 三,遇到的困难 1.程序事情有点多,没有配合好美术完成功能 四,燃尽图 五&#…

ceph rados命令使用
文章目录Pool相关Object相关导出资源池数据最近了解了rados命令的使用,感觉在对象操作这块还是非常实用。因为rados是属于底层存储核心,所以关于rados的命令针对对象的操作较多。环境中执行 rados -h可以看到命令集分为几个大的模块:资源池、…

前置体验,才是打动用户的神器
在上一篇文章《记住,用户只愿为“体验”付钱》中,我谈到了体验经济和根据体验定价的逻辑,以及一些商业案例,它们共同展现了一种趋势,即用户愿意为体验付钱。同理,在这样的大背景下,互联网产品该…

服务器ip 计算机名,服务器计算机名称或者ip地址
弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情区域和可用…

mysql的常用函数
一、数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e(自然…

NOIP模拟题 斐波那契数列
题目大意 给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项。 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先求出第$i$个数之前最后一个能和第$i$个数相加为斐波那契数的位置$las…

使用rpmbuild对ceph的源码包进行重新打包
进入ceph源码包下载ceph相关的rpm包和tar包 我们下载的是ceph-12.1.1-0.el7.src.rpmceph L版本的rpm包 执行命令rpmbuild --rebuild ceph-12.1.1-0.el7.src.rpm 等待它执行到configuring done之后就强行终止 -- Found cython -- Performing Test HAS_VTA -- Performing Test …

java与.net比较学习系列(7) 属性
说起属性,实际上java中没有属性这个概念,只有字段和方法,但是可以通过私有字段和声明get,set方法来实现类似于C#中属性的效果。 在C#中,声明属性有两种方式,一种是声明访问器,另外一种是利用C# 3.0新增的自…