DirectX12_Windows_GameDevelop_0:启程之旅

news2024/11/24 18:00:43

前言

  • 今天是2023年9月28日,明天就是中秋节了,先祝福大家中秋快乐!
  • 时光飞逝,岁月如梭,大学四年一晃而逝,眨眼间我们即将毕业。毕业不是意味着要面对社会的险恶,也不是意味着要当打工社畜,而是意味着你必须回答一个问题:你想成为怎样的人?
  • 或许是我觉醒的太晚了,我是个只会读书的书呆子,所以现在才问我自己这个问题。最近华为崛起势头正盛,我看了很多任正非的采访视频,感触很深。他说:必须要从基础科学抓起。他说:中国必须有人突破技术壁垒。他说:我们不做谁去做。
  • 我立志为中国游戏发展奋斗终身。当然我没有“我不去做谁去做”那种舍我其谁的霸气,我只有一种奉献的自豪。我要一步一个脚印往游戏的最高峰去攀登。这样在年轻之时,我可以改变世界,可以尝试去建设我们的祖国!在年老之时,我可以在直播或录播平台将我的所学所知讲授给中国新一代的青年们,我可以影响一批人、改变一批人!
  • 比我站的高的人不尽其数,但这并不影响我要去的地方。
  • 我是一名普通的中国青年,如果你立志想从事游戏开发事业,可以跟我一起,打开新世界的大门。

本栏目学习路线

  • 本栏目主要是学习DirectX 12培养三维图像开发能力。
  • 本栏目将使用《DirectX 12 3D游戏开发实战》进行学习,大家可以买这本书看,这本书就是龙书,我在某东上面买的差不多120。
  • 编程最重要的还是实战,所以栏目只会分享我的读书心得,当然我会分享出每个Demo的代码,如果你有什么想要讨论的地方,可以随时在博客下留言或私信我,我看到后会给予你帮助。

一、Direct3D介绍

  • Direct3D是微软公司DirectX SDK集成开发包中的组成部分,主要作用是编写高性能3D图形应用程序,Direct3D 是一个渲染库。
  • Direct3D 12是一款为运行在现代图形硬件上各种的Windows平台(Windows桌面版、手机版和Xbos One)编写的高性能3D图形应用程序渲染库。
  • Direct3D是一种底层库,尤其是Direct3D 12,它实现了前所未有的更底层的硬件抽象,削减驱动层的功能交给我们开发者,以实现性能的提升。
  • 另外,由于当今每一个人的电脑都配备了现代图形设备,因此非3D应用程序也开始逐步把计算密集型的工作交给显卡来执行,这就是所谓的GPU通用计算。
英文中文
GPU(Graphics Processing Unit)图形处理器
general purpose GPU computingGPU通用计算

二、预备知识

  • 如果你不了解以下内容,请对其进行了解:
      1. 高中数学,包括:代数、三角学、函数。
      2. Visual Studio开发,包括:创建项目、为项目添加文件、链接外部库。
      3. C++编程及数据结构知识。
      4. 熟悉使用Win32 API进行Windows编程。
  • 当然完事开头难,只要你愿意学,那我教你呀,跟着学就行。计算机科学是一门实践性科学,你只要能够按照步骤把程序写出来并运行起来,达到应该有的效果,那么你就是成功的。

三、疑难解答

  • 问:为什么要使用Windows开发?那手机即移动游戏,苹果即ios、macOS平台怎么办?
  • 答:你可以在百度上搜索steam统计的游戏用户使用平台占比,Windows平台占据主机平台百分之九十以上,所以我们使用Windows开发主机游戏。如果你是个小年轻,你可能理想的认为这不是你想要的,但实际上我们没有那么多选择。就像现在计算机行业,有解决问题的方案别人就会用,不会在乎什么技术、科学。在这个国内都是某荣耀、崩坏,铺天盖地都是传奇、页游的环境中,哪有那么多理想化的东西?我想做的是有血有肉,有灵魂有深度的独立游戏,它不是那些种田首充6元的赚钱机器,它是能感染人影响人的艺术作品。在这个游戏娱乐已经成为人类生活一部分的时代,即使受到垄断,我们也要站出来。就如上所说,总得有人站出来,不管结果如何,是对的那就去做。
  • 至于其他疑问就暂时别问了,你只需要知道,想要做三维游戏,这就是你的必经之路,这也是最好的路,最终弯弯绕绕你都会回到这里。
  • 最后,如果你的编程基础不好甚至不会编程,没有关系,推荐给你一本更好的书:《逐梦旅程:Windows游戏编程之从零开始》,这是全世界入门游戏开发最好的书籍了,至少在我现在看来。如果你什么也不会,没关系,这本书专门为你设计,而且它也非常好,并且你会有一个很好的领路人。

四、开发环境

  1. 一台装有Windows操作系统的计算机,Windows的版本在10或以上都可以。
  2. Visual Studio2015 及以上开发环境,没有必要一定要使用2015,我建议你使用Visual Studio2022,因为这样你就和我一致。
  3. 你计算机的显卡必须要支持Direct3D 12,当然大多数显卡都是支持的,不用担心。

五、资料查询

  • MSDN是微软官方的开发者帮助网站,网址是:MSDN,如果失效你在百度搜索MSDN即可。MSDN的作用就是一切关于Windows或Direct3D的事情你都可以查找,点击搜索框输入你想要的查找即可。未来使用Windows API开发时,如果你对哪个函数不了解,那么世界上最权威能回答你的地方,就是官方的MSDN。
  • MSDN中有Direct3D 12的编程指南,网站是:Direct3D 12 Programming Guide,这是Direct3D 12的编程指南,如果你想了解一些什么,就到这里来。
  • 你要明确的是,这本书或者这个栏目,所讲授的主要目的是Direct3D 的API。即我们想告诉你的是如何使用 Direct 3D 的函数,如果你未来想开发游戏或图形引擎,那么其架构设计需要你在学习完Direct3D后再独立思考并设计。
  • 接下来就让我们开始吧!我们将创建一个Window项目,然后配置环境,最终渲染一个酷炫的Cube。如果你遇到什么问题没有在文中说明,请在评论区通知我~

六、创建Windows API开发项目

  • 第一步:点击 Visual Stdio,再点击创建新项目
    在这里插入图片描述
  • 第二步:如下图选择三处,再点击下一步
    在这里插入图片描述
  • 第三步:如下图所示,可能有一点繁杂但没有关系,因为无论你怎么选其实最后都可以进行开发,所以不用担心,快点创建吧!
    在这里插入图片描述
  • 第四步:
    在这里插入图片描述

七、基础环境配置

  • 学过LearnOpenGLCN的人都知道,要想做出一个三维可观赏的立方体都是很不容易的,要写摄像机、着色器等好多类。
  • 为了避免开发的繁琐事项,本书的开发者在随书的示例代码中提供了许多文件夹,如下图所示:
    在这里插入图片描述
  • 其中Common是公用的基石代码,即上文中说的什么摄像机之类的,作者写好了我们直接使用即可,避免了初学时什么都看不到,也避免了初学时就要学一堆看不懂东西。如果你没有书籍配套资源也没有关系,文章末尾我以百度云的形式分享了书籍配套资源,下载完就可以继续了~
  • 本书的Demo0即示例零是渲染一个Cube即立方体,在上文六创建完项目的基础下,我们现在来配置项目。
  • 首先将Common文件夹放到我们刚创建项目的文件夹的同级目录下,如下图所示:
    在这里插入图片描述
  • 其中DirectX12_Windows_GameDevelop是我创建的解决方案名。
  • 然后在VS面板中右键“头文件”,选择“添加文件”,选择“现有文件”。如下图所示:
    在这里插入图片描述
  • 再来到我们刚才放置在解决方案同级目录下的Common文件中。如果不会可以看下图:
    在这里插入图片描述
    在这里插入图片描述
  • 找到Common文件夹后双击打开,框选所有.h头文件添加即可。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 你可能注意到Common文件夹中还剩余一些.cpp文件,我们说过Common文件夹中包含的是开发基础代码,所以它们当然也是要添加的,不过它们不是添加到头文件中,而是添加到源文件中。如下图右键“源文件”,添加现有项,重复上面过程,然后框选所有.cpp文件添加即可。
    在这里插入图片描述
  • 由于作者使用VS2015开发,所有我们需要设置一下VS2019的选择,避免它由于检测程序更严谨而让我们的代码无法运行。按照下图,打开项目的属性页。
    在这里插入图片描述
  • 然后设置符合模式为否
    在这里插入图片描述
  • 最后我们打开书籍配套代码文件夹MyDemos,复制BosApp.cpp文件到我们的项目目录下。
    在这里插入图片描述
  • 复制到我们的项目目录下:
    在这里插入图片描述
  • 复制好后点击VS的源文件,点击添加-现有项,选择项目目录中的BoxApp.cpp,将它添加到项目中。
  • 你可能注意到上一幅图中我的目录中有个Shader文件夹,这是MyDemos中着色器文件夹,你在上上幅图中可以看到它,记得把它也放到我们的项目目录中。

八、最终效果

  • 渲染出一个很酷的Cube!

在这里插入图片描述

  • 如果你想不懂计算机图形学,可以学习一下Games101。如果你了解计算机图形学,可以看一下我软光栅渲染出来的Cube,和它一样五颜六色,不过没有它那么酷。

九、资源

  • 链接:https://pan.baidu.com/s/1zgx2yniGg44C1NU7PeoVyg?pwd=n0y7
  • 提取码:n0y7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cesium在vue中引入报错解决;cesium在vue中初始化地球

第一步: npm install cesium 第二步: 找到node_modules/cesium/Build/Cesium 文件夹,把这个 Cesium 文件夹复制一份到项目的 public 文件夹下 第三步: 在public文件夹下的index.html 文件中,head 标签里面&#…

51单片机实训项目之产品数量计数器

/********************************************************************************* * 【实验平台】: QX-MCS51 单片机开发板 * 【外部晶振】: 11.0592mhz * 【主控芯片】: STC89C52 * 【编译环境】: Keil μVisio3 * 【程序…

BiMPM实战文本匹配【上】

引言 今天来实现BiMPM模型进行文本匹配,数据集采用的是中文文本匹配数据集。内容较长,分为上下两部分。 数据准备 数据准备这里和之前的模型有些区别,主要是因为它同时有字符词表和单词词表。 from collections import defaultdict from …

3 OpenCV两张图片实现稀疏点云的生成

前文: 1 基于SIFT图像特征识别的匹配方法比较与实现 2 OpenCV实现的F矩阵RANSAC原理与实践 1 E矩阵 1.1 由F到E E K T ∗ F ∗ K E K^T * F * K EKT∗F∗K E 矩阵可以直接通过之前算好的 F 矩阵与相机内参 K 矩阵获得 Mat E K.t() * F * K;相机内参获得的方式…

spring6-IOC容器

IOC容器 1、IoC容器1.1、控制反转(IoC)1.2、依赖注入1.3、IoC容器在Spring的实现 2、基于XML管理Bean2.1、搭建子模块spring6-ioc-xml2.2、实验一:获取bean①方式一:根据id获取②方式二:根据类型获取③方式三&#xff…

Zilliz@阿里云:大模型时代下Milvus Cloud向量数据库处理非结构化数据的最佳实践

大模型时代下的数据存储与分析该如何处理?有没有已经落地的应用实践? 为探讨这些问题,近日,阿里云联合 Zilliz 和 Doris 举办了一场以《大模型时代下的数据存储与分析》为主题的技术沙龙,其中,阿里云对象存储 OSS 上拥有海量的非结构化数据,Milvus(Zilliz)作为全球最有…

华为摄像头智能安防监控解决方案

云时代来袭,数字化正在从园区办公延伸到生产和运营的方方面面,智慧校园,柔性制造,掌上金融和电子政务等,面对各种各样的新兴业态的涌现,企业需要构建一张无所不联、随心体验、业务永续的全无线网络&#xf…

多线程锁-线程锁知识概述、乐观锁和悲观锁

3. 说说Java"锁"事 3.1 从轻松的乐观锁和悲观锁开讲 悲观锁: 认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加 锁,确保数据不会被别的线程修改,synchronized和Lock的实现类都是悲观锁…

【通意千问】大模型GitHub开源工程学习笔记(2)

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…

正点原子lwIP学习笔记——WebServer实验

1. WebServer简介 Web Server就是提供Web服务的Server,主要功能是:存储、处理和传递网页给客户端,他只需支持HTTP协议、HTML文档格式以及URL,与客户端的网络浏览器配套。 其中,HTTP的协议就是基于TCP进一步实现的&…

零代码编程:用ChatGPT批量修改文件夹名称中的大小写

一个文件夹下面有很多个子文件夹,要把文件夹中的大写数字全部重命名为小写数字,比如将二 三 四,改成: 2 34 在ChatGPT中输入提示词如下: 你是一个Python编程专家,要完成一个文件夹重命名的任务。具体步骤如…

芯片测试方案之如何测试芯片EN输入阈值?

在电源管理芯片的设计中,除了常规的VIN、VOUT以及GND端口之外,还会有SW、EN、FB等芯片独有的特殊端口引脚,这些引脚或负责电源开关的输入,或负责电路的反馈电压/电流,这些引脚在芯片的工作中有着极其重要的作用&#x…

CUDA学习笔记0929

一、GPU缓存和变量作用域 1. 缓存类型 (1)GPU缓存是非可编程存储区域 (2)GPU包含4类缓存: L1缓存,每个流处理器一个 L2缓存,全部流处理器共享一个 L1和L2都可用于存储本地和全局内存中的数…

了解vtk显示的原理

文章目录 目标:知识补充:1.什么是图元?2.最让我不解的是:官方讲的是:mapper讲polydata转换为可渲染的图元数据,然后actor是将polydata映射为可渲染的图元???既然mapper就已经将其解析为图元数据,为什么actor还要进一步解析呢?3.那polydata不是也获得了一些数据,这些数据是…

快速将iPhone大量照片快速传输到电脑的办法!

很多使用iPhone 的朋友要将照片传到电脑时,第一时间都只想到用iTunes 或iCloud,但这2个工具真的都非常难用,今天小编分享牛学长苹果数据管理工具的照片传输功能,他可以快速的将iPhone照片传输到电脑上,并且支持最新的i…

C语言中自定义类型讲解

前言:C语言中拥有三种自定义类型,这三种自定义类型是怎么运用呢?在内存中又是怎么存储的呢?通过这篇文章我们来逐个讲解讲解。 三种类型分别是: 1.结构体 – 通俗的来讲就是可以把不同类型的变量放在一个集合中 2.枚举…

计算机图像处理-直方图均衡化

直方图均衡化 直方图均衡化是图像灰度变换中有一个非常有用的方法。图像的直方图是对图像对比度效果上的一种处理,旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点分布更均匀一点。通过这种方法,亮度可以更好地在直方图上分布。 …

将外包jar包导入到本地Maven仓库中

文章目录 1.问题描述2.方法如下 1.问题描述 有时候我们需要引入阿里云或者mvnRespository网上没有对于的jar。需要下载别人的jar的包,然后放到自己的项目的libs目录下。这样很不方便。因此需要把外包的jar,导入到本地maven仓库中。这样再pom.xml文件中直接按三要素…

项目进展(四)-双电机均可驱动,配置模拟SPI,调平仪功能初步实现!

一、前言 截止到今天,该项目也算实现基本功能了,后续继续更新有关32位ADC芯片相关的内容,今天对驱动芯片做一个总结,也对模拟SPI做一点总结吧 二、模拟SPI 由于模拟SPI还是得有四种模式(CPOL和CPHA组合为四种),下面…

虚拟DOM详解

面试题:请你阐述一下对vue虚拟dom的理解 什么是虚拟dom? 虚拟dom本质上就是一个普通的JS对象,用于描述视图的界面结构 在vue中,每个组件都有一个render函数,每个render函数都会返回一个虚拟dom树,这也就意味…