自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 3D数学基础——四元数的介绍

四元素四元数是由哈密顿在1843年爱尔兰发现的。当时他正研究扩展复数到更高的维次(复数可视为平面上的点)。他不能做到三维空间的例子,但四维则造出四元数。根据哈密顿记述,他于10月16日跟他的妻子在都柏林的皇家运河(Royal Canal)上散步时突然想到i² = j² = k² = ijk = -1的方程解。之后哈密顿立刻将此方程刻在附近布鲁穆桥(Brougham Bridge,...

2020-06-30 00:03:38 3079

原创 C++基础——static关键字的使用

static关键字静态局部变量静态局部变量在程序执行到该对象的声明处时被首次初始化,在以后的函数调用不再进行初始化; 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0; 静态局部变量始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,不能在函数体外面使用它;#include <iostream>using namespace std;void func() { static int count = 0; count++; c

2020-06-29 14:30:22 151

原创 C++基础——模板的介绍与使用

模板模板是一种使用无类型参数来产生一系列函数或类的机制;若一个程序的功能是对某种特定的数据类型进行处理,则可以将所处理的数据类型说明为参数,以便在其他数据类型的情况下使用,这就是模板的由来;模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型;通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而是我们不需为每一种数据类型产生一个单独的类或函数(这些将由编译器来处理)。函数模板定义模板格式模板函数定义的一般形式如下所示:template <typ

2020-06-21 23:26:28 383

原创 C++基础——friend函数和friend类的使用

friend函数和friend类友元机制允许一个类将对其非公有成员的访问权授予指定的函数或者类;友元的声明关键字是friend开始,它只出现在类定义的内部;友元声明可以出现在类中的任何位置:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响。friend函数在定义一个类的时候,可以把一些函数(包括全局函数和其他类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就可以访问该类对象的私有成员了。将全局函数声明为友元:friend 返回.

2020-06-21 15:58:53 1926

原创 C++基础——C程序的存储空间布局

C程序的存储空间布局 正文段(.text)这是由CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是频繁执行的程序(如文本编辑器、C编译器和shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外而修改其指令;程序的所有指令会存放在这个区域,这是已经编译后的机器码。初始化数据段(.data)通常将此段称为数据段,它包含了程序中需明确地赋初值的变量(已经初始化的非零全局变量)。例如,C程序中任何函数之外的声明:int ...

2020-06-20 18:26:00 292

原创 C++基础——sizeof 的使用

sizeof 的使用sizeof是一个操作符,其作用是返回一个对象或类型所占的内存字节数;对象可以是各种类型的变量以及表达式,#include <iostream>using namespace std;class A {};class B {public: int i;};class B1 {public: static int j; static int i; static int k;};class B2 {public: void a.

2020-06-19 11:06:01 1695

原创 3D数学基础——矩阵的介绍与使用

矩阵现在我们已经讨论了向量的全部内容,是时候看看矩阵了!简单来说矩阵就是一个矩形的数字、符号或表达式数组。矩阵中每一项叫做矩阵的元素(Element)。下面是一个2×3矩阵的例子: 矩阵可以通过(i, j)进行索引,i是行,j是列,这就是上面的矩阵叫做2×3矩阵的原因(3列2行,也叫做矩阵的维度(Dimension))。这与你在索引2D图像时的(x, y)相反,获取4的索引是(2, 1)(第二行,第一列)(译注:如果是图像索引应该是(1, 2)...

2020-06-17 00:11:37 2810

原创 C++基础——inline 的使用

inline在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数,栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。inline函数不需要承受函数调用所致的额外开销,inline函数背后的整体观念是“对函数的每一次调用都要函数体本身替换之”,这样能提高函数效率,但是可能增加目标

2020-06-15 22:33:51 325

原创 3D数据基础——向量介绍与3D向量类的实现

向量向量最基本的定义就是一个方向。或者更正式的说,向量有一个方向(Direction)和大小(Magnitude,也叫做强度或长度);向量可以在任意维度(Dimension)上,但是我们通常只使用2至4维。如果一个向量有2个维度,它表示一个平面的方向(想象一下2D的图像),当它有3个维度的时候它可以表达一个3D世界的方向。下面你会看到3个向量,每个向量在2D图像中都用一个箭头(x, y)表示。我们在2D图片中展示这些向量,因为这样子会更直观一点。你可以把这些2D向量当做z坐标为0的3D向量。由于向量

2020-06-15 00:19:45 1789

原创 OpenGL——三角形图元的绘制

三角形绘制图元介绍三角形是三个顶点的集合组成,当分别渲染多个三角形的时候,每个三角形与其他三角形完全独立;三角形的渲染时通过三个顶点到屏幕的投影以及三条边的链接来完成。如果两个三角形共享一个边,那么不可能有任何采样值同时位于这两个三角形之内,OpenGL可以支持多种不同的光栅化算法,但是在共享边上的像素值设置却有非常严格的规定:1. 两个三角形的共享边上的像素值因为同时被两者所覆盖,因此不可能不受到光照计算的影响;2. 两个三角形的共享边上的像素值,不可能受到多于一个三角形的光照计

2020-06-14 18:58:57 928

原创 OpenGL——GLSL高级篇

OpenGL 着色语言GLSL的内建变量接口块Uniform缓冲对象Uniform块布局

2020-06-12 23:47:01 2460 2

原创 C++基础 —— const 限定符

Const限定符const 允许定义一个语义约束(也就是指定一个”不该被改动“的对象),而编译器会强制实施这个约束;它允许你告诉编译器和其他程序员这个值应该保持不变;如果某个值要保持不变就应该使用const限定符,来获得编译器的襄助,确保这个约束。关键字Const...

2020-06-12 23:45:00 365

原创 OpenGL——GLSL基础篇

基本类型:类型 说明 int 有符号二进制补码的32位整数 uint 无符号的32位整数 float IEEE 32位浮点值 double IEEE 64位浮点值 void 空类型 bool 布尔类型 true,false GLSL隐式类型转换所需的类型 可以从这些类型隐式转换 uint int float int、uint double int、uint、float 聚合类型 ...

2020-06-10 23:49:18 1810

原创 OpenGL——GPU图形渲染管线

OpenGL渲染管线OpenGL本身并不是一个API,他仅仅是一个由Khronos组织制定并维护的规范;OpenGL规范严格规定了每个函数改如何执行,以及他们的输出值,至于内部具体每个函数是如何实现的,将有OpenGL库的开发者自行决定。因为OpenGL规范并没有规定实现的细节,具体的OpenGL库允许使用不同的实现,只要其功能和结果与规范相匹配。CPU & GPUGPU具有高并行结构(highly parallel structure),所以GPU在处理图形数据和复杂算法方面拥有比CP

2020-06-04 00:19:30 5072

原创 OpenGL——调试软件RenderDoc的使用

调试工具对OpenGL函数使用进行性能测试,寻找瓶颈,检查缓冲内存,显示纹理和帧缓冲区附件,这对开发过程中是非常有用的。gDebugger1.RenderDocRenderDoc是另外一个很棒的(完全开源的)独立调试工具。和gDebugger类似,你只需要设置捕捉的程序以及工作目录就行了。你的程序会正常运行,当你想要检查一个特定的帧的时候,你只需要让RenderDoc在程序当前状态下捕捉一个或多个帧即可。在捕捉的帧当中,你可以观察管线状态,所有OpenGL指令,缓冲储存,以及使用的纹..

2020-06-03 19:48:28 8593 1

原创 Android开发——JNI和NDK

ANDROID NDK(Native Develop Kit)是一套工具集合,google提供给开发者在java中调用C/C++的代码的功能,一般情况下,用NDK工具可以将C/C++代码编译成so文件,在java中通过loadlibrary加载so来使用C/C++代码。 NDK的价值:平台移植 代码复用 性能提升 代码保护 使用第三方的C、C++库JNI(java Native interface)jni 是java调用Native语言特性,通过jni使得java和c...

2020-06-02 19:38:50 383

原创 OpenGL——坐标系统与变换矩阵

为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵局部空间(Local Space,或者称为物体空间(Object Space)) 世界空间(World Space) 观察空间(View Space,或者称为视觉空间(Eye Space)) 裁剪空间(Clip Space) 屏幕空间(Screen Space)顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐(WorldCoordinate),观

2020-06-01 21:49:11 596

3D数学基础 图形与游戏开发

3D数学基础 图形与游戏开发,3D数学基础 图形与游戏开发,3D数学基础 图形与游戏开发

2016-02-22

空空如也

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

TA关注的人

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