- 博客(39)
- 收藏
- 关注
原创 OpenGL学习日志之模板测试
模板测试根据模板缓冲区中片段的模板值与设置的引用值,进行我们设置的运算式进行比较,如果没有通过测试,则丢弃该片段。OpenGL是通过设置位遮罩来控制写操作的,当我们在准备写入模板值之前,我们会将模板值与这个位遮罩进行与运算,一般我们使用0xFF和0x00就行,如果你有特殊的需求需要控制某一位的写入和其他不一样,你也可以自己设置。由于原本绘制的正方形区域片元模板值都为1,而我们设置的模板值不等于1通过,因此放大的正方形绘制时,只有大于原本大小的正方形的片元片段才能通过模板测试,也就是我们拿来作为描边的部分。
2023-05-04 19:00:00
1211
原创 OpenGL学习日志之深度测试
当开启深度测试,OpenGL会读取当前片段存储的深度值,与当前片段的深度缓冲区的深度值进行比较。比较是按照我们设置的运算操作符,如果测试通过,则会把片元数据传入下一个阶段,如果测试不通过,丢弃该片元,不再传入下一个阶段。OpenGL开启深度测试的方法一旦启用深度测试,如果片段通过深度测试,OpenGL自动在深度缓冲区存储片段的 z 值,如果深度测试失败,那么相应地丢弃该片段。如果我们深度测试通过,但是也不想写入深度缓冲区新的值,我们也可以通过指令关闭深度写入。
2023-03-20 09:32:42
857
原创 OpenGL学习日记之模型绘制
下载Assimp已编译的lib(因为我们公司的电脑有很多权限和限制,也不能自己安装一些没有报备的软件,所以愁方便我就没有用cMake自己编译了)找到一位免费分享的博主的。现实生活中一个我们看到的模型都是由很多部位组成的,也可以说成是由很多mesh组合而成的,比如一张桌子,是由一个桌板加四个桌脚拼成的为了方便抽象,我们又封装了一层模型的类。现实生活中,我们都是美术同学通过一些现代的绘图工具,为我们导出模型来绘制,建模工具会自己生成所有的顶点坐标、顶点法线和纹理坐标,我们开发者就不需要去关注这些细节了。
2023-02-21 17:59:52
838
原创 OpenGL学习日记之纹理
通俗一点:就是我们所说的贴图,精确点的定义:存储可供着色器读写数据的数据结构。纹素是纹理读取或者写入的最小单元,纹理相当于存储纹素的一个数据结构。纹理坐标为了将纹理映射到模型上,我们需要为模型的每个顶点指定映射到纹理的哪个位置,这个坐标就是纹理坐标,也称uv坐标。uv坐标的范围是(0,1)纹理采样使用纹理坐标获取纹理颜色的过程就叫纹理采样。
2023-02-20 19:00:00
1225
原创 OpenGL学习日记之光照计算
现实生活中,光照通常来自于多个光源,并且会在多个物体之间发散和反弹,一个物体的光照可能受到来自一个非直射的光源影响,最后才进入人眼,也就是所谓的间接光照。光线照在粗糙物体表面,随机散射到各个方向,漫反射中视角的位置是不重要的,因为反射是完全随机的,所以在任何反射方向都是随机的。我们知道的定向光源的一个好例子是,太阳。常用的光照模型有:兰伯特光照模型(主要是模拟漫反射),半兰伯特光照模型(调优兰伯特全黑的缺点),Phong光照模型(模拟镜面反射),BlinnPhong光照模型(兰伯特+Phong)等。
2023-02-20 10:22:25
918
原创 OpenGL学习日记之VBO、VAO、EBO
OpenGL的库是C语言写的,为了方便,OPenGL为我们抽象了一个层,这个层就是把一个状态或者选项包装为一个“对象”,一个对象就是一些选项或者数据的集合,它代表OpenGL状态的一个子集。VAO就像是为了向GPU解释顶点数据,指定VBO数据中的各个属性字段用途,我们把顶点相关数据打包成一个VBO传入显存,供GPU读取,GPU读取到这个数组数据以后,顶点着色器并不知道要如何去使用这些数据,这个时候就需要VAO来解释这些数据,通过指针告诉顶点着色器,第一组数据去哪里取,第二组数据从哪里开始取。
2023-01-10 20:57:46
867
原创 技术美术百人计划学习笔记--(3)图形矩阵运算学习笔记
先进行旋转矩阵变换,再进行位移矩阵变换,和先进行位移矩阵变换再进行旋转矩阵变换结果是不一样的,旋转矩阵在绕不同轴是有先后顺序的,在unity中是先Z轴后X轴,最后Y轴进行计算的。在存储四元数的时候是优先进行列优先存储的,会导致默认的位移是在第四行上面。矩阵在代数方面可以解线性方程组,在几何方面可以表示空间坐标的变换。矩阵的乘法的空间意义是进行空间变换。变换的顺序不同,得到的结果也就不同。矩阵加法空间的意义就是空间的变换。矩阵最开始是用于解线性方程组的。矩阵的数乘的意义是空间的缩放。矩阵的乘法是有顺序的。..
2022-08-27 16:51:09
186
原创 Unity渲染顺序相关学习
1、camera(depth越小,越先渲染)2、sorting layer(值越小,越先渲染)(下面还有个sortingOrder 值越小,越先渲染)3、渲染队列renderQueue(值越小,越先渲染)4、深度值(距离相机越近该值越小,越远该值越大。)...
2022-08-27 16:14:01
1231
原创 技术美术百人计划学习笔记(1)--基础渲染管线
渲染管线的作用:就是通过一系列的处理,把场景的3D元素转化为屏幕的2D图像。渲染流程主要分为以下阶段1、应用阶段2、几何阶段3、光栅化阶段4、逐片元操作5、后处理应用阶段主要是在CPU上完成的,准备基本场景数据包括场景数据。物体变化数据:位置旋转、缩放等;物体网格数...
2022-07-09 16:05:23
689
原创 Lua学习之弱引用理解
最近看tolua的协同,它里面有用到一个__mode 的字段,如下所示:local comap = {}local pool = {}setmetatable(comap, {__mode = "kv"})好奇他是干什么用的就去了解了一下。原来他就是lua的弱引用,是一个用来优化垃圾回收器进行垃圾回收的机制。Lua垃圾回收机制Lua 采用了自动内存管理。 这意味着你不用操心新创建的对象需要的内存如何分配出来, 也不用考虑在对象不再被使用后怎样释放它们所占用的内存。Lua 运行了一个垃圾收集
2022-04-07 10:04:09
1170
原创 Lua基础学习记录
1、基础概念upvaule: 外部局部变量,一个函数内部引用的变量,是一个外部的变量,但又不是一个全局变量。闭包:调用含有一个内部函数加外部函数持有的外部局部变量的外部函数产生的一个实例函数。即闭包是一个函数的实例,这个函数持有一个外部局部变量,还有一个内部函数。2、实例学习 function myFunc() local a=0 return function()//尾调用 a+=1 return a
2022-03-23 12:21:06
129
原创 AseetBundle学习记录
一、定义AssetBundle是一种包含特定平台非代码资源的存档文件。例如模型、贴图、预制、音频文件、甚至是整个场景等。资源使用Unity提供的一种用于存储资源的压缩格式打包成AssetBundle.可在运行时候动态加载。使用AssetBundle动态加载资源首先要获取AssetBundle对象,第二步才是从AssetBundle中加载目标资源,然后再实例化目标资源。二、AssetBundle的具体开发流程一般情况下AssetBundle的具体开发流程如下:(1)创建Asset bundle,开发
2021-04-09 17:48:36
155
原创 动态加载本地bundlel类型的Atals并赋值给NGUI的UISprite里
static class Test{[MenuItem(“工具/加载Atlas”)]static void LoadAtlas(){Transform rootParent = null;Transform[] transforms = Selection.transforms;//提取出选中的对象if (transforms != null && transforms.Length > 0){rootParent = transforms[0];}//Atlas
2020-10-28 14:29:18
306
1
原创 查找某个文件夹下某个后缀名的所有文件中的中文
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using System.IO;using System.Text.RegularExpressions;using System.Xml;public class CheckChineseTool...
2019-09-04 20:47:51
824
原创 UGUI实现循环列表
主要思路是通过ScrollView借助实现的,这个主要以只能垂直拉动为例。为了方便理解,我们可以先创建一个ScrollView,然后新建几个Image放在Scrollview的Content物体之下,自己随意拖动,将其摆好,新建出来的场景图如下图所示。当我向下拖动时,如下图所示,Content 的anchoredPosition.y会发生变化,而这个值与拖动长度有关,一个Image我设置的大...
2018-11-12 18:41:43
1721
原创 Unity--3D换装
//这是看siki学院的视频自己照着写的,想看视频的可以去siki学院看,我看的时候是免费的换装整个流程的实现分为3步1、给需要换装的部分重新绑定骨骼2、更换材质3、更换网格对于动态的角色换装必须要重新绑定骨骼,否则可能会发生错误。对于静态的即没有动画的物体和角色可以不重新绑定骨骼,因为动画播放与骨骼有关。需要换装时调用ChangeMesh(string part, string n...
2018-10-24 18:30:03
645
原创 各种排序总结
1、冒泡排序我的理解就是,以从小到大排序为例,就是不停 的将最小的排到前面冒出来,或者把最大的,第二大的,一个一个的冒泡到最后。 int[] array1 = new int[] { 2, 4, 3, 7, 8, 5 }; /// <summary> /// 冒泡排序,将小的数不停冒泡到前排。 /// </summary> ...
2018-10-22 12:58:21
167
转载 优化转载
转载于> http://www.cnblogs.com/zblade/介绍: 在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。 Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影...
2018-10-19 10:51:04
246
原创 简单UI框架---UIManager
一、简介1.1、UI基类—UIBase1.2、UI第二层基类,继承自UIBase,分别为UIWindowBase(所有窗口的基类)、UISceneBase(场景UI基类)继承自UISceneBase的类都放在UIRoot物体上,而继承自UIWindowBase的类,主要放在窗口上,例如整个登录注册面板的父物体UIPanel物体之上,类似的。1.3、三个基本的管理器:LayerUIMgr(...
2018-10-17 14:18:24
4389
原创 Unity计算当前FPS
直接上代码using UnityEngine;using System.Collections;using UnityEngine.UI;public class fps : MonoBehaviour{ public Text fpsText; public float fpsMeasuringDelta = 2.0f; private float time...
2018-10-10 18:09:10
721
原创 Unity里用到的Json文件存取工具收集
一、序列化插件FullSerializer下载链接Github–FullSerializer插件下载链接1.1、利用FullSerializer插件,操作Json文件存取//序列化之后存贮json文件protected void SaveJsonFile<T>(string path, T data) where T : class { fsData s...
2018-10-09 14:37:44
1496
1
原创 Unity简单事件系统管理
1、创建事件管理类using System.Collections.Generic;/// <summary>/// 自定义事件方法委托/// </summary>/// <param name="e"></param>public delegate void EventDelegat
2018-08-31 16:29:47
783
原创 Unity本地时间记录运用
using System;using UnityEngine;public class Invinciable : MonoBehaviour{ /// <summary> /// 开启无敌模式时剩下时间,以秒为单位 /// </summary> private int invincibleTime; /// <summ...
2018-08-27 16:05:41
1018
原创 Unity读写文件总结
1、StreamWriter和StreamReader 流写入和读取 public void CreatFile(string path) { if (!System.IO.File.Exists(path)) { WriteFile(path); } } /// &amp;amp;lt;summary&amp;amp;gt;...
2018-08-27 14:42:02
1584
原创 Unity从流中读取各种类型的数据和写入数据(利用MemoryStream关于内存数据的读写)
1、主要是对MemoryStream.cs这个类的封装操作,自己重写了一个类继承自该MemoryStream类,并添加了对流写入short ,ushort,int,uint,long,ulong,float,double,bool,string等类型数据的写入和其在流中读取出该数据类型的方法。using UnityEngine;using System.Collections;usin...
2018-05-03 15:46:23
4277
原创 基本动画状态机制作理解
1、基本框架搭建 1.1首先创建一个枚举类来定义玩家的各个状态,我定义了四种基本状态,可根据具体的要求自我添加状态。public enum PlayerState{ Idle, Run, Walk, Die}1.2、创建一个动画状态机控制器类—–PlayerFSMMgr.cs,该类管理玩家所有状态的切换 再创建一个玩家所有状态的基类,......
2018-05-02 18:13:52
739
原创 VR---UGUI---UI物体出现在摄像机正前方
通过改变那个UI的Canvas位置和角度实现的 public void SetPosition() { Vector3 pos = m_Camera.transform.position + m_Camera.transform.forward * 7; Quaternion q2 = Quaternion.LookRotation(m_Cam...
2018-04-12 16:44:15
3364
原创 UGUI--------UI以及3D物体显示在鼠标点击位置
1、鼠标的点击的位置—赋值给3D物体 float distance=5; /// <summary> /// 赋值鼠标位置给3D物体 /// </summary> void MouseTo3DPos() { Vector2 mousePosition = Input.mousePosition; ...
2018-04-12 16:36:01
1039
原创 NGUI HUD Text
1、NGUI HUD Text v1.13下载链接 链接:https://pan.baidu.com/s/1D0HiOyBd0SJKLAl30SF2CQ 密码:5otl 2、NGUI HUD Text简单API分析2.1、最基本的文本Text显示 新建一个Unity场景,在场景中创建一个空物体,并为其添加一个HUD Text.cs脚本,然后创建一个脚本如下所示。注意在添加HUDText需要...
2018-04-12 15:48:43
1004
原创 UGUI与NGUI在Unity制作图集方式
一、UGUI制作图集 UGUI如果将会自动打包图集,Project Seting >>Editor>>Sprite Packer的Mode需要设置为Always Enabled 1.1选择一张图片,将其Texture Type 设置为Sprite,UGUI是自动为你制作图集,会根据你的Packing Tag将名字相同的打包到一个图集之上。 1.2、你可以在工具......
2018-03-22 16:43:20
6226
1
原创 内存优化
1、UGUI优化 1.1、对于不使用的Image之类的,将其RaycastTarget取消勾选,将暂时不触发的Button的Interable也取消勾选。 1.2、利用Sprite Packer 制作图集,图集大小最好为接近2的N次方 2、NGUI优化 2.1、利用Atlas Maker 制作图集 , 图集尽量制作为接近2的N次方大小,图集打包大小要为2的n次方的正方形图集,不要为长...
2018-03-22 15:08:04
309
1
原创 滑动返回坐标Vector2方向判别
原理如下图所示 代码判断为 Vector2 m_Dir; if (m_Dir.y < m_Dir.x && m_Dir.y > -m_Dir.x) { //向右 Debug.Log("向右"); } e...
2018-03-09 15:35:52
1003
原创 FingerGestures3.1使用总结
1.插件百度网盘地址:链接:https://pan.baidu.com/s/14PRkpAf3OLXjz81QT0hPPA 密码:k8iz] 2.本次实验采用的是Unity5.4.5的版本。插件版本为3.1 3.小例子分析A:手指点击事件,划过事件,离开事件,鼠标点击保持不动事件。 A3.1.找到如图1所示预制体位置将其拖入场景,该预制体上面包含的脚本FingerGestures.cs包...
2018-03-09 14:43:35
3848
2
原创 事件与委托的区别
1.事件只能定义在类的内部,而委托可以定义在类的内部或者外部。事件定义在外部会报错误 2.委托和事件都可在其他类中被间接调用。但是在外部类中委托可=某一个方法,而事件不能,只能+=某一个方法。事件只能在定义该类的内部触发,而委托可以在其他外部类调用触发。using UnityEngine;using System.Collections;using System;public de...
2018-03-06 19:14:59
1166
原创 在某个固定范围内产生物体
示例为在某一个被拉伸的cube范围内生成箱子, a.实例化的预制体放在Resources/Perfabs文件夹下,通过动态加载 b.每隔3秒加载一个箱子,当箱子数字大于maxnum时不加载 //箱子预制体 private GameObject xiangzi_prefab; //场景中箱子的最大数量 private int max_xiangziNumber = ...
2018-03-06 14:35:27
579
原创 Unity 常用射线检测方法
1.普通射线检测(一般用于检测某一个物体)Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(ray.origin ,ray.direction , Color.red); RaycastHit hit; if(Physics .Raycast (ray,
2018-03-06 12:14:04
45891
2
原创 向手机缓存区写入Text
1.PC端读取Resources文件夹下的.txt文件,并解析分为一行一行存入ArrayList 2.Android端如果文件不存在则在缓存区创建一个.txt,并将Resources文件夹下.test.txt文件信息复制写入新创建的.txt中 /// <summary> /// 获取当前平台路径 /// </summary> void GetPlatformPath()
2017-12-13 13:42:17
312
原创 加载Excel表
方法一: 准备工作:(1)将一个.csv的excel文件存放于Assets\Resources\Config文件夹下面 ///创建一个单例类模板 public class Singletonwhere T:new () {class SingletonCreator{ internal static readonly T instance = newT();}public s...
2017-11-21 11:25:57
215
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人