html5画布描边样式?

2024-01-02

我正在尝试将图像映射到使用描边样式和画布模拟布料的“3d”网格,我包含该图像,但它当前充当背景图像,实际上并不像波纹那样与“布料”一起流动,即随着网格的流动,图像是静态的。 这是jsfiddle http://jsfiddle.net/S7nBq/这是不言自明的(仅适用于 Chrome)。 任何帮助深表感谢。 这是将图像渲染到背景中的 javascript,我如何停止渲染为背景图像并仅使其填充网格?:

function update() {

    var img = new Image();
    img.src = 'http://free-textures.got3d.com/architectural/free-stone-wall-   textures/images/free-stone-wall-texture-002.jpg';
    img.onload = function() {

        // create pattern
        var ptrn = ctx.createPattern(img, 'repeat');

        ctx.clearRect(0, 0, canvas.width, canvas.height);

        physics.update();

        ctx.strokeStyle = ptrn;
        ctx.beginPath();
        var i = points.length;
        while (i--) points[i].draw();
        ctx.stroke();

        requestAnimFrame(update);
    }
}

原来是她的codepen http://codepen.io/stuffit/pen/KrAwx我从工作。 `更新了fiddle http://jsfiddle.net/S7nBq/图像位于函数 update() 之外: 目前它似乎实际上填充了单元格并将其应用为背景图像。有什么方法可以阻止它成为背景图像并仅将其应用于填充网格吗?我试过这个:
ctx.fillStyle = ptrn; 并删除第 260 行:
ctx.笔划样式 = ptrn; 但它似乎删除了背景图像,只是将其显示为黑色网格...再次感谢您的耐心


天啊!好问题!

那么让我们看看我们有什么。一个具有一堆“约束”的系统,这些“约束”是 2 个点的集合。约束本身成对出现,它们形成两条线,形成一条形状(盒子的右下角)。

如果我们单独绘制每条约束线,我们会看到:

这都是水平的红线和垂直的蓝线。画一个我们就可以看到形状,每条长红线实际上是数百条小线,每条线的底部形状,端对端。有数百个就在这里,它们一起使它看起来像一个有凝聚力的网格。事实上,每个人都已经是独立的,这对我们来说很容易。

这个形状就是我们确定某种边界框所需的全部。而且看起来每个Point in a Constraint带有原始值,所以我们将它们保存为sx and sy.

如果我们知道盒子在新位置的边界,并且我们知道原始边界,因为我们已经保存了约束的所有点值,那么我们应该是黄金。

一旦我们有了 Constraint 的原始边界框及其当前边界框,我们所要做的就是使用这两个框调用 drawImage :ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh);

我写了一个新的Constraint.prototype.draw例程,看起来像这样:

等等。

有几种方法可以“修补”漏洞,这完全取决于您,否则您将不得不进行转换。

看一下代码。我没有改变太多。寻找!!!在代码中(我的编辑)和DEBUG:在代码中(调试代码,以防图像未加载或您想查看线框)。

http://jsfiddle.net/simonsarris/Kuw6P/ http://jsfiddle.net/simonsarris/Kuw6P/

代码很长,所以我不想将其全部粘贴到这里,但这里有一个备份,以防 jsfiddle 出现故障:https://gist.github.com/simonsarris/5405304 https://gist.github.com/simonsarris/5405304

这是最相关的部分:

// !!! new super awesome draw routine! So cool we skipped naming it draw2!
Constraint.prototype.draw3 = function(otherP2) {

  // NOW dear friends consider what we have. Each box is made out of two lines,
  // the bottom and rightmost ones.
  // From these lines we can deduce the topleft and bottom-right points
  // From these points we can deduce rectangles
  // From the skewed rectangle vs the original rectangle we can "stretch"
  // an image, using drawImage's overloaded goodness.

  // AND WE'RE OFF:

  // destination rect has 2 points:
  //top left: Math.min(this.p2.x, otherP2.x), Math.min(this.p2.y, otherP2.y)
  //bottom right: (this.p1.x, this.p1.y)

  // image destination rectangle, a rect made from the two points
  var dx = Math.min(this.p1.x,  Math.min(this.p2.x, otherP2.x));
  var dy = Math.min(this.p1.y,  Math.min(this.p2.y, otherP2.y));
  var dw = Math.abs(this.p1.x - Math.min(this.p2.x, otherP2.x));
  var dh = Math.abs(this.p1.y - Math.min(this.p2.y, otherP2.y));
  // DEBUG: IF THERE IS NO IMAGE TURN THIS ON:
  //ctx.strokeStyle = 'lime';
  //ctx.strokeRect(dx, dy, dw, dh);

  // source rect 2 points:
  //top left: Math.min(this.p2.sx, otherP2.sx), Math.min(this.p2.sy, otherP2.sy)
  //bottom right: (this.p1.sx, this.p1.sy)

  // these do NOT need to be caluclated every time,
  // they never change for a given constraint
  // calculate them the first time only. I could do this earlier but I'm lazy
  // and its past midnight. See also: http://www.youtube.com/watch?v=FwaQxDkpcHY#t=64s
  if (this.sx === undefined) {
    this.sx = Math.min(this.p1.sx,  Math.min(this.p2.sx, otherP2.sx));
    this.sy = Math.min(this.p1.sy,  Math.min(this.p2.sy, otherP2.sy));
    this.sw = Math.abs(this.p1.sx - Math.min(this.p2.sx, otherP2.sx));
    this.sh = Math.abs(this.p1.sy - Math.min(this.p2.sy, otherP2.sy));
  }
  var sx = this.sx;
  var sy = this.sy;
  var sw = this.sw;
  var sh = this.sh;
  // DEBUG: IF THERE IS NO IMAGE TURN THIS ON:
  //ctx.strokeStyle = 'red';
  //ctx.strokeRect(sx, sy, sw, sh);


  // IF we have a source and destination rectangle, then we can map an image
  // piece using drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh)
  // Only problem, we're not exactly dealing with rectangles....
  // But we'll deal. Transformations have kooties anyways.
  ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html5画布描边样式? 的相关文章

随机推荐

  • 如何解决错误:imread 不是 cv 的成员?

    我使用 OpenCV 3 0 和 Ubuntu 14 04 我正在尝试使用 OpenCV 在 Ubuntu 上编译一些代码 我收到错误 错误 imread 不是 cv 的成员 由于我之前的搜索知识 我尝试通过添加 highgui h 进行编
  • rmi ejb 调用中可重用登录会话的概念

    这不是一个简单的问题 只是因为我正在重新考虑通过登录和安全保护 EJB 3 0 服务的架构 我们在 JBoss 5 1 上有一个 EJB3 0 应用程序 它为 SWT 客户端提供各种服务来读取和写入数据 要使用服务 客户端必须使用有效的用户
  • 如何让 rufus-scheduler 与部署到 Heroku 的 Rails 应用程序一起工作?

    In config initializers我创建了一个名为task scheduler rb它包含以下代码 require rufus scheduler require mechanize scheduler Rufus Schedul
  • 使用 Guzzle 6 将文件上传到 API 端点

    我可以使用 Postman 将文件上传到 API 端点 我正在尝试将其转换为从表单上传文件 使用 Laravel 上传文件并使用 Guzzle 6 发布到端点 Screenshot of how it looks in Postman I
  • document.ActiveElement 不返回 Safari 中的活动元素

    在我正在编写的网站中 需要在发生某些事情之前显示一些确认文本 我使用的解决方案在单击按钮时显示一个模式窗口 当窗口关闭时 Jquery 会查看单击了哪个按钮 所以我有以下注销确认信息 function logOut on click fun
  • 无法更新 XCode:空间不足[重复]

    这个问题在这里已经有答案了 我正在尝试将 XCode 从 11 2 1 更新到 12 4 我从应用程序商店安装了 XCode 因此我尝试从那里更新它 我有 27 GB 的可用空间 但每次尝试更新时 都会提示我没有足够的空间 我不认为还有什么
  • Neoclipse 的替代品 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在玩neo4j来用JAVA存储一些数据 我希望有一个好方法来可视化我的 neo4j 数据库并查看属性等 主要是为了获得反馈并了解我在数
  • macOS 应用程序:处理绑定到全局键盘快捷键的组合键

    在某些应用程序中 应用程序直接处理键盘快捷键是有意义的 否则这些快捷键将绑定到系统范围的组合 例如 Space 通常是 Spotlight 或 Tab 通常是应用程序切换器 这适用于各种 Mac 应用程序 例如 VMWare Fusion
  • 将子元素范围包装在 div 中

    我试图将一系列子元素包装在 div 中 以便分组操作它们 尝试将每个组定位在不同的位置 场景是我有一个随机生成的列表li标签 无论出现多少个 我都需要单独操作每组十个标签 为了解决这个问题 我使用了一个书面列表 ul li ul li nt
  • ZSH RPROMPT 奇怪的间距?

    这是我的 ZSH 提示主题 function git prompt info ref git symbolic ref HEAD 2 gt dev null return echo parse git dirty ZSH THEME GIT
  • C语言这段代码是什么意思? if(按钮 & 1)==1 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我对此很困
  • java.security.AccessControlException:访问被拒绝(java.io.FilePermission

    final File parentDir new File S PDSPopulatingProgram parentDir mkdir final String hash popupateData final String fileNam
  • 定制 Android 电话应用程序

    我认为这是正确的论坛 而不是 android stackechange 因为它与软件相关 我是一名 Java 开发新手 需要创建具有以下功能的自定义 Android 电话应用程序 设备启动时自动启动 以信息亭模式启动 无通知 或访问其他应用
  • 如何隐式转换模板化构造函数参数?

    我正在重载模板类的构造函数A对于标量和容器类型参数 具有不同的输入类型 template
  • 与任何 Excel 操作进行上下文同步时发生内部错误

    我有多个 Excel 工作簿导致 Excel API 抛出异常An internal error has occurred在我们在应用程序中进行的第一次上下文同步中 Excel代码看起来像这样 let range ctx workbook
  • 搜索具有特定文件内容的文件

    我正在尝试编辑许多具有特定文件内容的文件 我需要搜索那些有一些内容的文件 有没有任何软件可以非常准确地进行此类搜索 我尝试使用 Windows 7 进行搜索 但看起来丢失了许多文件 Thanks Windows 本机搜索可能非常有限 我建议
  • 由外部包导出的 React 和 Webpack 渲染组件

    我正在尝试使用外部脚本中公开的 React 组件 捆绑A 在我的主 React 应用程序中 捆绑包B 外部 React header 组件 捆绑A 是通过加载
  • 如何防止groupby超类索引?

    假设您有以下半多索引对象 https pandas pydata org pandas docs stable user guide advanced html creating a multiindex hierarchical inde
  • Visual Studio 调用堆栈窗口不显示文件名

    我正在 Visual Studio 中调试程序 我想知道为什么我的程序会传递到特定单元 源代码文件 中的函数旁边 我以为调用堆栈会显示这一点 但事实似乎并非如此 此外 可显示条目列表甚至没有提及文件名 显示模块名称 显示参数类型 显示参数名
  • html5画布描边样式?

    我正在尝试将图像映射到使用描边样式和画布模拟布料的 3d 网格 我包含该图像 但它当前充当背景图像 实际上并不像波纹那样与 布料 一起流动 即随着网格的流动 图像是静态的 这是jsfiddle http jsfiddle net S7nBq