学习笔记 - Lua实现生产者-消费者模式
这个设计模式常见于并发处理
在生产者和消费者之间产生一层过滤器 过滤器对生产者产生的值进行处理后交给消费者
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667--[[function producer() while true do local x = io.read() send(x) endendfunction consumer() while true do local x =...
more...
局部空间到世界空间的嵌套变换 & 相机空间
# 坐标系嵌套
做过游戏开发的大概都知道,常常是用的坐标系包括了局部空间坐标系和世界空间坐标系,而往往局部空间坐标系下也会包含局部坐标,是一个嵌套的坐标空间。世界 -> 局部 1
-> 局部 2
-> 局部 3-> 局部 3-1… 如此 (即俄罗斯套娃) 我们用 M矩阵 代表一个空间到另一个空间的变换 M=S (Scale) R (Rotation) T (Transition) 那么我们如何计算其中某一层的坐标到世界坐标的变换矩阵呢?其实直接用每层下的变换矩阵相乘就可以了...
more...
霜狼百人计划 - (二)深度测试
深度测试是在模板测试之后
# 深度测试简要框架
所谓深度测试,就是针对当前对象在屏幕上 (更准确说是 frame buffer) 对应的像素点,将对象自身的深度值与当前该像素点缓存的深度值作比较,如果通过了,本对象在该像素点才会将颜色写入颜色缓冲。
控制渲染顺序
画家算法
Z-Buffer 算法
控制 Z-Buffer 对深度的存储
Z Test
Z Write
控制不同类型物体渲染顺序
透明物体
不透明物体
渲染队列
减少 overdraw
Early-Z
Z-Cull
Z-check
Z-Buffer 存储的是当前的深度信息,对于每个像素都会有一个深度值
通过 Z...
more...
霜狼百人计划笔记 - (一) 模板测试
# 无顺序摘录
[toc]
# 模板测试渲染管线
片元着色器处理完之后到帧缓冲输出之间,有一个逐片元操作部分,这个部分分为很多个测试。模板测试就在其中
Pixel Ownership Test: 控制像素显示权限
Scissor Test: 裁剪测试,可以控制渲染那部分,比如只渲染左上角 / 右下角
Aplha Test: 根据 Alpha 值进行偏远裁剪
模板测试
深度测试
透明度混合 (半透)
逐片元阶段不可编程,但高度可配置
# 模板测试是什么
从逻辑上理解
12345if(referenceValue&readMask comparisonFunction...
more...
筑梦之路游戏学院 - 技能系统
# 动作拆分
对于 MMO 游戏来说,结算大多数都放在服务器,这就导致玩家每次施放技能时,如果都要询问服务期是否允许,玩家会感觉延迟很大,尤其对打击感要求很高的 ARPG 游戏中。
因此对于普通攻击这种高频短促的技能,我们通常允许客户端先播放动作,同时请求服务器。如果服务端判定技能不能释放 (比如中了定身 Buff), 会通知客户端取消释放。客户端的表现就像空砍了一下,但是有些技能不适合客户端先行,比如跳斩活着冲锋。如果客户端先行,会导致服务端判定失败。被强制拉回,这样体验很不好。所以,对这些技能,就需要枚数先制作出完整的动作,然后分为三段 Pre -> Idle...
more...
ScriptableObject 序列化问题记
这两天在做技能系统的数据编辑器,然后出现了不管怎样做都无法保存在 XNode 里修改后数据这个鬼畜的问题,然后死磕了一天,直接自己写了一个序列化的面板… 但是找到了问题所在 举个栗子:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465using NaughtyAttributes;using System;using System.Collections;using...
more...