游戏编程-3D数学
文章平均质量分 89
YzlCoder
未曾有过远大的梦想,只想用双手敲写明天
展开
-
【游戏开发3D数学笔记】1.有话说在前面
一.前言 这个分类的文章主要是我学习《3D数学基础:图形与游戏开发》这本书所做的一些笔记,笔记之中难免会使用书上的原句。然后我也会将查阅的一些相关资料融在一起。所以在使用原句的时候我尽量使用紫色标注: [该颜色内容为书中的的原句] 对于我自己觉得需要注意的地方,我会使用红色标注: [该颜色内容为需要注意的地方]二.还是前言原创 2017-10-29 22:07:17 · 699 阅读 · 0 评论 -
【SoftwareRender三部曲】前言
一.介绍这个系列主要是介绍如何简单制作一个SoftwardRender,后面会分三篇文章来完成这个系列。在看这个系列之前最好先阅读之前【游戏开发3D数学笔记】;在这个工程中的所需要的一些数学库(Vector、Matrix、Mesh等)都来源于之前3D数学系列。当然,这些数学库使用上比较简单,如果你对其数学原理不是很感兴趣的话,也可以跳过,并不会对这个系列的阅读有什么影响。 二.代码这个系列最后的工原创 2017-12-24 23:50:54 · 744 阅读 · 0 评论 -
【SoftwareRender三部曲】二.着色器(shader)
一.前言在传统的固定渲染管线中,渲染中的一系列操作如:坐标转换、光照、投影、剪裁、扫描转换、纹理贴图、可见性测试、帧缓冲像一个流水线一样按部就班的按序执行。每一道工序上都有一些不同的参数,开发者为了完成不一样的效果就是去改变每个工序的参数。然而人们总是不满足于这样有限的控制;于是就出现了后面的可编程渲染管线,将渲染中的一些工序交给shader来完成。你可以把shader看作是一段小程序,只不过是用作原创 2017-12-27 21:12:35 · 645 阅读 · 0 评论 -
【SoftwareRender三部曲】一.网格
一.简介在这个系列讲述绘制图元主要是以三角形为主,我们通过顶点构成三角形,三角形构成整个模型的网格。如下:每个顶点可以携带一些信息,比如位置、法向量、颜色、UV坐标等等。后面我会在Shader着色器篇章讲述这些信息的用处。 如何用顶点来组织一个网格呢?这里我们是使用的索引顶点。也就是顶点数据只存一份,网格的图元顶点仅仅使用顶点的索引来表示。这里有篇Ogl中网格顶点组织结构的介绍。二.顶点结构根据上原创 2017-12-27 00:33:39 · 1225 阅读 · 0 评论 -
【游戏开发3D数学笔记】5.方位与角位移
一.思维导图 没有太多时间码字,后面可能使用思维导图的方式梳理章节重点。 点击查看大图 二.Quaternion类 根据书上第10,11章的内容,整理了一个Quaternion类,其接口和实现主要是参照Unity的Quaternion类来仿写的。 代码地址原创 2017-11-19 19:20:33 · 482 阅读 · 0 评论 -
【游戏开发3D数学笔记】6.坐标系切换和纹理
一.物体坐标系到世界坐标系(Model Matrix) 在之前固定流水线,需要将模型的顶点坐标从自身坐标系依次进行缩放,旋转,平移操作(这个顺序不能改变)。而在可编程管线中,这些操作放到了vertex shader中,我们需要得到模型中的每个顶点的世界坐标,从而进行一些深度测试、光照等运算。 而model matrix的推导也十分简单,只需要按照顺序将三种变换的矩阵连原创 2017-12-08 20:41:35 · 609 阅读 · 0 评论 -
【游戏开发3D数学笔记】3.向量和矩阵
一.前言 这篇笔记没有太多东西,书中这两章多是关于向量、矩阵的一些概念和运算介绍。网上已经有很多优秀的博客讲解,这里不累赘介绍。主要是根据书中的讲解,写一个向量、矩阵的运算类以供后面使用。 二.向量 相关概念学习地址:3D数学基础—向量 需要掌握的是: 1.向量的加、减运算原创 2017-11-04 17:21:40 · 659 阅读 · 0 评论 -
【游戏开发3D数学笔记】2.坐标系
一.坐标系简介 为了描述二维,三维空间中位置,方向等,数学家提出了坐标系这一概念。并且在不同的场景下使用的坐标系也可能不一样,比如:地理位置——经纬度,二次曲线分析——极坐标,而在此书中描述3D空间物体坐标使用的是笛卡尔坐标系。至于笛卡尔坐标系的详细介绍可以查看[笛卡尔坐标系Wiki]。二.坐标系的方向 2D笛卡尔坐标系:水平的轴称作X轴,向右为X轴的正方向,垂直的轴原创 2017-10-31 11:09:09 · 937 阅读 · 0 评论 -
【游戏开发3D数学笔记】4.矩阵和线性变换
一.不同变换的矩阵推导旋转 在前文知道旋转矩阵的行向量就是旋转后的坐标系的基向量。2D中绕原点的旋转只有一个参数,角度θ,它描述了旋转量。逆时针旋转经常(不是必须)被认为是正方向,顺时针方向是负方向。如下图,我们很容易得到旋转后的基向量,从而得到旋转矩阵:2D旋转矩阵R(θ)=[p′q′]=[cosθ−sinθsinθcosθ]R(\theta) = \begin{bmatrix}原创 2017-11-07 11:06:33 · 1102 阅读 · 1 评论 -
【SoftwareRender三部曲】三.流水线
一.前言已经是三部曲中最后一个章节,这个章节结束之后将会完成这个SoftwareRender。而这章也是内容最多,最不容易理解的章节。 二.缓冲区在写流水线之前我们要先实现缓冲区,因为流水线上的读写操作都是在缓冲区中实现的,一般来说缓冲区有颜色缓冲区、深度缓冲区、模板缓冲区。在这里为了简单,我们只实现模板缓冲区和深度缓冲区。对于缓冲区而言,我们就简单的提供三个接口:初始化、读、写。class De原创 2017-12-30 15:04:23 · 1011 阅读 · 7 评论