当前位置: 首页 > wzjs >正文

承德哪里做网站百度seo在线优化

承德哪里做网站,百度seo在线优化,一级A做爰片安全网站,永久免费域名哪里申请本来是做一个纹理偏移的效果,不过感觉应该很无聊,最后觉得还是做一个FlipBook效果吧,该效果使用了一张5*5的爆炸动画序列纹理,如下: 最终呈现效果参考: 该部分内容的顶点着色器与 Babylon.js的Shader入门二…

        本来是做一个纹理偏移的效果,不过感觉应该很无聊,最后觉得还是做一个FlipBook效果吧,该效果使用了一张5*5的爆炸动画序列纹理,如下:

最终呈现效果参考:

        该部分内容的顶点着色器与 Babylon.js的Shader入门二(让Shader使用一个纹理)中的内容没有区别(即本次顶点着色器名称为FlipBook.vertex.fx与上一篇中的BaseTexture.vertex.fx内容相同),下面直接展示片元着色器的内容改变。

片元着色器

        FlipBook.fragment.fx文件内容:

precision highp float;uniform sampler2D textureSampler;   // 5x5 动画序列纹理
uniform float rows;                 // 序列帧行数
uniform float cols;                 // 序列这列数
uniform float time;                 // 时间变量,用于控制动画播放varying vec2 vUV;void main() {// 计算总帧数float totalFrames = rows * cols;// 根据时间计算当前帧索引float frameIndex = mod(time * 10.0, totalFrames); // 假设每秒播放 10 帧frameIndex = floor(frameIndex);// 计算当前帧的行列索引float rowIndex = floor(frameIndex / cols);float colIndex = mod(frameIndex, cols);// 计算纹理坐标偏移vec2 frameSize = vec2(1.0 / cols, 1.0 / rows); // 每帧的纹理大小vec2 offset = vec2(colIndex * frameSize.x, 1.0 - (rowIndex + 1.0) * frameSize.y); // 注意 Y 轴方向// 调整纹理坐标vec2 flipbookUV = vUV * frameSize + offset;// 采样纹理vec4 color = texture2D(textureSampler, flipbookUV);gl_FragColor = color;
}

JavaScript 实现

        在 Babylon.js 中,你需要将时间变量 time 传递给 Shader,并更新它的值。

创建 ShaderMaterial

const shaderMaterial = new BABYLON.ShaderMaterial("shader", scene, "./src/Shader/FlipBook",{attributes: ["position", "uv"],uniforms: ["worldViewProjection", "textureSampler", "time"], // 添加 time 变量});// 加载纹理
const texture = new BABYLON.Texture("path/to/texture.png", scene);
shaderMaterial.setTexture("textureSampler", texture);// 初始化时间变量
let time = 0;
shaderMaterial.setFloat("time", time);
//设置爆炸序列图片行数
shaderMaterial.setFloat("rows", 5);
//设置爆炸序列图片列数
shaderMaterial.setFloat("cols", 5);// 创建网格并应用材质
const mesh = BABYLON.MeshBuilder.CreateBox("box", {}, scene);
mesh.material = shaderMaterial;

更新时间变量

        在渲染循环中更新 time 变量,并传递给 Shader。

scene.registerBeforeRender(() => {time += scene.getEngine().getDeltaTime() / 1000; // 更新时间,单位为秒shaderMaterial.setFloat("time", time);
});

原理说明

(1) 动画帧索引计算

  • 根据时间 time 和帧率(如每秒 10 帧)计算当前帧索引 frameIndex

  • 使用 mod 和 floor 函数确保帧索引在有效范围内(0 到 24,因为 5x5 纹理有 25 帧)。

(2) 行列索引计算

  • 根据帧索引 frameIndex 计算当前帧的行索引 rowIndex 和列索引 colIndex

  • 行索引:rowIndex = floor(frameIndex / cols)

  • 列索引:colIndex = mod(frameIndex, cols)

(3) 纹理坐标调整

  • 每帧的纹理大小:frameSize = vec2(1.0 / cols, 1.0 / rows)

  • 计算当前帧的纹理坐标偏移:offset = vec2(colIndex * frameSize.x, 1.0 - (rowIndex + 1.0) * frameSize.y)

    • 注意 Y 轴方向需要翻转,因为纹理坐标的原点在左下角。

  • 调整纹理坐标:flipbookUV = vUV * frameSize + offset

(4) 采样纹理

  • 使用调整后的纹理坐标 flipbookUV 采样纹理。

http://www.dtcms.com/wzjs/292325.html

相关文章:

  • 内蒙建设工程信息网站如何建立免费公司网站
  • 手机制作小程序软件的app国外seo比较好的博客网站
  • 大学英文网站建设举措广州优化公司哪家好
  • 贵州做网站怎么推广2023适合小学生的新闻事件
  • 网站版面的图文是怎么做的英文seo外链发布工具
  • 经典网站首页设计种子搜索神器下载
  • 做网站接活全流程app注册推广平台
  • 国内wordpress教程seo优化标题
  • 传奇做网站空间seo人员培训
  • 怎么进入邯郸论坛网天津百度网站快速优化
  • 做网站上加入模块怎么加入广告关键词查询
  • 深圳网站建设设计net的网站建设
  • 酷炫个人特别网站seo推广培训资料
  • 做平台网站怎么做的qq引流推广软件哪个好
  • 做俄罗斯外贸的网站设计西安seo推广优化
  • 肇庆做网站的有培训机构最新消息
  • 网站建设公司的性质seo整站优化
  • 建设网站的费用如何账务处理百度信息流怎么投放
  • 遵义做网站建设哪家公司好百度快照客服
  • jsp简单的网站开发例子免费有效的推广网站
  • 赤峰网站建设red企业网站建设的基本流程
  • 做网站宽度和长度布局正规培训机构有哪些
  • 移动网站 拉新2023年8月新闻热点事件
  • 怎样360网站做推广seo课程多少钱
  • 电商网站开发的功能seo是指搜索引擎营销
  • 武汉交通建设网站宁德市自然资源局
  • 云南住房和建设厅网站神秘网站
  • 网站制作熊猫建站石家庄关键词优化平台
  • 网站域名服务器一年多少钱泉州seo报价
  • 广州市 网站 建设云建站模板