三.js:缩放时如何保持精灵文本大小不变

Posted

技术标签:

【中文标题】三.js:缩放时如何保持精灵文本大小不变【英文标题】:Three.js: how to keep sprite text size unchanged when zooming 【发布时间】:2013-12-22 03:59:33 【问题描述】:

在three.js中,当鼠标放大时,文字会相应放大缩小。

var texture = new THREE.Texture( canvas );
var material = new THREE.SpriteMaterial (  map: texture, transparent:false  );
var sprite = new THREE.Sprite( material );

如何防止鼠标缩放时文字大小发生变化?

【问题讨论】:

您使用的是three.js r.63吗?如果没有,请升级。你是说鼠标缩放吗?当鼠标缩放时,精灵会默认改变大小。 对,我用的是r63,你的理解是对的,有办法实现吗? 我想要这个效果:当鼠标缩放时,精灵的大小不变。。。 很想你!!!!我明白了。 【参考方案1】:

我的默认设置是,精灵根据它们与透视相机的距离进行缩放——就像其他对象一样。

如果您不希望它们缩放,您可以覆盖第二个精灵场景,使用正交相机渲染。见http://threejs.org/examples/webgl_sprites.html

它被称为“平视显示器”或 HUD。

编辑:SpriteMaterial 现在有一个sizeAttenuation 属性,您可以选择将其设置为false。默认为true

three.js r.96

【讨论】:

HUD??对不起!看不懂HUD是什么。。能解决这个问题吗? 对了,使用透视相机时,可以达到这个效果吗? 1. HUD:参见en.wikipedia.org/wiki/HUD_(video_gaming) 2. 您使用透视相机渲染场景,然后在此之上使用正交相机渲染精灵——就像我引用的示例一样。【参考方案2】:

要使用透视相机实现这一点,您可以根据精灵与相机的距离与一些“虚拟距离”之间的比率设置精灵比例因子。

在下面的示例中,virtual_d 用于在渲染之前设置精灵和相机之间的固定虚拟“距离”

var scale = sprite.position.distanceTo(camera.position) / virtual_d;
scale = Math.min(you_max_scale_value, Math.max(you_min_scale_value, scale));

sprite.scale.set(scale, scale, scale);

但是,如果您不希望出现任何失真,例如视野较大时的边界,请改用正交相机。

【讨论】:

以上是关于三.js:缩放时如何保持精灵文本大小不变的主要内容,如果未能解决你的问题,请参考以下文章

CSS如何使文本像图像一样缩放

浏览器缩放图片的大小

Andengine,缩放图像以填充屏幕大小,而不保持纵横比

Pygame:重新缩放像素大小

将 System.Drawing.Bitmap 缩放到给定大小,同时保持纵横比

如何使用CSS归档完美像素的像素艺术缩放?