<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xzben‘blog]]></title><description><![CDATA[见证我成长的足迹]]></description><link>https://blog.youkuaiyun.com/xzben</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xzben]]></copyright><item><title><![CDATA[OpenGL 光照]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/145487350</link><guid>https://blog.youkuaiyun.com/xzben/article/details/145487350</guid><author>xzben</author><pubDate>Sat, 08 Feb 2025 09:34:11 +0800</pubDate><description><![CDATA[只是针对Phong模型的镜面光计算方案进行优化，主要是因为Phong模型镜面光效果是取决于光线反射向量和观察向量的夹角的cos值 max(0, dot(viewDir, reflectDir))，所以这个方案就存在当夹角 >= 90 的时候我们得到得镜面光效果都 等于0 导致会存在镜面光一个明显的断层效果，如下图右图就是观察方向和反射方向夹角 > 90 的情况了。所以可以理解为正常情况下（全局白色光照，全局的含义是光是四面八方全方位的光照）物体颜色就是物体的对颜色的反射系数。由于物体的反射系数是不变的。]]></description><category></category></item><item><title><![CDATA[GLSL shader 编写技巧]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/145468375</link><guid>https://blog.youkuaiyun.com/xzben/article/details/145468375</guid><author>xzben</author><pubDate>Thu, 06 Feb 2025 11:13:10 +0800</pubDate><description><![CDATA[5、fract(x) 可以提取x小数部分，如果我们x 本身取值 0 ~ 1.0 结合  fract(x*n) 就可以实现将 x 分割成n段的 0 ~ 1 的坐标了。6.1 一维随机数  fract(sin(x)*n)  通过 对x 取 sin 值然后放大n倍取小数部分获取 0 ~ 1 的随机值，可以放大 n 值活得波动更大的随机值。(0,1)  --------    (1,1)  → 右上。(0,0)   --------   (1,0)  → 右下。），这个变量对用点精灵的模式绘制很有用。]]></description><category></category></item><item><title><![CDATA[渲染数学基础]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/145455605</link><guid>https://blog.youkuaiyun.com/xzben/article/details/145455605</guid><author>xzben</author><pubDate>Wed, 05 Feb 2025 15:07:52 +0800</pubDate><description><![CDATA[则体积 V= 1/3 * A * h = 1/3 * (|ac x ab|/2) * (ad * (ac x ab / |ac x ab|)) = 1/6 * ad * (ac x ab)Area = |AC|*|AB|*sin(theta)/2   // 向量 AB 与 向量 AC 组成的角的sin值和向量 AB 、 AC 的模长的乘积的2倍。| p x q | = |p|*|q|*sin(theta)  // 向量 p q 夹角的sin值和 p q 的模长的乘积。]]></description><category></category></item><item><title><![CDATA[Vulkan 总结]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/130547130</link><guid>https://blog.youkuaiyun.com/xzben/article/details/130547130</guid><author>xzben</author><pubDate>Sun, 07 May 2023 21:46:13 +0800</pubDate><description><![CDATA[1、VKInstance 这个对象是我们 Vulkan api 的一个对象，用于通过 Instance 我们与 Vulkan 底层进行交互。2、VkPhysicalDevice 对应我们当前设备（PC、手机）的一个显卡硬件（GPU ），有的设备有多个显卡那么我们就能获得多个 VkPhysicalDevice  对象，这时候我们需要按自己的需求去选择最适合我们渲染需要的 GPU 了。3、VKDevice 我们称之为 逻辑设备，是用来和  VkPhysicalDevice  GPU硬件交互的一个对象。]]></description><category></category></item><item><title><![CDATA[Vulkan 学习笔记]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/129706749</link><guid>https://blog.youkuaiyun.com/xzben/article/details/129706749</guid><author>xzben</author><pubDate>Thu, 23 Mar 2023 17:01:01 +0800</pubDate><description><![CDATA[Vulkan 学习笔记]]></description><category></category></item><item><title><![CDATA[各种好文收藏]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/126359540</link><guid>https://blog.youkuaiyun.com/xzben/article/details/126359540</guid><author>xzben</author><pubDate>Tue, 16 Aug 2022 09:45:24 +0800</pubDate><description><![CDATA[帧同步好文收藏]]></description><category></category></item><item><title><![CDATA[CPP 新语法规则笔记]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/126078483</link><guid>https://blog.youkuaiyun.com/xzben/article/details/126078483</guid><author>xzben</author><pubDate>Sat, 30 Jul 2022 23:02:37 +0800</pubDate><description><![CDATA[C++11 以上新增语法规则归纳总结方便查阅]]></description><category></category></item><item><title><![CDATA[Jenkins 使用]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/124836715</link><guid>https://blog.youkuaiyun.com/xzben/article/details/124836715</guid><author>xzben</author><pubDate>Wed, 18 May 2022 10:11:18 +0800</pubDate><description><![CDATA[windows10中jenkins使用教程 - 简书
]]></description><category></category></item><item><title><![CDATA[OpenGL 之Texture]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/124107260</link><guid>https://blog.youkuaiyun.com/xzben/article/details/124107260</guid><author>xzben</author><pubDate>Tue, 12 Apr 2022 11:35:09 +0800</pubDate><description><![CDATA[一、Texture 存在的原因。

我们绘制物体是通过顶点组成图元然后转换成像素片段然后着色绘制而成的。如果我们由顶点上指定的颜色来绘制物体，那么一个颜色丰富的物体需要大量的顶点才能表达。这时候Texture就出来了。Texture 是一个2D的图片，通过他我们能用少量的顶点绘制更加颜色丰富的图元了。使用Texture我们需要在顶点数据中同时指定顶点对应的纹理坐标（x,y 的2D坐标值）。在OpenGL绘制时在片段着色器中通过对Texture采样赋予片段颜色。

在实际应用中，Texture...]]></description><category></category></item><item><title><![CDATA[OpenGL 渲染流程]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/124104622</link><guid>https://blog.youkuaiyun.com/xzben/article/details/124104622</guid><author>xzben</author><pubDate>Mon, 11 Apr 2022 19:11:47 +0800</pubDate><description><![CDATA[1、OpenGL是什么

    OpenGL 是由 Khronos 组织制定并维护的一套图形渲染API规范合集，具体的功能实现是由各个显卡的开发厂商根据规范实现对应的功能。

由于OpenGL 是运行在 GPU(显卡)上的，而我们编写的程序都是运行在CPU上的，所以OpenGL的绘制过程就是在CPU操作GPU提供的API控制显卡这个状态机绘制图形的过程。

2、OpenGL 渲染流程

OpenGL 渲染的原理是将输入的3d坐标的顶点数据绘制成屏幕上的2D像素片段的过程。通过这句话...]]></description><category></category></item><item><title><![CDATA[OpenGL学习小结]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/124103008</link><guid>https://blog.youkuaiyun.com/xzben/article/details/124103008</guid><author>xzben</author><pubDate>Mon, 11 Apr 2022 17:23:18 +0800</pubDate><description><![CDATA[OpenGL 学习总结]]></description><category></category></item><item><title><![CDATA[cocos creator 项目总结六（战斗性能优化2）]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/120533700</link><guid>https://blog.youkuaiyun.com/xzben/article/details/120533700</guid><author>xzben</author><pubDate>Tue, 28 Sep 2021 19:41:33 +0800</pubDate><description><![CDATA[本来项目是计划上原生平台，但是中途决定还是先上小游戏平台，然后发现性能惨不忍睹。为此就只能继续开始漫漫优化之路。

1、优化不必要的ui操作

前面文章cocos creator 项目总结二（战斗帧同步解析）_xzben‘blog-优快云博客提到过的战斗设计是逻辑和ui解耦的设计方式，也就是界面层不能通过直接拿到数据层的对象去更新位置，而是通过逻辑层每个逻辑帧 dispatchMessage 给ui层去 创建/删除/更新 显示节点。一开始的设计时候觉得更新节点位置信息这些操作应该是基本...]]></description><category></category></item><item><title><![CDATA[cocos creator 项目总结五（战斗性能优化）]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/120041402</link><guid>https://blog.youkuaiyun.com/xzben/article/details/120041402</guid><author>xzben</author><pubDate>Wed, 01 Sep 2021 16:05:36 +0800</pubDate><description><![CDATA[前面cocos creator 项目总结二（战斗帧同步解析）已经讲到过帧同步过程卡顿的优化问题，本片主要针对3d 对战过程性能优化的一些点。

    其实我们优化的方向其实是很直接的两个方面 1、降 drawcall 2、减少复杂的运算逻辑，尽量将性能中能用内存换速度的都用缓存提升运算速度。其它的就是一些细节问题了

1、ui drawcall 的优化，这个点其实cocos 论坛很多朋友都分享过，主要是通过合图降低drawcall，label 开启cache 模式，bitm...]]></description><category></category></item><item><title><![CDATA[cocos creator 项目总结四（游戏启动流程设计）]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/120040836</link><guid>https://blog.youkuaiyun.com/xzben/article/details/120040836</guid><author>xzben</author><pubDate>Wed, 01 Sep 2021 15:36:47 +0800</pubDate><description><![CDATA[由于creator是针对 android、ios、web、小游戏等平台的引擎，所以游戏的加载过程肯定是要能适应各个环境的启动的。对于web和小游戏这种需要远程下载资源的肯定是要做好启动流程的设计这对于游戏的启动速度效果是有很重要效果的。

    在指定启动流程的时候首先要提到的是creator bundle模式的一个特点，就是bundle如果选择了小游戏的 subpackage 模式就不能让资源是 remoteassets 了，如果设置成了 remoteasset 那你的代码就只能...]]></description><category></category></item><item><title><![CDATA[cocos creator 项目总结三（资源管理方案）]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/120039818</link><guid>https://blog.youkuaiyun.com/xzben/article/details/120039818</guid><author>xzben</author><pubDate>Wed, 01 Sep 2021 15:18:08 +0800</pubDate><description><![CDATA[一、引言

针对资源的管理，很多人项目可能都不会自己单独再封装一层管理。简单粗暴的使用引擎提供的接口直接releaseunUse。这样当然也是没问题，能很大程度上解决资源清理的问题。但是我经历过这么多项目以来，由衷的感觉一个好的资源管理会为你以后性能优化提供很大的帮助，特别是那些大型项目到后期因为场景多界面多导致资源管理复杂，而最终导致没管理好导致游戏内存效果高又没好的办法去降低（因为前期没规划好后期只能修修补补）。

二、方案的抉择

    在此项目之前我一直都是用的...]]></description><category></category></item><item><title><![CDATA[cocos creator 项目总结二（战斗帧同步解析）]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/120036956</link><guid>https://blog.youkuaiyun.com/xzben/article/details/120036956</guid><author>xzben</author><pubDate>Wed, 01 Sep 2021 14:45:46 +0800</pubDate><description><![CDATA[一、帧同步原理:

    帧同步，指的是将游戏过程中关键的操作帧数据同步给各个客户端实现游戏同步的方案。这个原理看上去一句话很简单，但是其实内部涉及的细节却很多，影响到游戏的卡顿，同步是否完全同步等问题，接下来我一一列举我制作过程中遇到的问题和解决方案。

二、客户端同步一致性问题

1、逻辑驱动归一管理，这个主要是要将战斗过程的所有逻辑运算update驱动要统一管理，而不是简单的通过UI 层的update分散驱动，这样做的话你的update是不确定的，这里的确定分两部分1）执行时间上的确定性，2...]]></description><category></category></item><item><title><![CDATA[cocos creator 项目总结一（框架概括）]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/120033503</link><guid>https://blog.youkuaiyun.com/xzben/article/details/120033503</guid><author>xzben</author><pubDate>Wed, 01 Sep 2021 12:02:33 +0800</pubDate><description><![CDATA[1、开发背景

    以前一直从cocos2dx+lua开发。creator 一直只是关注和简单测试使用，所以本地项目是第一次正式的用creator 开发游戏，3D类游戏也是第一次尝试开发。所以可能有些地方的设计不一定是最优，如有更好方案欢迎留言角落。

2、项目基础框架设计

    2.1 项目目录结构

        1、word 整个游戏的加载入口，游戏中的代码和资源都以bundle方式管理，world 负责将游戏核心某块加载。

        ...]]></description><category></category></item><item><title><![CDATA[smartsvn.license]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/114660580</link><guid>https://blog.youkuaiyun.com/xzben/article/details/114660580</guid><author>xzben</author><pubDate>Thu, 11 Mar 2021 12:42:56 +0800</pubDate><description><![CDATA[Name=csdn 
Address=1337 iNViSiBLE Str. 
Email=admin@youkuaiyun.com 
FreeUpdatesUntil=2099-09-26 
LicenseCount=1337 
Addon-xMerge=true 
Addon-API=true 
Enterprise=true 
Key=4kl-&lt;Zqcm-iUF7I-IVmYG-XAyvv-KYRoC-xlgsv-sSBds-VAnP6


]]></description><category></category></item><item><title><![CDATA[windows 多开微信]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/110049289</link><guid>https://blog.youkuaiyun.com/xzben/article/details/110049289</guid><author>xzben</author><pubDate>Tue, 24 Nov 2020 10:47:23 +0800</pubDate><description><![CDATA[start "" "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"
start "" "D:\Program Files (x86)\Tencent\WeChat\WeChat.exe"

新建bat文件，输入上面代码，这是开两个，如果要多个自己复制对应行数，后面的 微信exe，路径自己根据自己的微信安装目录获取即可
...]]></description><category></category></item><item><title><![CDATA[protoc-gen-lua message 嵌套 message 报错   message_type 为nil]]></title><link>https://blog.youkuaiyun.com/xzben/article/details/109717915</link><guid>https://blog.youkuaiyun.com/xzben/article/details/109717915</guid><author>xzben</author><pubDate>Mon, 16 Nov 2020 11:37:53 +0800</pubDate><description><![CDATA[这个问题主要是由于 嵌套message 没有在使用message 之前定义，导致生成 pb 文件的时候识别嵌套message时候不认识被嵌套message导致生成的message_type 为 未定义的值，只要注意将要使用的message先定义就行了。这个坑不注意是很难发现的。
...]]></description><category></category></item></channel></rss>