首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >famo.us是如何运作的?

famo.us是如何运作的?
EN

Stack Overflow用户
提问于 2015-01-08 14:51:48
回答 1查看 91关注 0票数 0

我试图弄清楚famo.us透视图转换是如何工作的。

我假设famo.us使用单点透视,这意味着新图像只是平面(一些具有不同z坐标的平面)与从焦点到原始图像的线的交点。

我还假设声明context.setPerspective(100)设置了从焦点到原始图像(屏幕)的距离。

这意味着图像的Transform.translate(0, 0, -50)应该使新图像小2倍,但它不!!

我在famo.us文档中没有找到有关这方面的任何信息。

有什么想法吗?

P.S:我需要计算转换距离,用图像填充屏幕宽度(而且我不想使用缩放)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-08 20:00:42

透视与3D空间相关,并且与像素的原点相关。首先,您应该为您的透视图使用更大的值(例如1000)。其次,使用修饰符来设置与上下文相关的曲面的翻译。正值使元素更接近观看者,负值更远。

注意:将你的translateZ值移动一半并不会改变你的表面尺寸!它只从你的角度移动它,更近或更远,沿着原轴。运行下面的示例并将翻译更改为-1000,您将看到。

示例jsBin

代码语言:javascript
复制
  var mainContext = Engine.createContext();
  var contextPerspective = 1000;
  mainContext.setPerspective(contextPerspective);

  var surface = new Surface({ 
    content: 'Background',
    transform: Transform.translate(0, 0, 0.002),
    properties: {
      backgroundColor: 'rgba(0,0,0,0.1)'
    }
  });

  var surfacemod = new Modifier({
    origin: [0.5, 0.5],
    align: [0.5, 0.5]
  });

  mainContext.add(surfacemod).add(surface);

  surfacemod.setTransform(Transform.translate(0, 0, -500));

编辑:根据上下文的宽度查找z转换值

示例jsBin (宽度)

示例jsBin (基于上下文大小的图像宽度或高度)

代码语言:javascript
复制
  var surfacemod = new Modifier({
    size: [200, 100],
    origin: [0.5, 0.5],
    align: [0.5, 0.5]
  });


var contextSize = mainContext.getSize();
var surfaceSize = surface.getSize();
var percentage = (contextSize[0]- surfaceSize[0]) / contextSize[0];
var transZ = contextPerspective * percentage;

surfacemod.setTransform(Transform.translate(0, 0, transZ));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27842891

复制
相关文章

相似问题

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