Three.js 2D 文本精灵标签

2024-02-12

我是 Three.js 的新手,并且有一些属于 2D 文本的问题:

我想要的是:我想要一些标签,例如。 x、y 和 z 轴。标签应始终面向相机。也许稍后它们应该只在悬停时才被显示,但那是另一个话题。

我的问题是什么我找到了这个教程(这正是我想要达到的效果 |http://stemkoski.github.io/Three.js/Sprite-Text-Labels.html http://stemkoski.github.io/Three.js/Sprite-Text-Labels.html),但它适用于旧版本的 Three.js,使用如下方法var spriteAlignment = THREE.SpriteAlignment.topLeft;。我找到了这个解决方法(THREE.SpriteAlignment 显示为未定义 https://stackoverflow.com/questions/20601102/three-spritealignment-showing-up-as-undefined)但我不清楚如何使用新方法来满足我的需求。

我在寻找什么也许你可以帮我命名我正在寻找的东西,或者想出一个简短的方法。


文本精灵很好,但如果您使用超过数千个文本精灵,它可能会因为 GPU 的原因而减慢一切。

有一种“更好”的方法,将 Sprite 创建为 Canvas,这是我也使用的一个函数:

    function 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"] : 4;
        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 textColor = parameters.hasOwnProperty("textColor") ?parameters["textColor"] : { r:0, g:0, b:0, 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;
        roundRect(context, borderThickness/2, borderThickness/2, (textWidth + borderThickness) * 1.1, fontsize * 1.4 + borderThickness, 8);

        context.fillStyle = "rgba("+textColor.r+", "+textColor.g+", "+textColor.b+", 1.0)";
        context.fillText( message, borderThickness, fontsize + borderThickness);

        var texture = new THREE.Texture(canvas) 
        texture.needsUpdate = true;

        var spriteMaterial = new THREE.SpriteMaterial( { map: texture, useScreenCoordinates: false } );
        var sprite = new THREE.Sprite( spriteMaterial );
        sprite.scale.set(0.5 * fontsize, 0.25 * fontsize, 0.75 * fontsize);
        return sprite;  
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Three.js 2D 文本精灵标签 的相关文章

随机推荐

  • 核心数据结构是否使用多个实体?

    我有一个核心数据模型 我正在尝试弄清楚如何构建它 可以说我有一个Recipe 它有一个name title image和 5 种成分 我可以制作一个食谱实体吗recipeName title 然后一个Image实体与recipeName i
  • Rails first_or_create ActiveRecord 方法

    什么是first or create first or create Rails 中的方法 根据文档 http apidock com rails ActiveRecord Relation first or create 方法 没有描述
  • 存储字典值的路径

    如何将值的路径存储在dict of dict是 例如 我们可以轻松地将路径存储到name变量中的值name field person person name Jeff Atwood person address person address
  • 如何使 WPF 组合框具有 XAML 中最宽元素的宽度?

    我知道如何在代码中执行此操作 但是可以在 XAML 中执行此操作吗 窗口1 xaml
  • torch.sum() 中的 dim=-1 或 -2 是什么意思?

    让我以二维矩阵为例 mat torch arange 9 view 3 1 tensor 0 1 2 3 4 5 6 7 8 torch sum mat dim 2 tensor 9 12 15 我发现结果torch sum mat dim
  • 当新项目添加到模型时,ng-repeat 更改所有项目的排序顺序

    我创建了一个 tessellate 指令 可以让您包装多个 div
  • AngularJS 中的条件 ng-model 绑定

    我有一个模型 它是一个需要处理复杂和简单元素的数组 object element1 html element2 html url element3 html title Title 3 element4 html element5 html
  • 如何使用 Java Apache POI 在 Excel 中添加标题列?

    我正在编写一个java程序 其中我必须从XML文件中获取数据并将其放入excel文件中 在执行此操作时 我必须创建行标题并相应地添加数据 我知道如何创建列标题 我可以通过以下方式做到这一点 HSSFWorkbook workbook new
  • wkhtmltopdf 是否尊重 css 字体颜色?

    我正在使用 wkhtmltopdf 生成页面的 pdf 但它没有以正确的颜色显示任何字体 它们全部显示为黑色 颜色按照您的预期定义 panel dashboard p stat color bed000 并在浏览器中查看时正确显示 我把它称
  • 在执行回调之前等待 .each() .getJSON 请求完成

    我有一个jquery each循环 从 json 请求中检索页面上具有特定类的所有元素的远程数据 一组元素是一组li我想在之后使用另一个函数对标签进行排序li元素已使用远程信息进行更新 之后传入排序函数 each循环不会对列表进行排序 因为
  • 在稀疏表中选择一行第一个非空值

    使用下表 A B C ts 1 null null 2016 06 15 10 00 4 null null 2016 06 15 11 00 4 9 null 2016 06 15 12 00 5 1 7 2016 06 15 13 00
  • h1之后是否有必要使用H2

    如果文本太小 是否必须在 h1 之后使用 H2 那么我们可以在 h1 之后使用 h4 吗 它可以访问吗 从技术上讲 您可以使用这些的任意组合 从语义上讲 使用通用顺序是明智的 如果字体太小 可以使用 CSS 来更改 与标签h1 h6您赋予标
  • SQL Server - 使用递归外键进行级联 DELETE

    我花了很多时间试图找出如何实现删除时级联SQL Server 上的递归主键已经有一段时间了 我已经阅读了有关触发器 创建临时表等的内容 但尚未找到适合我的数据库设计的答案 这是一个用于演示目的的老板 员工数据库示例 TABLE employ
  • Flutter - 失败:构建失败并出现异常。 - 无法启动守护进程。 - Android Studio - VSCode

    每当我尝试使用 flutter run v 运行 flutter 应用程序时 都会收到以下错误 如果我不使用终端 只需单击 运行 则正在运行的 gradle 任务将继续运行 并且不会发生任何情况 I tried 在 gradle prope
  • Angular 2 ng-bootstrap 模态

    我使用组件而不是模板在应用程序中打开模态 然后我需要将对象模型传递给模态组件 问题是打字稿给出了 modalRef componentInstance 不作为属性存在的错误 我完全复制了示例表单演示页面 但再次给出同样的错误 并且永远不会在
  • 为什么有些语句在线程中运行时执行失败?

    我无法理解程序的行为这段代码示例 http rustbyexample com channels html use std comm use std thread Thread static NTHREADS uint 3 fn main
  • 服务器端处理与客户端处理+ajax?

    寻找一些一般性建议和 或想法 我正在创建一个我认为更像是一个网络应用程序而不是网页的东西 因为我想让它像一个 Gmail 应用程序 您可以让页面整天打开 同时将更新 推送 到页面 对于有兴趣我正在使用彗星编程技术 我以前从未创建过如此丰富的
  • 尝试将字符串转换为 MarketDataIncrementalRefresh

    我有一个文本文件FIX messages 所有这些和 MarketDataIncrementalRefresh 类型 X 我正在尝试找到一种使用的方法QuickFIX in C 创造MarketDataIncrementalRefresh消
  • 当用户从其他选项卡返回时重新加载页面

    我在某种重视更新的网站上工作 为此 当用户从另一个选项卡切换到网站的选项卡时 我需要刷新页面 有没有办法用 JavaScript jQuery 做到这一点 我知道location reload 用于刷新页面 但我不知道如何告诉 JavaSc
  • Three.js 2D 文本精灵标签

    我是 Three js 的新手 并且有一些属于 2D 文本的问题 我想要的是 我想要一些标签 例如 x y 和 z 轴 标签应始终面向相机 也许稍后它们应该只在悬停时才被显示 但那是另一个话题 我的问题是什么我找到了这个教程 这正是我想要达