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

网站建设需要ui吗关键词排名优化网站建设公司哪家好

网站建设需要ui吗,关键词排名优化网站建设公司哪家好,wordpress版 影视站,科技制作网站前言 Sprite是游戏内容的一个基本组成元素#xff0c;包括ui、道具、立绘等各种地方都会用到。大部分情况下美术会帮我们调好图片颜色#xff0c;我们只要把图片直接放到游戏里就行了。Sprite默认的渲染顶点数据中包含了颜色数据#xff0c;由于我们并不需要去修改颜色…前言 Sprite是游戏内容的一个基本组成元素包括ui、道具、立绘等各种地方都会用到。大部分情况下美术会帮我们调好图片颜色我们只要把图片直接放到游戏里就行了。Sprite默认的渲染顶点数据中包含了颜色数据由于我们并不需要去修改颜色某些情况下这似乎是一个不必要的东西。 去年底的时候由于希望在性能优化方面做一些研究在论坛找到了江南百景图研发负责人的技术分享文章其中提到 优化 Shader 的输入数据 由于《江南百景图》的图片资源中不会用到 Color 这个属性因此在材质中我们将原有的 Color 数据去除掉。 将原有的 Color 数据去除掉。用来存放项目中所需要的其它信息这样做可以减少 CPU 与 GPU 互相传输的数据量。 本文参照文章中的思路实现了这个优化。 开发环境 浏览器Chrome 开发语言JavaScript 引擎版本CocosCreator 2.4.3 词语缩写对照 顶点格式顶点数据格式。 研究过程 按照思路需要改动Sprite渲染相关代码以及修改对应的材质。 翻源码找出Sprite对应的assembler是SimpleSpriteAssembler渲染模式为simple时。 源码位于cocos2d\core\renderer\webgl\assemblers\sprite\2d\simple.js 其继承关系为cc.Assembler-cc.Assembler2D-SimpleSpriteAssembler。 缕清关系后我们要找出顶点数据格式是在哪定义的。assembler用于填充顶点数据所以我们到Assembler.js中找找。 import { vfmtPosUvColor } from ./webgl/vertex-format; export default class Assembler {getVfmt () {return vfmtPosUvColor;} } 找到了默认顶点格式就是这个vfmtPosUvColor。 var vfmtPosUvColor new gfx.VertexFormat([{ name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },{ name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },{ name: gfx.ATTR_COLOR, type: gfx.ATTR_TYPE_UINT8, num: 4, normalize: true }, ]); 从vfmtPosUvColor的定义可以看出顶点数据中含有三个数据括号里的英文对应材质中的输入变量名 ATTR_POSITIONa_position 位置ATTR_UV0a_uv0 uvATTR_COLORa_color 颜色 很明显ATTR_COLOR就是我们今天的目标 弄清楚顶点格式后下一步是找到填充这些数据的地方。 顶点数据保存于RenderData这三个数据是分开填充的避免有些时候只需要更新其中一个如只是移动了位置却要全部跑一遍。顶点数据填充时是按定义好的顺序填充的此处引用论坛文章的图 由于我们只是去除最后的color所以位置和uv的填充函数是不需要修改的在一个顶点数据中的相对位置没有发生改变。 找出颜色填充函数updateColor函数声明于assembler-2d.js。 updateColor (comp, color) {let uintVerts this._renderData.uintVDatas[0];if (!uintVerts) return;color color ! null ? color : comp.node.color._val;let floatsPerVert this.floatsPerVert;let colorOffset this.colorOffset;for (let i colorOffset, l uintVerts.length; i l; i floatsPerVert) {uintVerts[i] color;} } 函数中将颜色值填充在每个顶点数据的末尾position和uv之后。我们需要修改updateColor函数因为不再需要填充颜色值了。 实现思路 看完又是要改源码了。不过还是可以通过继承相关类实现。继承方案相对来说会比较麻烦但在实验阶段需要频繁修改时会更方便快速。 我们需要自定义Sprite、Assembler、Material、Effect。分别命名为NoColorSprite、NoColorSpriteAssembler、noColorMaterial、noColorEffect。 需求可拆分为如下实现步骤 新建noColorEffect及noColorMaterial在内置的代码基础上去除颜色相关内容。新建NoColorSpriteAssembler新建顶点格式并重写/实现渲染数据填充的相关函数。新建NoColorSprite将默认的assembler改为我们自己的NoColorSpriteAssembler。 代码 第一步是effect和material主要工作是删代码颜色相关的... 新建的material只要将effect引用改为noColorEffect即可。 // 删除颜色相关输入输出处理 CCProgram vs %{precision highp float;#include cc-global#include cc-localin vec3 a_position;#if USE_TEXTUREin vec2 a_uv0;out vec2 v_uv0;#endifvoid main () {vec4 pos vec4(a_position, 1);#if CC_USE_MODELpos cc_matViewProj * cc_matWorld * pos;#elsepos cc_matViewProj * pos;#endif#if USE_TEXTUREv_uv0 a_uv0;#endifgl_Position pos;} }%// 删除颜色相关输入处理 输出颜色直接取像素颜色 CCProgram fs %{precision highp float;#include alpha-test#include texture#if USE_TEXTUREin vec2 v_uv0;uniform sampler2D texture;#endifvoid main () {vec4 o vec4(1, 1, 1, 1);#if USE_TEXTURECCTexture(texture, v_uv0, o);#endifALPHA_TEST(o);gl_FragColor o;} }% 接着创建NoColorSpriteAssembler.js自定义顶点格式去掉默认的颜色字段。 let gfx cc.gfx; let vfmtNoColor new gfx.VertexFormat([{ name: gfx.ATTR_POSITION, type: gfx.ATTR_TYPE_FLOAT32, num: 2 },{ name: gfx.ATTR_UV0, type: gfx.ATTR_TYPE_FLOAT32, num: 2 }, // texture纹理uv ]); 我们只是想去除颜色可以通过继承cc.Assembler实现noColorMaterial其他渲染相关代码则可以从Assembler2D及SimpleSpriteAssembler中复制。这里贴出主要的代码。 因为我们修改了顶点格式需要同步修改相关值。这里重写构造函数进行修改。 floatsPerVert是顶点格式数据长度用浮点数计算原本是5个浮点数这里去掉了颜色所以改为4。其他数据照抄Assembler2D中的值即可。 export default class NoColorAssembler extends cc.Assembler {constructor () {super();// uv在顶点数据中的偏移位置(前面有两个float的值表示position)this.uvOffset 2;// 每个顶点的浮点数数量(position 2浮点数uv 2浮点数)this.floatsPerVert 4;// 顶点数量 (可以用4个点来表示两个三角形)this.verticesCount 4;// 顶点索引数量 (两个三角形共6个顶点索引) 这个部分可以看链接中的文章有说明。this.indicesCount 6;this.initData();this.initLocal();} } 修改顶点数据格式后我们需要一个不一样的RenderData来存储这些数据模仿Assembler2D实现initData函数在里面按我们定义的格式创建RenderData。 /** * 初始化this._renderData 仿照Assembler2D.initData 创建自定义格式的renderData */ initData () {let data this._renderData new cc.RenderData();this._renderData.init(this);// 按我们自己的格式创建RenderDatadata.createFlexData(0, this.verticesCount, this.indicesCount, this.getVfmt());// createFlexData不会填充顶点索引信息手动补充一下 仿照cc.RenderData.initQuadIndiceslet indices data.iDatas[0];let count indices.length / 6;for (let i 0, idx 0; i count; i) {let vertextID i * 4;indices[idx] vertextID;indices[idx] vertextID1;indices[idx] vertextID2;indices[idx] vertextID1;indices[idx] vertextID3;indices[idx] vertextID2;} } 再之后是本文的重点把颜色的填充功能去掉 /** * 更新颜色 啥也不干 */ updateColor () { } 最后改动顶点数据格式后还有一些需要同步修改的地方。 /** * 获得存放自定义顶点数据的buffer * returns {cc.MeshBuffer} */ getBuffer() {return cc.renderer._handle.getBuffer(mesh, this.getVfmt()); } /** * 获得顶点数据格式 * 重写 返回自定义的顶点数据格式 * returns {cc.gfx.VertexFormat} */ getVfmt () {return vfmtNoColor; } 代码有点长没有全部贴出来。可以在后面的源码附件中查看其他函数基本是从Assembler2D及SimpleSpriteAssembler复制出来的。 最最最后如果产生一些如继承、函数为空之类的报错可以在creator.d.ts文件中增加以下声明。 declare namespace cc {export class Assembler {public _renderComp: cc.RenderComponent;public init(comp: cc.RenderComponent);public getVfmt();static public register(renderCompCtor, assembler);}export class RenderData {init(assembler: cc.Assembler);createQuadData(index, verticesFloats, indicesCount);createFlexData(index, verticesFloats, indicesCount, vfmt): cc.FlexBuffer;initQuadIndices(idata);vDatas;uintVDatas;iDatas;meshCount: number;_infos;_flexBuffer;} } 效果对比 测试案例 一个sprite复制200次。分别使用默认的cc.Sprite和我们实现的NoColorSprite。 使用console.time函数结合cc.Director中的EVENT_BEFORE_UPDATE、EVENT_AFTER_UPDATE、EVENT_AFTER_DRAW事件统计前两百帧的游戏逻辑耗时及渲染耗时。 耗时对比如下 绿色线为优化前蓝色线为优化后。可以看出均有一定程度的减少。 render耗时由于前几帧较高图表看起来比较奇怪再贴一张去掉前三帧的对比图。 总结 简单来说少了1/5的数据传输量material中也不需要计算颜色优化效果是可想而知的。 本优化并不适用于所有项目由于颜色数据被去除了透明度作为颜色值的其中一项也不再生效了。图片本身的透明度会被保留但无法再通过修改节点的透明度进行动态修改。
文章转载自:
http://www.morning.jzkqg.cn.gov.cn.jzkqg.cn
http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn
http://www.morning.mytmn.cn.gov.cn.mytmn.cn
http://www.morning.ffbl.cn.gov.cn.ffbl.cn
http://www.morning.qnftc.cn.gov.cn.qnftc.cn
http://www.morning.lftpl.cn.gov.cn.lftpl.cn
http://www.morning.kxnnh.cn.gov.cn.kxnnh.cn
http://www.morning.nwjd.cn.gov.cn.nwjd.cn
http://www.morning.mcmpq.cn.gov.cn.mcmpq.cn
http://www.morning.gwwky.cn.gov.cn.gwwky.cn
http://www.morning.fthcq.cn.gov.cn.fthcq.cn
http://www.morning.nbmyg.cn.gov.cn.nbmyg.cn
http://www.morning.dgsx.cn.gov.cn.dgsx.cn
http://www.morning.drspc.cn.gov.cn.drspc.cn
http://www.morning.fqljq.cn.gov.cn.fqljq.cn
http://www.morning.gynls.cn.gov.cn.gynls.cn
http://www.morning.bpmnh.cn.gov.cn.bpmnh.cn
http://www.morning.tgqzp.cn.gov.cn.tgqzp.cn
http://www.morning.tfrmx.cn.gov.cn.tfrmx.cn
http://www.morning.grqlc.cn.gov.cn.grqlc.cn
http://www.morning.seoqun.com.gov.cn.seoqun.com
http://www.morning.pznqt.cn.gov.cn.pznqt.cn
http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn
http://www.morning.ftsmg.com.gov.cn.ftsmg.com
http://www.morning.jypsm.cn.gov.cn.jypsm.cn
http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn
http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn
http://www.morning.qwrb.cn.gov.cn.qwrb.cn
http://www.morning.sgfpn.cn.gov.cn.sgfpn.cn
http://www.morning.prkdl.cn.gov.cn.prkdl.cn
http://www.morning.jqkjr.cn.gov.cn.jqkjr.cn
http://www.morning.clpkp.cn.gov.cn.clpkp.cn
http://www.morning.zkbxx.cn.gov.cn.zkbxx.cn
http://www.morning.twfdm.cn.gov.cn.twfdm.cn
http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn
http://www.morning.pwlxy.cn.gov.cn.pwlxy.cn
http://www.morning.lgrkr.cn.gov.cn.lgrkr.cn
http://www.morning.ykrck.cn.gov.cn.ykrck.cn
http://www.morning.fqzz3.cn.gov.cn.fqzz3.cn
http://www.morning.hbxnb.cn.gov.cn.hbxnb.cn
http://www.morning.sfdsn.cn.gov.cn.sfdsn.cn
http://www.morning.rmxk.cn.gov.cn.rmxk.cn
http://www.morning.kxnnh.cn.gov.cn.kxnnh.cn
http://www.morning.sgqw.cn.gov.cn.sgqw.cn
http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn
http://www.morning.wxfgg.cn.gov.cn.wxfgg.cn
http://www.morning.kynf.cn.gov.cn.kynf.cn
http://www.morning.fkgcd.cn.gov.cn.fkgcd.cn
http://www.morning.qgghr.cn.gov.cn.qgghr.cn
http://www.morning.xrlwr.cn.gov.cn.xrlwr.cn
http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn
http://www.morning.wztnh.cn.gov.cn.wztnh.cn
http://www.morning.gcspr.cn.gov.cn.gcspr.cn
http://www.morning.rsdm.cn.gov.cn.rsdm.cn
http://www.morning.rnmdp.cn.gov.cn.rnmdp.cn
http://www.morning.ghyfm.cn.gov.cn.ghyfm.cn
http://www.morning.wddmr.cn.gov.cn.wddmr.cn
http://www.morning.lzrpy.cn.gov.cn.lzrpy.cn
http://www.morning.lslin.com.gov.cn.lslin.com
http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn
http://www.morning.slpcl.cn.gov.cn.slpcl.cn
http://www.morning.ygpdm.cn.gov.cn.ygpdm.cn
http://www.morning.gsjfn.cn.gov.cn.gsjfn.cn
http://www.morning.lflnb.cn.gov.cn.lflnb.cn
http://www.morning.pqktp.cn.gov.cn.pqktp.cn
http://www.morning.xqjz.cn.gov.cn.xqjz.cn
http://www.morning.ydxg.cn.gov.cn.ydxg.cn
http://www.morning.kycwt.cn.gov.cn.kycwt.cn
http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn
http://www.morning.byxs.cn.gov.cn.byxs.cn
http://www.morning.pqfbk.cn.gov.cn.pqfbk.cn
http://www.morning.hxlch.cn.gov.cn.hxlch.cn
http://www.morning.hmhdn.cn.gov.cn.hmhdn.cn
http://www.morning.trzmb.cn.gov.cn.trzmb.cn
http://www.morning.rtsx.cn.gov.cn.rtsx.cn
http://www.morning.stsnf.cn.gov.cn.stsnf.cn
http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn
http://www.morning.wcjk.cn.gov.cn.wcjk.cn
http://www.morning.rbmm.cn.gov.cn.rbmm.cn
http://www.morning.fndfn.cn.gov.cn.fndfn.cn
http://www.tj-hxxt.cn/news/243713.html

相关文章:

  • 阜新网站制作新农村建设在哪个网站查
  • 兰州新区建设厅网站交换友情链接的渠道有哪些
  • 学做卤菜网站佛山响应式网站
  • 网站内页301巩义网站优化
  • 甘肃两学一做网站西安便宜做网站
  • 网站跳出率高还是低编程代写有哪些平台
  • 百度推广网络推广微信网站网站维护一般要几天
  • 哈尔滨企业网站中天建设有限公司官方网站
  • 上海网站建设免网络工程师工作好找吗
  • 做ppt一般在什么网站好赣州新闻联播今天回放
  • 有哪些网站做明星周边做家装网站源码
  • 丰台网站建设多少钱城市建设局网站
  • 手机管理网站模板价格低廉的意思
  • 唐山做网站多少钱wordpress淘宝客插件开发
  • 网站管理是什么余姚建设网站的公司
  • 培训网站建设方案说明书阜宁做网站的价格
  • 建设工程类网站贺州网站建设公司
  • 外网常用网站生产管理网站开发
  • 福州网站建设方案网站排名突然掉没了
  • 才艺多网站建设网站域名需要续费吗
  • 自己做视频网站上传视频别墅庭院园林景观设计公司
  • 网站开发 360百科个人ip打造范文
  • 做网站用的字体是什么网页视频怎么下载ios
  • wordpress调整logo大小wordpress4.7.3优化
  • 网站推广员网站建设上机课
  • 哪做网站最好做暧小视频xo网站
  • 做外国人的生意哪家网站好网站的源码
  • 五屏网站建设哪家好网站类型分类
  • 哪个网站可以做excel精品资料网 资料库
  • 智能魔方网站seo优化运营