自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

少年的博客

梦想做游戏引擎开发

  • 博客(150)
  • 问答 (1)
  • 收藏
  • 关注

原创 OpenSceneGraph学习笔记

我在本科毕业时尝试使用DirectX去设计一个通用图形库,它旨在为Windows上应用程序提供图像计算和渲染服务,使得程序开发者不需要了解计算机图形学以及图像API,就能渲染出满意的图形。在设计过程中,学习DirectX12并不是我遇到最难的问题,而是如何设计通用图形库的架构,如何构建通用的Shader接口?如何提供和Shader配套的设置?如何组织场景对象?这些是需要思考的问题。OSG场景图像系统是使用OpenGL开发的库,它能让程序员更快速、便捷地创建高性能和跨平台的交互式图像程序。

2024-07-15 00:44:24 922

原创 RTR3学习笔记

渲染管线的主要功能:决定在给定虚拟相机、三维物体、光源、照明模式,以及材质等诸多条件的情况下,生成或绘制一幅二维图像的过程。将 “虚拟相机、三维物体、光源、照明模式,以及其他条件” 比喻为流水线上的材料,那么渲染管线就是决定如何加工它们,以生成最终产品 “二维图像”。注意渲染管线是决定生成或绘制图像的过程,而非生成或绘制图像的过程。即渲染管线像是导入生产流水线的配置文件,而具体去执行生产的是流水线上的机器设备。每个模型都定义于其自身的模型空间中,而最终所有模型都显示在唯一的世界空间中。

2024-04-13 14:33:32 694

原创 第一章:模型从硬盘文件到显示器像素的全过程分析

当艺术家导出模型时需要选择文件格式,常见的模型文件格式有:FBX、GLTF、OBJ等,不同格式存储模型数据的方法大相径庭,同一格式也可能由于版本和形式不同导致存储的数据不同。使用怎样的模型格式是一个值得考虑的问题,本文考虑到FBX和GLTF格式使用的广泛性,使用FBX和GLTF格式作为研究对象,为了能够直接查看和处理模型贴图,采用分离式FBX和GLTF。本文主要对 “模型从硬盘文件到显示器像素” 的全过程进行理论分析,硬盘文件即艺术家导出的模型文件,显示器像素即显示器屏幕上显示模型的像素。

2024-03-17 07:14:03 918

原创 D3D渲染画面扭曲

今天在项目中渲染出来的画面始终不对,工具PIX显示图元类型输出是对的,但是就是渲染画面不对,顶点着色器的输出就奇形怪状,查了一条才发现是观察投影矩阵的问题。如果你也是看的D3D龙书,那么在不跟着书上打完代码就直接构建自己的项目时,一定要打开书籍配套源码,因为好多东西章节没有讲那么细,必须查看源码才能知道一些细节。具体转置代码如下:

2024-02-28 23:36:01 242

原创 D3D调试必看-小白PIX篇

下面是一个常规顶点缓冲区的示例,如果你的界面中缺少了一些属性,比如你预设了纹理坐标却没有显示,说明你的顶点输入布局可能写错了,可以见检查一下纹理坐标的偏移值是否正确。3. 由于一些原因,它需要你开启Windows的开发者模式,才能对帧进行捕获,下面介绍Win11打开开发者模式的方法:打开Windows开始菜单,再打开设置,在设置的搜索栏按下图搜索。如果以上二者都正确,那么可以点击CBV检查不同的常量缓冲区中的数据是否正确。点击上图中搜索到的选项,就会看到下图的画面,将开发者模式打开即可。

2024-02-27 03:38:48 1008

原创 PBR渲染从理论到实现

PBR即基于物理的渲染(Physically Based Rendering),它指的是在不同程度上基于现实世界物理理论所提出的渲染技术的集合。PBR指基于物理的渲染模型,其渲染效果是基于物理的渲染。总之由于PBR更符合物理学规律,因此其渲染效果比Phong和Blinn-Phong都更真实。除了渲染真实性更好外,PBR也减轻了美术师的负担,以往美术师在建模时必须依据经验对模型材质的数据进行反复调整。若使用PBR模型,美术师可以直接查找现实世界不同材质的物理参数作为依据。

2024-02-20 23:15:26 939

原创 Windows Sockets 2 笔记

MSDN原文链接。Socket技术简介视频(看前半部分即可)。Windows Sockets 2简写为Winsock,它的作用是使程序员能够创建高级 Internet(互联网) 、Intranet(内联网) 和其他种类支持网络的应用程序。Winsock使得程序能够跨网络传输应用程序数据,并且独立于所使用的网络协议。借助Winsock,程序员可以访问高级Microsoft Windows网络功能,例如多播和服务质量等。

2023-12-29 20:44:56 1333

原创 分享网盘书籍PDF资源

实时碰撞检测算法技术游戏物理引擎开发C++ Primer , 第5版 中文版[Windows程序设计(第5版,珍藏版)].Charles.Petzold.扫描版逐梦旅程 WINDOWS游戏编程之从零开始 - 毛星云

2023-12-25 19:13:29 488 1

原创 C++并发编程实战-提炼总结-第二章:线程管控

【代码】C++并发编程实战-提炼总结-第二章:线程管控。

2023-12-08 16:52:37 434

原创 C++常见容器实现原理

【代码】C++常见容器实现原理。

2023-10-25 20:37:12 385 1

原创 DirectX12_Windows_GameDevelop_4:Direct3D应用程序框架

【代码】DirectX12_Windows_GameDevelop_4:Direct3D应用程序框架。

2023-10-09 15:27:39 295

原创 DirectX12_Windows_GameDevelop_3:Direct3D的初始化

【代码】DirectX12_Windows_GameDevelop_3:Direct3D的初始化。

2023-10-07 22:00:31 1596

原创 DirectX12_Windows_GameDevelop_1:向量代数

向量是一种具备大小和方向的量。普通的浮点数如 (3.0) 可以看作是一维向量,屏幕上的坐标如 (200,400) 可以看作是二维向量,三维空间中的点如 (100,200,500) 可以看作是三维向量。向量表示一种方向性,它也有自身的大小,向量还具有平移性。向量具有起点和终点,当然这都是可以平移的。如果一个向量的起点位于坐标系的原点,那么我们就说这个向量位于标准位置。

2023-09-29 18:55:02 104

原创 DirectX12_Windows_GameDevelop_0:启程之旅

Direct3D是微软公司DirectX SDK集成开发包中的组成部分,主要作用是编写高性能3D图形应用程序,Direct3D 是一个渲染库。Direct3D 12是一款为运行在现代图形硬件上各种的Windows平台(Windows桌面版、手机版和Xbos One)编写的高性能3D图形应用程序渲染库。Direct3D是一种底层库,尤其是Direct3D 12,它实现了前所未有的更底层的硬件抽象,削减驱动层的功能交给我们开发者,以实现性能的提升。

2023-09-28 17:43:05 164

原创 游戏开发之路

【代码】游戏开发之路。

2023-09-20 14:34:59 91

原创 Jacobi雅克比算法计算特征向量-全网最简单

【代码】Jacobi雅克比算法计算特征向量-全网最简单。

2023-07-29 22:00:09 1616 3

原创 OpenGL安装配置-全网最简单教程

OpenGL开发的第三方库。

2023-07-20 19:27:12 1708

原创 第四章:包围体

轴对齐包围盒(AABB)是应用最为广泛的包围体之一。在3D空间中,AABB是一个6面盒状长方体(在2D空间中是包含四条边的矩形),且其面法线皆平行于给定的坐标轴。AABB的最大特点是能够实现快速的相交测试,即仅执行相应坐标值之间的比较。1.坐标值上最小值和最大值Point min;//长方体坐标最小值 Point max;//长方体坐标最大值 };Point min;//长方体坐标最小值 float d [ 3 ];//直径范围:dx、dy、dz, max=min+d。3.中心点和轴向半径。

2023-07-20 14:21:56 175

原创 Java自制绘图软件

这时一个开源的绘图软件,您可以直接访问到工程项目源代码,本文将展示它的一些基本功能

2023-06-12 16:11:07 1475 6

原创 数学建模经历-程序人生

引言即将大四毕业(现在大三末),闲来无事(为了冲粽子)就写一篇记录数学建模经历的博客吧。其实经常看到一些大佬的博客里会有什么"程序人生"、"人生感想"之类的专栏,但是由于我只是一个小趴菜没什么阅历因此也就没有写过类似的博客。今天写一篇关于数学建模的博客,为大家奉献上我一点点微不足道的经验。本文仅贡献给每一个学弟学妹,大佬勿扰。本文分为四个部分: 第一部分展示了我的数学建模职业生涯。 第二部分讲解了我是如何学习数学建模的。 第三部分给出了我学习数学建模的所有资料。一、比赛经历1. 1 获

2023-06-12 13:58:22 1029 2

原创 SIMD加速矩阵运算

【代码】SIMD加速矩阵运算。

2023-06-12 08:55:39 3898 1

原创 全网最简单的软渲染器

实现一个包含面剔除功能的软光栅渲染器,附带实现效果和工程源码,本系列将一直更新,欢迎您的参与!

2023-06-12 02:13:58 465

原创 如何快速判断一个数是否为16的倍数

【代码】如何快速判断一个数是否为16的倍数。

2023-06-03 21:11:01 271

原创 C++SIMD初试

测试SIMD运算效率代码如下:#include <iostream>#include "PxPhysicsAPI.h"#include <immintrin.h>#include <stdio.h>// 打印向量pvoid _mm256_print_epi32(__m256i p){ int* p1 = (int*)&p; std::cout << p1[0] << " " << p1[1]

2023-06-03 19:15:48 204

原创 PhysX5-下载和配置

注意PhysX5中的脚本需要使用到Cmake,如果你执行脚本后生成的文件夹里是空的,那么你应该考虑安装cmake,并且你需要把cmake的bin目录地址添加到你的系统环境变量PATH中。

2023-06-01 20:26:07 256 1

原创 Piccolo傻瓜式环境配置

首先下载Piccolo的代码Piccolo下载网址点击Code然后点击Download ZIP。可能有点慢,总共要下139M。 下载CMAKECMAKE下载网址下载完后安装CMAKE构建环境将下来的Piccolo-main压缩包解压为Piccolo-main文件夹。打开CMAKE,如下图进行目录选择,第一个目录选你解压出来的文件夹,第二个目录选择解压出来的文件夹下的bin目录。然后点击Configure,等下面没有消息显示了然后再点击Generate,最后打开那个bin目录。

2023-05-29 19:45:54 886 1

原创 C++第七章:类

程序员们常把运行其程序的人称作用户(user)。类似的,类的设计者也是为其用户设计并实现类的一个人。显然类的用户是程序员,而非应用程序的最终使用者。当我们设计类的接口时,应该考虑如何才能使得类易于使用。而当我们使用类时,不应该顾及类的实现机理。作为一个设计良好的类,既要有直观且易于使用的接口,也必须具备高效的实现过程。书籍类源代码:// 返回数据的唯一编号 std :: string isbn() const {

2023-05-28 11:49:26 822

原创 C++第六章:函数

一个典型的函数包括以下部分:返回类型(return type)、函数名字、由0个或多个形参(parameter)组成的列表、函数体。我们通过调用运算符来执行函数,调用运算符的形式是一对圆括号,它作用于一个表达式,该表达式是函数或者指向函数的指针。圆括号之内是一个用逗号隔开的实参列表,我们用实参初始化函数的形参。调用表达式的类型就是函数的返回类型。使用函数的示例:// 函数fact计算n的阶乘 int fact(int n) {

2023-05-26 13:48:03 1297

原创 C++第三章:字符串、向量和数组

如何初始化类的对象是由类本身决定的。一个类可以定义很多种初始化对象的方式,只不过这些方式之间必须有所区别:或者是初始值的数量不同,或者是初始值的类型不同。初始化string对象最常用的方法如下:初始化格式初始化结果string s1;空字符串st的值(st为字符串)st的值(st为字符串)valuevaluen个c注意字符串字面值"value"严格来说其字符串最后还有一个’\0’表示字符串的结束,当将字符串字面值赋值给string对象时它会抛弃’\0’。

2023-05-25 16:15:49 957

原创 C++第二章:变量和基本内置类型

实例代码:");return 0;基本形式:首先是类型说明符,随后紧跟一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。列表中每个变量名的类型都由说明符指定,定义时还可以位一个或多个变量赋初值。string是一种可变长字符序列的数据类型,在C++库中提供了几种初始化string类对象的方法,其中一种就是上文中把字面值拷贝给string对象。通常情况下,对象是指一块能存储数据并具有某种类型的内存空间。

2023-05-23 21:08:04 821 1

原创 C++第一章:开始

我们通过定义一个类(class)来定义自己的数据结构,一个类定义了一个类型,以及与其相关联的一组操作。类类型(class type)。为了使用类必须了解三件事情:(1)类的名称是声明(2)类是在哪里定义的(3)类支持什么操作一般而言,类的作者决定了类类型对象上可以使用的所有操作。当我们调试程序时,可能需要反复从键盘输入,这是非常枯燥的。大多数操作系统支持文件重定向,这种机制允许我们将标准输入和标准输出与命名文件关联起来。

2023-05-22 13:15:53 480

原创 GAMSE101-作业1

运行程序如果出现缺少.dll,就把对应的文件放到你VS STDIO的运行目录下(别放错了,不知道放哪就在每个Debug放一个)。

2023-05-20 19:07:27 113

原创 计算机图形学-GAMES101-13

光沿着直线传播。光线和光线不会发生碰撞。光线追踪运用光路的可逆性。光线从光源发出,会发生反射、折射,光线追踪就是模拟这个过程。追踪:从终点(眼睛或相机)开始,连接到视口上的每一个像素。连接会产生一条光路,我们沿着每条光路追踪场景中的物体。如果追踪到某个物体,我们再将物体和光源进行连线,判断物体是否能被光源照亮。如果物体能被光源照亮,那么我们就可以计算这条光路上的能量,随着进行着色。

2023-05-20 16:51:26 651

原创 计算机图形学-GAMES101-12阴影

硬阴影就是被本影挡住的部分,而软阴影是被部分光源照亮。如果要做出软阴影,必须使用具有一定体积大小的点光源。Shadow Mapping使用多大的分辨率?Shadow Mapping需要更多的计算。硬阴影和软阴影有什么区别?只能计算硬阴影(理论上)

2023-05-20 13:34:16 697

原创 计算机图形学-GAMES101-11

如上图所示,我们使用黑色的起点-终点和两个蓝色的弯曲控制点来表示一条曲线。要注意的是,我们想要连接起来的曲线连续。因为我们知道Bezaer曲线在起点和终点处的切线方向分别都等于它们和对应控制点的连线,因此我们需要使得前一条曲线的终点和对应控制点的连线经过后一条曲线起点的控制点,当然这里说的两条曲线分别的终点和起点其实是一个点,我们要求这三点共线,并且中间拿个点应该是两个控制点的终点,这样才能保证切线的大小相同。使用三维空间中的点,即可插值出三维空间中的曲线。以上保证了曲线的C1连续,工业上使用C2连续。

2023-05-20 12:59:58 1106

原创 计算机图形学-GAMES101-10

原模型网格->逐面Shading->逐像素Phong Shading->纹理贴图->换个纹理再贴图->环境光照。

2023-05-20 11:18:53 790

原创 计算机图形学-GAMES101-9

Nearset是一种纹理的过滤方式,它表示当屏幕上的像素点插值出来的纹理坐标为(x,y)时,找到纹理贴图中与(x,y)距离最近的像素点,把贴图中像素点的属性赋值给屏幕像素点。问题分析:当在远处时,一个像素点内部包含了一大块纹理区域,这一大块纹理区内颜色的变化是很快的,而我们只使用一个采样点区采样它,因此我们得到的颜色值是不足以代表这一整块区域的,也因此我们的采样频率远低于信号的频率,就会发生走样。我们根据像素的纹理坐标,找到它四周的纹理像素点,根据纹理坐标到纹理像素点之间水平和竖直的相对距离进行插值。

2023-05-19 20:28:55 1239

原创 CG-3D渲染器-0.1

需要注意的一件事是,如果我们要把x轴缩放0.5倍,我们通常会传入的scale_size为(1,0,0),也就是说我们默认认为传入0的缩放倍率表示不进行缩放,因此我们需要判断scale_size的分量如果为0则设置为1(缩放倍率为1即不缩放)。当旋转轴axis的起点pos不为原点时,我们先对原模型矩阵进行平移,将pos移到原点(0,0,0)上,使得旋转轴axis过原点。镜像矩阵我们可以认为不进行缩放,即倍率只能为1或-1,因此我们将参数axle设为整数int类型,这样判断其值是否为0而不进行操作,也很简单。

2023-05-19 16:42:21 933

原创 Eigen的配置和使用(GAMES101-0作业)

【代码】Eigen的配置和使用(GAMES101-0作业)

2023-05-18 11:57:15 372

原创 计算机图形学-GAMES101-8

渲染管线的流程如下图所示。场景种的模型是如何定义的?模型先定义了一系列顶点,然后定义了每个三角形分别对应的顶点,这一只需要把点按照三角形连接起来就变成了模型。首先我们将所有顶点输入到三维空间中,然后进行视图变换、投影变换、视口变换,将三维空间中的顶点映射到了二维屏幕空间中。然后我们再根据三角形的顶点信息,分别连接每一个三角形的顶点。当屏幕上存在许许多多的二维三角形时,我们遍历每一个三角形,按照三角形的包围盒去对像素进行光栅化,即对每个像素进行采样、进行深度测试,找到实际能显示在屏幕上的像素。

2023-05-17 19:43:29 431

Unity基于Socket网络通信的大乱斗游戏

Unity基于Socket网络通信的大乱斗游戏

2023-03-21

Unity 标准资源包 Unity Standard Assets

Unity 标准资源包 (Standard Assets) 在unity的资源商店已下架,无法通过Unity hub 和Unity资源商店进行下载,许多书籍、视频等教程使用了Unity 的标准资源包,因此为您分享此文件。

2023-03-20

unity聊天室,基于Socket网络编程

基于Socket网络编程的unity聊天客户端实现,独立运行ClientState类为聊天服务端,导出unity项目运行多个exe项目为客户端,通过客户端进行聊天。

2023-03-19

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

TA关注的人

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