- 博客(6)
- 资源 (3)
- 收藏
- 关注
原创 【SoftwareRender三部曲】三.流水线
一.前言已经是三部曲中最后一个章节,这个章节结束之后将会完成这个SoftwareRender。而这章也是内容最多,最不容易理解的章节。 二.缓冲区在写流水线之前我们要先实现缓冲区,因为流水线上的读写操作都是在缓冲区中实现的,一般来说缓冲区有颜色缓冲区、深度缓冲区、模板缓冲区。在这里为了简单,我们只实现模板缓冲区和深度缓冲区。对于缓冲区而言,我们就简单的提供三个接口:初始化、读、写。class De
2017-12-30 15:04:23 973 7
原创 【SoftwareRender三部曲】二.着色器(shader)
一.前言在传统的固定渲染管线中,渲染中的一系列操作如:坐标转换、光照、投影、剪裁、扫描转换、纹理贴图、可见性测试、帧缓冲像一个流水线一样按部就班的按序执行。每一道工序上都有一些不同的参数,开发者为了完成不一样的效果就是去改变每个工序的参数。然而人们总是不满足于这样有限的控制;于是就出现了后面的可编程渲染管线,将渲染中的一些工序交给shader来完成。你可以把shader看作是一段小程序,只不过是用作
2017-12-27 21:12:35 612
原创 【SoftwareRender三部曲】一.网格
一.简介在这个系列讲述绘制图元主要是以三角形为主,我们通过顶点构成三角形,三角形构成整个模型的网格。如下:每个顶点可以携带一些信息,比如位置、法向量、颜色、UV坐标等等。后面我会在Shader着色器篇章讲述这些信息的用处。 如何用顶点来组织一个网格呢?这里我们是使用的索引顶点。也就是顶点数据只存一份,网格的图元顶点仅仅使用顶点的索引来表示。这里有篇Ogl中网格顶点组织结构的介绍。二.顶点结构根据上
2017-12-27 00:33:39 1194
原创 【SoftwareRender三部曲】前言
一.介绍这个系列主要是介绍如何简单制作一个SoftwardRender,后面会分三篇文章来完成这个系列。在看这个系列之前最好先阅读之前【游戏开发3D数学笔记】;在这个工程中的所需要的一些数学库(Vector、Matrix、Mesh等)都来源于之前3D数学系列。当然,这些数学库使用上比较简单,如果你对其数学原理不是很感兴趣的话,也可以跳过,并不会对这个系列的阅读有什么影响。 二.代码这个系列最后的工
2017-12-24 23:50:54 713
原创 【游戏开发3D数学笔记】6.坐标系切换和纹理
一.物体坐标系到世界坐标系(Model Matrix) 在之前固定流水线,需要将模型的顶点坐标从自身坐标系依次进行缩放,旋转,平移操作(这个顺序不能改变)。而在可编程管线中,这些操作放到了vertex shader中,我们需要得到模型中的每个顶点的世界坐标,从而进行一些深度测试、光照等运算。 而model matrix的推导也十分简单,只需要按照顺序将三种变换的矩阵连
2017-12-08 20:41:35 575
原创 C++ Vector属性Swizzle实现
一.前言 在写gl shader的时候, 我发现glsl的语法中vec可以支持如同如下的语法任意混合属性 vec3 pos; pos.xyz pos.yxz pos.xxx pos.zx ... 我们可以很容易的在C++写一个2、3个属性的vec类,但是如何使得vec也支持如上语法将属性进行混合呢? 二.方案一 我们或许可以想到,利用uion+struct来实现 struct vec3 {
2017-12-06 17:36:14 1576
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人