自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张Da夫

GameDeveloper

  • 博客(26)
  • 问答 (1)
  • 收藏
  • 关注

原创 Shadow技术-起点

起因项目的Shadow开始出现了问题,有2个BUG报到了我的身上比较薄的Mesh出现了漏光(Light leaking)现象Cube旋转到一定角度,表面出现了“瑕疵”(Shadow Acne)我开始意识到,确实需要一套比较完备、可控的阴影方案了对Shadow的积累目前我对Shadow技术的积累,仅限简单的Shadow Map原理和知道CSM大致的实现方式。在看到前面两个BUG的时...

2020-03-17 00:21:22 855

原创 Camera的Near值对Z-Fighting问题的影响

起因项目测试报BUG,贴花功能在离相机接近500米处开始闪烁从闪烁这个表现看基本断定是Z-Fighting问题,一开始认为是贴花Shader的问题,但是贴花使用的是类似Projector的方式,这种方式在进行ZTest的时候实际上是进行Projector透射的物体的Z进行比较,导致Z-Fighting的话实际上和贴花没有太大关系经过搭建简单场景来看,也是和贴花没关系,本质上还是2个Mesh的...

2020-03-15 19:28:41 965

原创 可变参数的实现原理

可变参数参数个数可变参数类型可变原理概述由于在函数调用时,参数通过栈进行传递(stdcall、cdecl)而且参数入栈时会按照顺序依次入栈。所以在被调用的函数内,知道了第一个参数的地址就可以根据类型获得其他参数的地址从而获取参数的值.这里需要注意的一点:上面提到的stdcall和cdecl是说明这两种参数都是通过栈传递,但是只有cdecl支持可变参数,因为cdecl由调用者维护栈...

2019-07-13 18:09:40 702

原创 函数调用过程&栈帧&调用约定

函数调用过程 Procedure参数传递考虑函数调用:func(1, 2)需要把1和2这两个参数进行传递,这里的参数传递可以通过两种方式:1.参数入栈(内存)2.参数传递到寄存器大多数情况下,也是C\C++的默认形式是通过栈进行传递,因为虽然寄存器传递方式快但是寄存器数量有限参数压入栈中(内存),CS:IP指向下一条指令地址需要进行跳转到函数入口就需要进行原地址的保存,这也是通过压入...

2019-07-12 21:04:48 668

原创 关于Lua的下载以及wlua、luac等文件的解释

  之前学习过一小段时间的Lua,想把Lua集成在自己写的一个小引擎中,但是由于找工作就一直耽误了。现在工作基本稳定后,也需要深入了解一下Lua语言就从官方先下载Lua,结果下载过程很懵逼,下载下来的文件也没ReadMe文件解释都是什么文件,其实这些都是小事,但是至少也收获了一些,所以记录下来。   在Lua官网的下载页面,并没有提供官方的编译好的可执行文件(解释器),好像官方更推荐自己进行编译...

2018-03-01 23:22:00 7533

原创 Unity3D开发中热更新为什么不能使用C#的思考

他们说  阅读了网上一些文章,其实使用C#进行热更新是可以的,将需要更新的代码打包成程序集,然后利用反射即可,但是也提到在IOS平台是不行的,至于为什么不行,就不再说了,然后就是推荐Lua作为热更新方案,但是,为啥Lua就行?C#就不行?因为C#是编译型语言,Lua是解释型语言?  好多人都说Lua能热更新,是因为它是解释型语言,不用编译,在运行时能动态解释Lua代码并运行。这种方...

2018-02-27 21:04:15 6027 1

原创 关于3DsMax与Unity坐标轴的若干问题详解

网上有很多叙述关于3DsMax制作的模型导入到Unity3D时如何进行坐标轴处理的方法,大部分只告诉你该如何做,至于为什么也没写。有的解释了,但是解释的完全是错误的。由于我之前解析过FBX文件,所以对其的格式有所了解。针对坐标系转换等等问题结合FBX文件格式进行分享

2017-10-03 19:00:56 15002 4

原创 Ubuntu16.04进行MySQL5.7-deb包的安装

一、安装前  进入MySQL官网下载Ubtuntu版本的MySQL,我选择的是mysql-server_5.7.19-1ubuntu16.04_amd64.deb-bundle.tar 这个包包含了MySQL及各种组件二、依赖关系  MySQL的安装文档强调了以下的依赖关系:MySQL has a dependency on the libaio library. Data directory

2017-09-06 15:24:40 2357

原创 OpenGL中GL_FRONT_RIGHT、GL_BACK_RIGHT等绘制缓冲的概念

本篇文章主要介绍OpenGL中GL_FRONT_RIGHT、GL_BACK_RIGHT等绘制缓冲的概念

2017-08-26 09:22:14 2224

原创 C++中使用sigaction结构体名和函数名冲突的问题

1、某一个类A,有一个无参构造函数,能否使用如下代码建立a对象?(在完美世界的笔试题中遇到过相似问题,《The C++ Programming language》书中也提到过)A a();2、linux信号中有一个sigaction系统调用和sigaction结构体,在使用如下代码:sigaction act;sigemptyset(&act.sa_mask);act.

2017-06-19 21:33:02 1163

原创 Win10+Ubuntu双系统UEFI启动方式下GRUB消失直接进入Windows以及重装时grub-install致命错误解决方法

Win10+Ubuntu双系统UEFI启动方式下GRUB消失直接进入Windows以及重装时grub-install致命错误解决方法

2017-05-01 11:32:39 22163 5

原创 关于条件变量和互斥锁为何配合使用的思考

最近在阅读《现代操作系统》,看到条件变量部分时非常疑惑条件变量为什么需要互斥锁,书上也没有非常明显解说原因(其实有说,但是我看书不仔细),查阅了一些资料,进行了一些思考。  我的疑惑点在于条件变量为什么需要有互斥锁的配合,我觉得原因有二。  第一点,首先我们要理解条件变量的作用是在等待某个条件达成时自身要进行睡眠或阻塞,避免忙等待带来的不必要消耗,所以条件变量的作用在于同步。条件变量这个变

2016-08-23 09:29:58 9114 4

原创 C语言读取文件中文本模式和二进制模式的区别

一、疑惑  在学习C语言读取文件的时候,首先学习到的是C语言读取文件时分文本模式和二进制模式。给好多人造成疑惑,文件存储时要分类?二进制存储和文本存储完全不相同?对于纯文本必须使用文本模式?对于纯数字必须使用二进制模式?如果你对这些有疑惑,这篇文章适合你,如果你是来看函数时如何使用的,可能你要另寻他处了。二、明白关键一点  任何数据在内存中或者硬盘上的存储都是1、0组成的序列,从硬盘、

2016-07-22 16:14:58 6686 2

转载 回车(CR)与换行(LF), '\r'和'\n'的区别

回车CR和换行LF的区别

2016-07-22 15:03:36 5219

转载 关于攻读计算机研究生

就我自己的理解,谈谈我对读研和软件学院的看法,不妥之处一笑了之即可。  如果你有实际开发工作经验,感觉自己的水平和实力进入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯一选择。因为计算机学院才能让你在理论上 更上一层楼。软件学院从教学计划上就没有把你往这方面带。当然能不能更上一层楼最终还是完全取决于你自己。需要特别说明的是,工作经验并不一定等于开发经 验,我见过很多工作2-3年的人

2016-07-19 22:09:31 437

原创 C#操作Word导致 “Microsoft.Office.Interop.Word.ApplicationClass”的 COM 组件错误的解决方法

C#操作Word导致“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 组件错误的解决方法首先,要知道在C#中我们是通过调用COM组件来操作Word的,每一个COM组件都要在注册表中进行注册。这个问题的出现有2个原因:1、  你的电脑曾经装过Office的不同版本2、  你的电脑曾经同时装过微软的Office和金山的WPS

2016-06-03 21:20:19 12227

原创 汇编中有符号与无符号数以及CF,OF标志位的区分

汇编中有符号与无符号数以及CF,OF标志位的区分

2016-05-01 20:04:20 23065 9

原创 汉字编码-区位码、国标码和内码发展和区别以及为什么要加2020H、8080H

当计算机传入中国并开始普及时,首要问题是解决中文编码问题,也就诞生出了GB2312、GBK等等编码方式。而其中的具体实现方式是什么?区位码是什么?国标码是什么?它们如何转换又为什么这么转换?首先来看一看什么是区位码?什么是国标码?什么是内码?区位码:        GB2312是一种中文的编码方式,具体是由区位码来实现的。GB2312将所有的汉字编入一个 94*94 的二维表, 行就是

2016-02-22 19:31:31 25840 6

原创 从字符编码的发展历史理解ANSI、GB2312、Unicode、UTF8和UTF16区别

在编程学习的深入后,不可避免的会遇到ANSI、GB2312、UTF8的编码问题,如果不彻底了解他们的区别,都最终会造成一个问题--乱码!例如文件打开乱码,数据库乱码、网页乱码等等各种乱码,这里就通过字符编码发展历史的介绍来分清各种不同的编码。一、ASCII码我们都知道计算机起源于美国,早期的计算机只是用于科学计算,但是在计算机迅速发展时,计算机被要求不仅仅能够进行数值计算,还要进行字符处理

2016-02-22 19:19:27 5055

原创 大端小端模式详解

什么是大端模式与小端模式一、 什么是大端和小端:大端模式:数据的低字节,保存在内存的高地址中,而数据的高字节,保存在内存的低地址中。小端模式:数据的低字节,保存在内存的低地址中,而数据的高字节,保存在内存的高地址中。例如数据0XABCD首先明白一点:在内存中数据的写入、存储肯定是从低地址到高地址,大小端只是对于大于1字节的数据的低字节和高字节CPU将以何种顺序写入到内存

2016-02-22 19:14:19 990

原创 MySQL5.7版本无法启动服务【启动后自动停止】的解决方法

MySQL 5.7版本安装

2016-02-16 09:56:16 21503 6

原创 关于C#未能从程序集XXX加载XXX类型问题的解决方法

错误描述:在最近自己写的一个查询成绩的小程序中,编写了一个成绩查询的类库,然后编译成Dll文件。在WinForm程序里引用这个Dll库,但是总是出现“未能程序集XXX加载XXX类型问题”。而在另一个控制台程序测试没问题,所以不可能是本身类库代码出现什么错误。网上查阅资料,有说版本问题,有说要复制到Debug目录下,但是都不对。解决方法:原因是类库的程序集名称(我的是

2016-02-13 12:58:12 8088 2

翻译 C#中IDispose接口的实现方法以及为什么这么实现?

我原本认为对于IDispose的实现方法,只要在里面释放非托管资源就行了,但是通过网上资料,看到很多实现方法并不是仅仅做释放非托管资源,非常迷惑,关键是这些资料也没详细的告诉你为什么这么做?之后通过StackOverflow了解到这一步一步的原因,说的十分详细,结合自己的认识,翻译后分享给大家:

2016-02-08 14:19:30 11092 3

原创 关于#pragma once编译命令

在初学C和C++时,我经常在头文件中使用#ifndef,#define,#endif定义个宏名防止头文件被多次编译,但是最近是用MFC时或者较新版的VS自动生成的头文件中都会出现#pragma once这个命令。pragma : 杂注,编译命令         #pragma once是#pragma编译命令的一种,作用是放在文件的开头,防止本文件被多次编译。         使用#i

2015-12-03 19:49:50 741

原创 C++之枚举类型探索

一、enum初识(作用)enum的全称是enumeration意思是列举,可以用一些符号表示一组属性值,也就是将数字符号化,因为数字表面看不出任何意义,可读性很差。例如,在贪吃蛇游戏中表示地图信息 enum MapInfo { GROUND , SNAKEHEAD ,SNAKEBODY } ;相比于直接用0,1,2对地图赋值可读性强很多。但是说到符号化数字,可以使用#define宏

2015-12-01 21:16:27 539

原创 C语言malloc,calloc,realloc,free内存分配函数学习笔记

内存分配使用内存分配函数可以对内存进行分配、释放等操作。内存分配函数一般返回的是void类型的指针,传统上曾使用返回char类型的指针,因为char类型只占据1字节。而最新ANSI规定返回void类型指针,这样可以指向任何类型,通常使用强制转化运算符进行返回值的强制转化,其实不使用也可以,因为存在隐式转换。一、malloc()1、原型:void *malloc(size_t size)

2015-02-23 22:34:47 720

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除