- 博客(20)
- 收藏
- 关注
原创 如何绘制三角面
文章目录前言一、绘制三角面1.1 判断点是否在三角形内-叉乘法1.2 判断点是否在三角形内-重心法2.1 包围盒3.1 剔除三角形二、完整代码 前言 上节课我们已经可以绘制直线了,但是还不够,模型都是由三角面构成的,所以这次我们要绘制三角面,以及剔除我们看不到的面。 Dmitry V. Sokolov gamma公式 Games101-光栅化(三角形的离散化) Games101-着色(插值、高级纹理映射) 本系列主要参考Gams101的相关课程和课件以及Dmitry V. Sokolov的软渲染教程,详
2021-09-07 20:52:42
1141
原创 如何绘制直线
文章目录前言一、最简单绘制直线的方法1.1 向量二、Bresenham’s Line Drawing Algorithm2.1 屏幕是离散的2.2 直线方程的应用 前言 本系列最终是要去绘制mesh的,既然这样我们就需要从最简单的开始,先绘制直线。 我们都知道有个算法-Bresenham’s Line Drawing Algorithm。但是为什么要用它,这个才是我们要讲的。 参考 gamma公式 本系列主要参考Dmitry V. Sokolov的软渲染教程,详细教程可阅读参考链接 一、最简单绘制直线的
2021-08-29 19:14:57
1950
原创 GAME101-向量、矩阵、变换和齐次坐标
文章目录前言一、向量1.向量表示2.向量运算1)点乘2)叉积二、矩阵运算1.矩阵的乘积三、变换1.线性变换2.平移变换3.齐次坐标1)在齐次坐标下的平移变换2)www运算的意义3)在齐次坐标下的变换 前言 参考 gamma公式 这章主要是记录一些数学公式的用法、理解和注意事项。 The cleaner the math,the cleaner the resulting code. -Fundamentals of Computer Graphics 一、向量 1.向量表示 在图形学中,没有特殊说
2021-07-02 17:31:11
485
原创 关于字符串常量与指针 - 快速记录暂时未整理
字符串常量储存在.rodata,只读数据区 char* a = "Hello"; // 或者 const char* a = "Hello" printf("Hello"); // 这里两个Hello的地址都是同样的 通过反汇编可知 1.char* a这种写法是C语言时代的 2.const char* a是CPP语言的 在CPP中使用第一种写法会报错,在C中并不会报错,所以即使修改值也不会引发编辑器报错,但是在运行时会报错,因为修改了只读区域,产生了异常控制流,强制停止进程运行。 所以我个人觉得CPP
2021-04-27 21:10:53
246
原创 深入理解计算机系统(CSAPP) 链接 -笔记
我对链接最通俗的理解 可以将一个大型的源文件分解成更小的模块,其目的是更加易于管理,修改合编译这些模块。 将一个大型文件分离后肯定是会产生问题的 1.符号多重定义 要理解符号多重定义,那么就先得明白什么是符号,什么是符号定义,什么是符号解析,什么是强符号,什么是弱符号。 符号: csapp中是这样定义符号,每一个符号对应每一个函数,每一个全局变量和每一个静态变量。 int a; void b(); statc int c; // 这些都是符号 符号定义: 对该符号进行解释/定义,既为符号定义。
2021-03-29 21:02:24
358
原创 深入理解计算机系统(CSAPP) 实验详解:ShellLab
提示 利用测试文件逐步构建tsh,例如先从trace01.txt开始。 当在进程在前台运行时(例如我们的tsh),你键入Ctrl+C,那么内核就会发送一个SIGINT信号(信号代码2)给这个前台进程组中的每个进程。也就是说假如你开始创建子进程的时候,没有将子进程的进程组给设置到另外一个进程组(因为创建子进程的进程组ID默认是父进程的进程组ID),那么这个终止信号将会发送到你每一个创建的子进程中,包括前台和后台。然后会就导致你的程序出现bug,sigchld_handler可能会比sigint_handle
2021-03-03 16:32:22
1595
原创 深入理解计算机系统(CSAPP) 实验详解:CacheLab
近一段时间项目太忙导致没有继续,还好最近空下来一些,咱们继续冲! 更新历史 20210104开始更新 本文介绍的是CSAPP书籍中的第四个lab: Cache lab。本实验要求我们实现一个软件高速缓存,以及优化矩阵。通过这个lab我们可以更好的理解缓存以及写出更加对缓存友好的代码。 知识预热 阅读《深入理解计算机系统》的6.4 仔细阅读Cache lab的writeup 介绍完上面必须的知识之外,我们就开始吧! 实验构成 本实验一共分为两个实验,第一个软件高速缓存模拟器,第二个优化矩阵。 实验.
2021-01-07 14:02:55
5474
1
原创 深入理解计算机系统(CSAPP) 实验详解:AttackLab
ROP妙处 先复习一下ret的动作 ret时会将当前%rsp指向的值当作地址弹出,使得%rip程序计数器指到该地址的指令处,这个是通用的说法 换一种说法就是,它会直接返回到地址处。 需要注意的地方 指令是指令,栈是栈不要搞混,不管我们指令如何跳,只要不对%rsp进行操作,我们栈指针就是不会改变,ret会间接改变栈指针,因为它有两个动作(先弹出地址给%rip,然后在给%rsp加8)。 明白了上面说的,我们就可以开始讲ROP了 touch2 ---->4 movq %rax
2020-11-23 17:40:35
4534
1
原创 深入理解计算机系统(CSAPP) 实验详解:BombLab
更新历史 20201102开始更新 该实验的目的 该实验可以提高你阅读汇编代码的能力,以及加深对寄存器,内存和指针的理解,还有调试gdb能力。 前言 BombLab,一个家喻户晓的实验。 我看过的教程中都是这么介绍它的,可见它的魅力和趣味性是如此之大。话不多说,接下来我们就来了解一下该实验吧! 环境搭建 环境我们参照DataLab里的环境搭建进行。 如何使用正确的姿势写代码和测试 这里需要额外安装一个环境,就是cgdb,那么我们为什么不直接用gdb呢?答案就是因为cgdb更具方便在调试的时候,简单点
2020-11-04 10:51:25
2112
2
原创 深入理解计算机系统(CSAPP) 实验详解:DataLab
更新历史 20200911开始做这个实验 该实验的目的 该实验的目的是提升对计算机基础信息的理解和操作,例如位,整数,浮动,补码等等。 搭建环境 环境的搭建很简单,我们遵循以下几个步骤即可 下载VM Box,并安装ubuntu 然后我们在虚拟机中更新环境,在终端中执行一下命令 //更新apt软件源 apt-get update //安装sudo apt-get install sudo //安装c/c++编译环境,build-essential软件包列表内包含libc6-dev、libc-dev、g
2020-09-15 20:16:34
10441
6
原创 unity中的设计模式-命令模式
命令模式 此篇是专门为unity开设的设计模式篇章,在这里,每一篇都会尽量做到包含C#版本以及unity,unity全部都尽量使用Roguelike2D这个项目去扩展。 介绍 官方引用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。 个人理解:命令模式就是将一个一个对象的操作给封装成一个对象命令,例如棋子的每一个步行走,我们就可以针对这一对象,将它移动的这个操作,封装成一个命令对象,往后我们就可以很方便的扩展重做和撤销操作。 详情请
2020-07-04 16:52:11
385
原创 unity 浅谈MonoBehaviour
MonoBehaviour 学于事件函数的执行顺序-unity官方文档 概述 MonoBehaviour is the base class from which every Unity script derives. When you use C#, you must explicitly derive from MonoBehaviour. MonoBehaviour是所有脚本的基类,所有C#都需要显性的继承MonoBehaviour,这样才能被挂载到game Object上。 MonoBehavi
2020-06-26 17:55:55
5042
原创 unity 预制体(Prefab)
预制体(Prefab) unity中的prefab就是类似一个配置文件,而且这个配置文件还可以被继承/变体(Variant),相当于一个强大的配置文件系统 prefab支持variant,以及override的操作,还有独立的编辑系统。 历史介绍以及源视频 prefab分为prefab instance和prefabAsset,大部分操作的是prefabAsset。prefab的一次升级是在2018.3这个版本中,在早期的版本中听说不支持一些嵌套子类的修改,因为没有用过早期版本,所以就不深究了。我现在用
2020-06-26 16:59:06
13427
原创 unity3d-初级-Roguelike2D-学习记录
Roguelike2D Roguelike2D是官方的一项实例教程,其中包含简单的IA,UI等 知识点记录 预制体
2020-06-18 16:32:17
434
原创 C# 匿名方法
匿名方法 匿名方法(Anonymous methods)提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。 为什么要用匿名方法? 使用匿名方法可以减少一些工作量,简单点来说,就是提升效率,而且在某些场景还很方便。 提升效率 临时变量局部化 方便 该方法使用的地方很少,基本上就一处调用 实操-两种匿名方法 那么接下来我们就来简单的看一下匿名方法。匿名方法有两种。 代理匿名 Lambda匿名 其中
2020-06-17 21:14:55
248
原创 C# 学习过程的记录
可空类型(Nullable) 用于对 int,double,bool 等基本变量无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 NullAble 类型的。 在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义。 int a = 3; int? b = 4; int c;// 默认值为0 int? d;// 默认值为null 数组
2020-06-16 21:05:11
244
原创 C# 委托与事件-导航-简单易懂
委托与事件 想要理解委托和事件,那么就必须先去理解什么委托,委托存在那些问题,而事件可以解决什么问题? 委托篇 C# 中的委托 事件篇 C# 中的事件 在这一篇中你可以理解到委托与事件的区别。 ...
2020-06-14 17:48:04
238
1
原创 C# 委托与事件-事件篇
事件 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。 举一个生活中常见的例子。例如我们关注了某个博主,当他发布新动态的时候,所有关注者都会接受到消息推送,这个就是这个事件的例子----发布以及订阅。 例子 在下面这个例子中,我们先用常规的方式去实现一个,当玩家死亡时,其他对象要对此做出反应的行为需求。 using System; /* * 我们想实现当玩家死亡的时候显示成就和游戏结束 */
2020-06-14 17:26:15
227
原创 C# 委托与事件-委托篇
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自System.Delegate类
2020-06-14 15:26:05
277
原创 UE4编辑器中的变量筛选机制,以及扩展筛选
(注:有不对的之处望路过大神指正,本文只做记录,非教程,转载请附原文链接。) 引言 在开发GIF资源的时想着要能像Texture2D资源一样,将资源设置到Image这个widget中,所以顺便研究了一下FSlateBrush。 需求是这样的 实现一个自定义类的变量筛选,且该类不继承于已能筛选的父类,接口除外 FSlateBrush 这个结构体中的ResourceObject就是在编辑器中...
2020-01-01 20:31:47
1879
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅