首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pixi.js / WebGL进行不良缩放

用pixi.js / WebGL进行不良缩放
EN

Stack Overflow用户
提问于 2014-09-14 21:31:06
回答 2查看 3.2K关注 0票数 2

如果您将一些文本放在pixi.js / WebGL画布上,并放大它,下面是发生的情况:http://jsbin.com/qeqoneselelo/1/

结果是:模糊/像素化,就像我们在位图上放大一样。

相反,我希望能够放大这个文本,就像它是矢量图形(文本实际上是!) (一点也不模糊,比如这里(你可以无限放大多次,没有模糊!):http://s419743653.onlinehome.fr/things/test2.htm

如何使用pixi.js ?对文本进行适当的缩放(如果不可能使用pixi.js,则使用另一个WebGL canvas javascript工具包?)

下面是我使用的代码(仅在http://jsbin.com/qeqoneselelo/1/上可用):

代码语言:javascript
复制
var text = new PIXI.Text("Hello World", {font:"50px Arial", fill:"black"});
var scrollArea = new PIXI.DisplayObjectContainer();
scrollArea.scale.x = 10;
scrollArea.scale.y = 10;
scrollArea.addChild(text);      
stage.addChild(scrollArea);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-16 00:56:38

据我所知没有办法。

这就是pixi.js的全部要点。它通过使用位图精灵来获得速度。结果是,当你缩放时,你会看到效果,但你会得到超高速。

如果你想要流畅的文本,你不需要pixi.js。只需使用画布API即可。当然,您将放弃pixi.js的一些速度和其他特性,但是您将获得流畅的文本。

如果您想继续使用pixi.js,一种解决方案是使用LOD。制作多个精灵,它们上的文字会越来越大,当你放大的时候,你会看到一个越来越大的精灵,它有更高分辨率的文本,但是有它的单个音阶,所以它保持相同的大小。不幸的是,由于字体大小有点不可预测,要使精灵完美地过渡,可能需要一些尝试和错误。变量texts = [];for (var ii = 0;ii < 15;++ii) {

代码语言:javascript
复制
  var text = new PIXI.Text("Hello World", {font: (ii * 10) +"px Arial", fill:"black"});
  text.scale.x = 1 / (1 + ii);
  text.scale.y = 1 / (1 + ii);
  texts.push(text);
}

...

  text = undefined;
  function animate() {
      var t = Date.now() * 0.001;
      var scale = 1 + 14 * (Math.sin(t) * 0.5 + 0.5);
      if (text) {
          scrollArea.removeChild(text);
      }
      text = texts[Math.floor(scale)];
      scrollArea.addChild(text);
      scrollArea.scale.x = scale;
      scrollArea.scale.y = scale;
      renderer.render(stage);        
      requestAnimFrame(animate);
  }

下面是一个例子

代码语言:javascript
复制
  var stage = new PIXI.Stage(0xFFFFFF);
    var renderer = PIXI.autoDetectRenderer(800, 600);
    document.body.appendChild(renderer.view);
    var texts = [];
    for (var ii = 0; ii < 15; ++ii) {
      
      var text = new PIXI.Text("Hello World", {font: (ii * 10) +"px Arial", fill:"black"});
      text.scale.x = 1 / (1 + ii);
      text.scale.y = 1 / (1 + ii);
      texts.push(text);
    }
      
      var scrollArea = new PIXI.DisplayObjectContainer();
      
      scrollArea.interactive = true;
      scrollArea.buttonMode = true;
      
      
     // scrollArea.addChild(text);      
      stage.addChild(scrollArea);
      
      
      scrollArea.mousedown = function(data) {
        data.originalEvent.preventDefault();
        this.data = data;
        this.dragging = true;
      }
      
      scrollArea.mouseup = scrollArea.mouseupoutside = function(data) {
        this.dragging = false;
        this.data = null;
      }
      
      scrollArea.mousemove = function(data) {
        if (this.dragging) {
          var newPos = this.data.getLocalPosition(this.parent);
          this.position.x = newPos.x;
          this.position.y = newPos.y;
        }
      }
      
      text = undefined;
      function animate() {
          var t = Date.now() * 0.001;
          var scale = 1 + 14 * (Math.sin(t) * 0.5 + 0.5);
          if (text) {
              scrollArea.removeChild(text);
          }
          text = texts[Math.floor(scale)];
          scrollArea.addChild(text);
          scrollArea.scale.x = scale;
          scrollArea.scale.y = scale;
          renderer.render(stage);        
          requestAnimFrame(animate);
      }
      
      animate();
代码语言:javascript
复制
<script src="//cdnjs.cloudflare.com/ajax/libs/pixi.js/1.6.1/pixi.js"></script>

票数 3
EN

Stack Overflow用户

发布于 2019-09-12 20:53:18

通过设置Text属性覆盖Pixi对resolution实例的默认呈现程序解析:

代码语言:javascript
复制
var text = new PIXI.Text("Hello World", {font:"50px Arial", fill:"black"});
text.resolution = 8;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25838214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档