超详细Vulkan开发环境搭建Windows篇
1.Vulkan SDK开发 Vulkan 应用程序所需的最重要组件是 SDK。它包括头文件、标准验证层、调试工具和 Vulkan 函数的加载程序。加载程序在运行时查找驱动程序中的函数,类似于 OpenGL 的 GLEW - 如果您熟悉它。可以 使用页面底部的按钮从LunarG 网站下载 SDK 。您不必创建帐户,但它可以让您访问一些可能对您有用的其他文档。 继续安装,注意SDK的安装位置。 我们要做的第一件事是验证您的显卡和驱动程序是否正确支持 Vulkan。进入SDK安装目录,打开Bin目录,运行vkcube.exedemo。您应该看到以下内容: 如果您收到错误消息,请确保您的驱动程序是最新的,包括 Vulkan 运行时并且您的显卡受支持。 glmglm下载地址 GLFWGLFW下载地址 创建项目打开VS2019,新建一个C++空项目,然后添加一个Main.cpp文件。 配置项目属性右键创建的项目,选择最下面的属性,打开属性面板。选择C/C++下面的General,在第一个添加包含目录里面添加Vulkan包含目录,glfw包含目录和glm包含目录。 选 ...
超详细超全CMake教程:第二步添加库
第 2 步:添加库现在我们将向我们的项目添加一个库。这个库将包含我们自己的计算数字平方根的实现。然后可执行文件可以使用这个库代替编译器提供的标准平方根函数。在本教程中,我们将把库放到MathFunctions里面。 此目录已包含头文件 MathFunctions.h和源文件mysqrt.cxx。源文件有一个被调用的函数mysqrt,它提供与编译器sqrt函数类似的功能。在MathFunctions 目录中创建一个CMakeLists.txt文件并添加如下代码: 1add_library(MathFunctions mysqrt.cxx) 为了使用新库,我们将在顶级CMakeLists.txt文件中添加一个 add_subdirectory() ,以便构建库。我们将新库添加到可执行文件中,并添加MathFunctions为包含目录,以便mysqrt.h可以找到头文件。顶级CMakeLists.txt文件的最后几行现在应该如下所示: 1234567891011121314# add the MathFunctions libraryadd_subdirectory(MathFunction ...
超详细超全CMake教程:第一步:一个基本的起点
第一步:一个基本的起点最基本的项目是从源代码文件构建的可执行文件。对于简单的项目,只需要一个三行CMakeLists.txt文件。这将是我们教程的起点。在Step1目录中创建一个 CMakeLists.txt文件,添加如下代码: 1234567cmake_minimum_required(VERSION 3.10)# set the project nameproject(Tutorial)# add the executableadd_executable(Tutorial tutorial.cxx) 请注意,此示例在CMakeLists.txt文件中使用小写命令。CMake 支持大写、小写和大小写混合命令。目录中提供了tutorial.cxx的源代码,Step1可用于计算数字的平方根。 添加版本号和配置的头文件我们将添加的第一个功能是为我们的可执行文件和项目提供版本号。虽然我们可以只在源代码中做到这一点,但使用 CMakeLists.txt提供了更大的灵活性。 首先,修改CMakeLists.txt文件以使用project() 命令来设置项目名称和版本号。 1234cmake_m ...
超详细超全CMake教程:开发环境准备
下载安装CMakeCMake安装教程 下载CMake源代码版本下载地址为什么安装了CMake还要下载CMake源代码版本呢?因为二进制版本没有提供我们需要的练习文件,所以得在安装完二进制CMake以后再下载CMake源代码版本进行练习。 CMake 教程我们通过刚刚下载的的Cmake源文件进行学习,练习路径为\cmake-3.21.2\Help\guide\tutorial 本系列教程一共有12步,每个步骤都有自己的子目录,其中包含可用作起点的代码。教程示例是渐进式的,因此每个步骤都为上一步提供了完整的解决方案。 超详细超全CMake教程:第一步
光栅化渲染器:目录
前言光栅化渲染是一个又好玩又有挑战的东西,个人通过写一个光栅化渲染器来学习渲染的话是一个不错的选择。 光栅化渲染器目录 光栅化渲染器:项目设置光栅化渲染器:画线光栅化渲染器:填充三角形光栅化渲染器:对三角形着色光栅化渲染器:坐标变换光栅化渲染器:渲染一个场景光栅化渲染器:深度缓存光栅化渲染器:视椎体剔除光栅化渲染器:背面剔除光栅化渲染器:纹理光栅化渲染器:光照光栅化渲染器:加载模型光栅化渲染器:立方体贴图光栅化渲染器:阴影光栅化渲染器:泛光… 结尾 如果你遇到了问题可以在评论区告诉我哦项目地址
光栅化渲染器:深度缓存
前言上一篇文章我们已经发现了渲染不正确的问题,我们今天就通过z buffer来解决这个问题。 深度缓存(z)深度缓冲区与帧缓冲区相对应,用于记录上面每个像素的深度值,通过深度缓冲区,我们可以进行深度测试,从而确定像素的遮挡关系,保证渲染正确。深度缓存中存储着每个象素点的深度值,深度值(Z值)越大,则离摄像机越远。在不使用深度测试的时候,如果我们先绘制一个距离较近的物体,再绘制距离较远的物体,则距离远的物体因为后绘制,会把距离近的物体覆盖掉,这样的效果并不是我们所希望的。而有了深度缓冲以后,绘制物体的顺序就不那么重要了,都能按照远近(Z值)正常显示。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 ...
光栅化渲染器:渲染一个场景
前言上一篇文章我们已经对三角形进行了坐标变换,今天准备渲染几个立方体,渲染立方体就会比平面的三角形看起来更意思了。 渲染一个线框立方体咱们现在可以渲染一个三角形了,那么也就意味着我们可以渲染任何物体了,因为任何物体都可以划分为三角形,那么咱们今天就先从比较简单的立方体开始。上一篇文章的坐标变换部分有点乱,今天对它们进行了封装,具体可以看代码。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 ...
光栅化渲染器:坐标变换
前言坐标变换是渲染管线里面很重要的一个过程,已经有很多书籍和文章对此进行了讲解,我这边就不重复讲解了。虽然我们可以借助glm等数学库非常轻松的构造MVP矩阵,但是,我还是推荐大家去了解Model矩阵是如何构造出来的,为什么是按照SRT顺序构造而不是其他顺序呢?还有View矩阵是如何构造出来的,以及构造View矩阵有几种方法?各自有什么区别呢?还有比较复杂的投影矩阵是如何构造出来的?以及为什么需要这么多矩阵呢?等等都推荐大家去了解清楚。 构造MVP矩阵因为我们使用了glm,所以构造起来还是比较简单的。 123456789101112131415glm::mat4 sm = glm::scale(glm::mat4(1.0f), glm::vec3(1.0f, 1.0f, 1.0f));glm::mat4 rm = glm::rotate(glm::mat4(1.0f), glm::radians(0.0f), glm::vec3(0, 1, 0));glm::mat4 tm = glm::translate(glm::mat4(1.0f), glm::vec3(0, 0, 1));//构 ...
光栅化渲染器:对三角形着色
前言上一篇文章咱们已经画出来了一个纯色的三角形,那么今天我们画一个非纯色的三角形。 对三角形着色其实对三角形着色很简单,咱们只需要给予不同的顶点不同的颜色值,然后进行插值就可以了,废话不多说直接看代码。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816 ...
光栅化渲染器:填充三角形
前言为什么三角形是实时渲染的首选多边形?因为它们具有以下理想的特性: 三角形是最简单的多边形类型。少于三个顶点就没法组成一个多边形。 三角形始终是平面的。任何具有四个或更多顶点的多边形都没有这个属性,因为前三个顶点定义了一个平面,第四个顶点可能位于该平面的上方或下方。 三角形在大多数类型的变换下仍然是三角形,包括仿射变换和透视投影。 几乎所有商业图形加速硬件都是围绕三角形光栅化设计的。 绘制线框三角形上篇文章我们实现了画线功能,现在可以轻而易举的画一个三角形了。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312 ...
光栅化渲染器:画线
直线方程假设在屏幕上面有两个点,P0(x0,y0)和P1(x1,y1),那么我们如何画一条从P0到P1的线?其实很简单,在P0P1这条线上的点P都满足一个方程: P = P0 + t(P1 - P0) 转化为: x = x0 + t(x1 - x0)y = y0 + t(y1 - y0) 进一步化简第一个方程,求得: t=(x - x0) / (x1 - x0) 把t带入第二个方程,可得: y = y0 + (x - x0) / (x1 - x0) * (y1 - y0) 因为(y1 - y0) / (x1 - x0)是一个常量,咱们取为a(其实就是线的斜率),可得: y = y0 + a * (x - x0) 进一步化简,可得: y = ax + (y0 -ax0) y0 - ax0其实就是线的截距,咱们取为b,可得: y = ax + b 这个方程就是大家熟悉的直线方程了。 画线 第一种画线方法 12345678910111213141516171819202122232425262728293031// 引用EasyX图形库头文件#incl ...
光栅化渲染器:项目设置
前言本系列教程准备从零到一实现一个光栅化渲染器,采用的编程语言是C++。在开始编写渲染器之前,我们需要提前准备四项功能。 显示窗口 输出一个像素的方法 处理鼠标键盘事件 数学库 本教程将使用一个非常简单的图形库EaxyX,EasyX刚刚好具备前三个功能,EasyX使用很简单,只需要下载安装然后添加相应的头文件就可以了。对于数学库的话我们使用glm。 下载安装EasyX下载地址下载完以后直接双击下一步安装就可以,点完安装就可以关闭了,非常简单。 下载glm下载地址下载完以后,咱们只需要保留glm文件夹里面的东西,其他的可以删除了。 新建一个C++空项目在解决方案路径下创建一个文件夹叫Vendor,然后把上一步下载的glm文件夹下面的东西全部拷贝到Vendor文件夹里面。在VS里面新建一个Main.cpp文件,然后右键点击项目选择属性,打开属性面板,在C/C++里面选择第一个添加包含目录,在里面输入$(SolutionDir)Vendor\。现在咱们已经把环境配置好了,可以输出一个像素点看看效果了。在Main.cpp文件里面输入如下代码 123456789101 ...
免费下载英文电子书
免费下载英文电子书教程教程链接