Google.Protobuf篇:官方案例AddressBook讲解
据我目前所知,ET使用的数据交换协议是Google.Protobuf,所以今天就来学习一下,但是网上许多人都是以高下立判的方式讲解的,对新手小白很不友好,所以我今天就以纯小白的视角和大家一起学习 学习环境: .NET Core2.2 .NET Framework 4.7.2 Rider protobuf-csharp-3.7.0-rc-2 Google.Protobuf简介 protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。 google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。 由于它是一种二进制的格式,比使用xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。 作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 下载Google.Protobuf https://github.com/protocolbuffers/protobuf/releases 下...
Google.Protobuf篇:使用protoc.exe生成自己的类
正常生成 上次我们提到了一个比较特殊的类,Addressbook,然后他开头第二行有这末个东西 要编辑这个proto后缀的文件,需要用protoc来编辑 https://github.com/protocolbuffers/protobuf/releases 不要问我为什么不下载64位的,问就是64位的我不会搞 为.exe文件设置环境变量 这样做的好处是,在任何地方都可以运行.exe文件 此电脑-属性-高级系统设置-高级-环境变量-编辑用户变变量的Path变量-添加protoc.exe的所在目录. 比如我的目录是:D:\Protoc\protoc-3.7.0-rc-2-win32\bin 迁移include文件夹下的文件 如果没有include文件夹下的文件,在使用protoc.exe时会提示缺少google\protobuf\timestamp.proto 解决办法是将include/google文件夹移动到指定了环境变量的文件夹 然后就可以在cmd中输入protoc,他应该会像配置Java环境那样有一大长串 准备工作做好了,我们来找找这个万恶之源,address.p...
图形学篇:图形学基础知识汇总(中:多维变换与裁剪投影
二维变换与裁剪 图形几何变换基础 规范化齐次坐标 为了使图形几何变换表达为图形顶点集合矩阵与某一变化矩阵相乘的问题,引入了规范化齐次坐标。 所谓齐次坐标就是用n+1维矢量表示n维矢量。 例如在三维空间中点P(x,y,z)\mathrm P\left(\mathrm x,\mathrm y,\mathrm z\right)P(x,y,z)的齐次坐标表示为(wx,wy,wz,w)\left(wx,wy,wz,w\right)(wx,wy,wz,w),这里,w为任意不为0的比例系数,如果w=1就是规范化的齐次坐标。 定义了规范化其次坐标以后,图形的几何变换可以表示为图形顶点集合的规范换齐次坐标矩阵与某一变换矩阵相乘的形式。 矩阵相乘 矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。 设A为m×p的矩阵,B为p×n的矩阵,那么称m×n的矩阵C为矩阵...
图形学篇:图形学基础知识汇总(上:基础知识和图形扫描转换及填充)
导论 计算机图形学的概念 计算机图形学是一门研究如何利用计算机表示,生成,处理和显示图形的学科。 计算机图形学是建立在“线性代数”,“数据结构”和“程序设计语言”基础上的一门学科。 图形主要分为两类,一类是基于线条表示的几何图形,如线框图,工程制图,等高线地图等,另一类是基于材质,纹理和光照表示的真实感图形。 图形显示器的发展及其工作原理 阴级射线管(CRT) CRT是光栅扫描显示器的显示部件,主要由电子枪,偏转系统,荫罩板,荧光粉层以及玻璃外壳五大部分组成。 当平布刷新率大于或等于60Hz时,人眼就不会感到图像的闪烁。目前常用的屏幕刷新率为85Hz。 CRT的一个重要技术指标是分辨率,即CRT在水平方向上能识别出的最大光点数。 随机扫描显示器(RSD:random scan display) 广泛推广使用于20世纪60年代,如今随机扫描显示器的应用范围已经非常有限,电学实验中仍然在使用的示波器就是其中一种。 直视存储管显示器(DVST) 发展于20世纪70年代,DVST使用紧贴在荧光粉层后的存储栅的电荷分布来存储图形。 DVST有两只电子枪,一支是写电子枪,用以储存图形;另一只...
图形学篇:Cohen-Sutherland直线段裁剪算法
前言 在二维观察中,需要在观察坐标系下根据窗口边界对世界坐标系中的二维图形进行裁剪,只将位于窗口内的图形变换到视区输出。直线裁剪是二维图形裁剪的基础,裁剪的实质是判断直线段是否与窗口边界相交,如相交则进一步确定直线段上位于窗口内的部分。 编码原理 Cohen-Sutherland直线段裁剪算法是最早流行的编码算法。每段直线段的断点都被赋予一组4位的二进制代码,称为区域编码,用来表示直线端点相对于窗口边界及其延长线的位置。 假设窗口是标准矩形,由上(y=Wyt)下(y=Wyb)左(x=Wxl)右(x=Wxt)4条边界组成。 延长窗口的4条边界形成9个区域 这样根据直线的任意端点所处的窗口区域位置,可以赋予一组4位二进制区域码RC=C3C2C1C0,依次为上下左右边界 为了保证窗口内及窗口边界上直线段端点的编码为0,我们做如下约定 C3:若y>Wyt,C3=1 C2:若y<Wyb,C2=1 C1:若y>Wxr,C1=1 C0:若y>Wxl,C0=1 也就有了如下代码 1234567891011121314151617181920212223#define L...
图形学篇:多边形有效边表填充算法
什么是多边形? 多边形是由折线段组成的封闭图形 多边形的表示方法有哪些?[toc] 顶点表示法:使用顶点进行描述,但此时多边形仅仅是一些封闭线段,内部是空的,且不能直接进行填充上色 点阵表示法:使用大量的点进行描述,描述完成之后,得到的就是完整形态的多边形,内部已被填充,可直接针对点来进行上色 多边形的扫描转换就是从顶点表示法转换到点阵表示法的过程。 基础的填充多边形方式: 检查光栅上的每一个像素是否位于多边形内 光栅究竟是什么? 由大量等宽等间距的平行狭缝构成的光学器件称为光栅,这是专业且准确的方法,然而明显不是给人看的(观众:???) 光栅是连接帧缓冲和具体的电脑屏幕的桥梁(这是很老的大头显示器上的,现在的液晶显示器不存在光栅,它的成像依靠的是电场,液晶,滤光膜等,所以我们暂且把这里说的的光栅理解为像素) 光栅化究竟是什么? https://blog.csdn.net/waitforfree/article/details/10066547 光栅化是一切屏幕成像的基础,没有它,就没有图像 光栅化不依赖于光栅,它依赖于CPU和GPU的交互和运算 有效边表填充...
Unity DOTS:入门简介(ECS,Burst Complier,JobSystem)
本文章已于2021.4.13更新,修正了当时因为水平不足而导致的一些错误,拓展了部分内容。 前言 近期想从更深层次上学习ECS,之前一直停留在浅层次的编码模式(即ECS意识流),没有真正的去了解ECS的内部原理,Unity目前在维护一套以ECS为架构开发的DOTS技术栈,非常值得学习。 ECS 什么是ECS ECS即实体(Entity),组件(Component),系统(System),其中Entity,Component皆为纯数据向的类,System负责操控他们,这种模式会一定程度上优化我们的代码速度。 Entities:游戏中的事物,但在ECS中他只作为一个Id Components:与Entity相关的数据,但是这些数据应该由Component本身而不是Entity来组织。(这种组织上的差异正是面向对象和面向数据的设计之间的关键差异之一)。 Systems:Systems是把Components的数据从当前状态转换为下一个状态的逻辑,但System本身应当是无状态的。例如,一个system可能会通过他们的速度乘以从前一帧到这一帧的时间间隔来更新所有的移动中的entiti...
Unity编辑器拓展基础总结
前言 从事Unity编辑器拓展也有一段时间了,该记录一下常见的知识点了,也方便自己日后查阅 结构 Unity编辑器拓展主要分为3大类 UnityEngine.GUI:可用于编辑器和运行时,需要自行计算Rect UnityEditor.EditorGUI:只可用于编辑器,需要自行计算Rect UnityEditor.EditorGUILayout:只可用于编辑器,自动计算Rect 其中UnityEditor.EditorGUILayout基于UnityEditor.EditorGUI实现 常见类 Rect 这个类型在编辑器拓展中十分常见,官方解释为 A 2D Rectangle defined by X and Y position, width and height. 一个由X,Y坐标,width,height宽高定义的2D矩形 其以左上角为坐标原点,X往右递增,Y往下递增 更加详细介绍可参照:Unity Rect官方文档 GUIContent GUIContent定义了一个GUI Item内容,最完整的构造函数如下 12//构建同时包含文本,图片和定义的tooltip的...
Unity资源批处理编辑器工具技术概要
前言 我们在项目中往往有大量的美术资源,包括但不限于,贴图,模型,动画等,而我们基本上很多资源都是应用的同一套导入配置,如果人为来进行配置的话会非常麻烦,还很容易出错,所以需要一个工具来处理他们导入时的配置,以及已经存在于项目中的资源进行批量配置。 正文 每个资源的AssetImporter面板设置下文统称为规则 技术概要 首先是应用规则匹配机制的制定,一般有文件夹,文件夹+文件部分关键字两种匹配机制。 Unity提供了一个AssetPostprocessor类支持我们进行资源导入的预处理和后处理操作。 我们的每个规则必须对应一个临时文件,用于存储规则来进行批处理。 对于导入资源的规则赋值我们采用反射的方式,但是请注意剔除引用类型和保留部分枚举类型。 对于贴图类型,比较特殊,他有对每个平台的差异化配置,而这一类型又是引用类型,所以对此只能单独处理,采用GetPlatformTextureSettings方法来对不同平台设置进行获取,通过SetPlatformTextureSettings来对不同平台进行设置。 配置好之后请务必调用assetImporter.SaveAndRei...
Unity Shader入门精要学习笔记:透明效果
透明效果 透明是游戏中经常要用的一种效果,在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)。当开启透明混合后,当一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值外,他还有另外一个属性——透明度。当透明度为1时。表示该像素是完全不透明的,而当其为0时,则表示改像素完全不会显示。 在Unity中,我们通常使用透明度测试(这种方法其实无法得到真正的的半透明效果)和透明度混合实现透明效果。 对于不透明物体,不考虑他们渲染顺序也能得到正确的排序效果,这是由于强大深度缓冲(depth buffer也被称为z-buffer)。 在实时渲染中,深度缓冲是用于解决可见性问题的,核心思想:根据深度缓冲中的值来判断该片元距离摄像机的距离,当渲染一个片元时,需要把它的深度值和已经存在与深度缓冲中的值进行比较(如果开启了深度测试),如果它的值距离摄像机更远,则不需要渲染到屏幕(有物体挡住了它),否则这个片元将会覆盖掉此时颜色缓冲中的像素值,并把它的深度值更新到深度缓冲中(如果开启深度写入)。 但是如果要实现透明效果,当使用透明度混合时,我们关闭了深度写入(Z...