游戏人生
首页
(current)
GameDevTools
登陆
|
注册
个人中心
注销
游戏引擎 浅入浅出
Introduction
Introduction
前言
前言
1. 游戏引擎框架介绍
1. 游戏引擎框架介绍
1.1 Unity的组成
1.2 游戏引擎组成
2. Opengl开发环境搭建
2. Opengl开发环境搭建
2.1 Opengl到底是什么
2.2 搭建Opengl开发环境
2.3 使用VisualStudio开发
3. 绘制多边形
3. 绘制多边形
3.1 画个三角形
3.2 画个正方形
3.3 画个立方体
4. 着色器
4. 着色器
4.1 Unity Shader和OpenGL Shader
4.2 顶点着色器
4.3 片段着色器
5. 绘制贴图
5. 绘制贴图
5.1 颜色和贴图
5.2 贴图文件介绍
5.3 CPU与GPU的通信方式
5.4 使用stb_image解析图片
5.5 绘制带贴图的立方体盒子
5.6 压缩纹理
5.7 图片压缩工具
5.8 使用压缩纹理
5.9 DXT压缩纹理扩展
6. 索引与缓冲区对象
6. 索引与缓冲区对象
6.1 顶点索引
6.2 缓冲区对象
6.3 OpenGL Core Profile
6.4 顶点数组对象
7. 绘制Mesh和材质
7. 绘制Mesh和材质
7.1 导出Mesh文件
7.2 使用Mesh文件
7.3 Shader文件创建与使用
7.4 创建材质
7.5 使用材质
7.6 MeshRenderer
8. 绘制静态模型
8. 绘制静态模型
8.1 Blender安装与配置
8.2 Blender制作模型
8.3 Blender Python设置开发环境
8.4 Blender Python创建物体
8.5 Blender Python导出顶点数据
8.6 加载导出的Mesh
9. 基于组件开发
9. 基于组件开发
9.1 基于RTTR实现反射
9.2 实现GameObject-Component
10. 相机
10. 相机
10.1 最简单的相机
10.2 多相机渲染
10.3 相机排序
10.4 CullingMask
11. 控制系统
11. 控制系统
11.1 键盘控制
11.2 鼠标控制
12. 拆分引擎和项目
12. 拆分引擎和项目
13. 绘制文字
13. 绘制文字
13.1 TrueType简介
13.2 绘制单个字符
13.3 绘制多个文字
13.4 彩色字
14. GUI
14. GUI
14.1 正交相机
14.2 UIImage
14.3 UIMask
14.4 UIText
14.5 UIButton
15. 播放音效
15. 播放音效
15.1 播放2D音效
15.2 播放3D音效
15.3 使用FMOD Studio音频引擎
16. Profiler
16. Profiler
16.1 初识easy_profiler
16.2 集成easy_profiler
17. 嵌入Lua
17. 嵌入Lua
17.1 Sol2与C++交互
17.2 更加友好的Lua框架设计
17.3 引擎集成sol2
17.4 调试Lua
18. 骨骼动画
18. 骨骼动画
18.1 Blender制作骨骼动画
18.2 Blender导出骨骼动画
18.3 解析骨骼动画
18.4 矩阵的主序
19. 骨骼蒙皮动画
19. 骨骼蒙皮动画
19.1 骨骼蒙皮动画实现
19.2 骨骼权重
19.3 Blender蒙皮刷权重
19.4 Blender导出蒙皮权重
19.5 加载权重文件
20. 解析FBX文件
20. 解析FBX文件
20.1 导出Mesh
20.2 导出骨骼动画
20.3 导出权重
20.4 渲染骨骼蒙皮动画
21. 多线程渲染
21. 多线程渲染
21.1 GLFW多线程渲染
21.2 基于任务队列的多线程渲染
21.3 完全异步的多线程模型
21.4 引擎支持多线程渲染
22. Physx物理引擎
22. Physx物理引擎
22.1 Physx实例-小球掉落
22.2 物理材质
22.3 碰撞检测
22.4 连续碰撞检测
22.5 场景查询
22.6 引擎集成Physx
23. 经典光照
23. 经典光照
23.1 环境光
23.2 漫反射光照模型
23.3 镜面高光光照模型
23.4 高光贴图
23.5 Shader结构体
23.6 Uniform Buffer Object
23.7 方向光
23.8 点光源
23.9 多光源
24. 引擎编辑器的实现
24. 引擎编辑器的实现
24.1 分析Godot引擎编辑器
24.2 FBO RenderTexture GameTurbo DLSS
24.3 ImGui介绍与使用
24.4 分离引擎核心层和应用层
24.5 使用ImGui实现引擎编辑器
24.6 Hierarchy与Inspector面板
25. Shadow Mapping
25. Shadow Mapping
25.1 深度图
25.2 简单阴影
88. VSCode扩展开发与定制
88. VSCode扩展开发与定制
88.1 第一个VSCode扩展程序
88.2 从源码编译VSCode
88.3 打包VSCode内置扩展
88.4 打包LuaHelper到Code-OSS
89. Doxygen生成API文档
89. Doxygen生成API文档
90. GPU分析工具
90. GPU分析工具
90.1 RenderDoc分析不显示bug
98. SubstancePainter插件开发
98. SubstancePainter插件开发
98.1 SP插件开发环境
98.2 开发SP功能性插件
98.3 开发SP渲染插件
99. Toolbag插件开发
99. Toolbag插件开发
99.1 插件开发环境
99.2 API介绍
99.3 命令行调用Toolbag
99.4 更多实现
99.5 代码参考
附录1. Wwise音频引擎
附录1. Wwise音频引擎
1.1 Wwise名词概念
1.2 Wwise制作音效导出SoundBank
1.3 集成Wwise
1.4 封装Wwise播放3D音效
1.5 Wwise性能分析器介绍
1.6 猎人开发后记
代码资源下载
点我下载
Github
点赞、收藏、关注
目录
<< 21.4 引擎支持多线程渲染
22.1 Physx实例-小球掉落 >>
## 22. Physx物理引擎 ```text 「游戏引擎 浅入浅出」是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book ```  Unity中的碰撞 、射线检测、载具等物理相关功能都是Physx物理引擎提供的。  ### 1. 物理引擎介绍 物理引擎就是干物理相关的事情。 车子能向前移动,是因为发动机提供动力,车轮与地面之间有摩擦力。 人能站在地面,是因为受到往下的重力,人与地面可以简单看成刚体而不至于人穿透地面。 衣服会遮住身体,也是因为受到往下的重力,不然别人就会看到你的啤酒肚。 在游戏中,借助物理引擎进行物体之间的力运算,来获取正确的结果。 不过想用计算机来模拟真实世界的表现是不可能的。 当你将一个钉子敲进墙里面,这中间有多少个物体发生了力运算?从大的来看,是一个钉子与墙之间的挤压。小一点来看,是分子之间。再小一点,原子、质子、夸克…… 一克铁估计有150万亿亿个铁原子,钉钉子这么个动作,就至少有150万亿亿个单位需要参与物理运算,什么计算机这么牛逼? 所以物理引擎做的是物理仿真,就是尽量做到真实效果。 在游戏里面,钉子只会被看作一个圆柱体,墙只会看作立方体,不会在往下去追求分子、原子之间的力。 衣服可能也就是一个圆柱体,所以在游戏中能看到各种奇怪的表现,例如反重力裙子、反重力头发、人物鬼畜等。  ### 2. Physx物理引擎 目前市面上的物理引擎主要有:bullet、havok、Physx。 Physx是NVIDIA家的,现在开源了,有大腿谁不抱,Unity中用的就是physx,UE好像也是,所以我也来用这个。 Physx官网:`https://developer.nvidia.com/physx-sdk` Physx Github:`https://github.com/NVIDIAGameWorks/PhysX` Physx功能非常多,而且是NVIDIA家的,在GPU运算方面能做很多事情,不过对游戏来说,就只用到里面的基础物理功能,做个碰撞检测之类的,复杂一点的用到载具系统,再复杂一点的布料运算,GPU运算几乎是不会去碰,游戏毕竟是要跨平台的。 所以我们也只学一点Physx简单的就行了,学个碰撞检测就行,载具后面有需求再看Physx的实例吧。 ### 3. 编译Physx 参考Physx自带的文档,每个平台都有单独的文档。  先把工程克隆下来,从我的仓库克隆吧,我修复了一点bug。 Github:`https://github.com/ThisisGame/PhysX` 然后编译是分平台的。 #### 3.1 Windows编译Physx <font color=red>先把电脑上的杀毒软件都卸载掉!!!</font> <font color=red>先把电脑上的杀毒软件都卸载掉!!!</font> <font color=red>先把电脑上的杀毒软件都卸载掉!!!</font> 安装CMake:`https://github.com/Kitware/CMake/releases/download/v3.22.3/cmake-3.22.3-windows-x86_64.msi` 注意勾选第二个选项,将CMake添加到环境变量。  安装Python:`https://www.python.org/ftp/python/3.8.2/python-3.8.2rc2-amd64.exe`  注意勾选最后的选项,将Python添加到环境变量。 运行`generate_projects.bat`,输入`13`选择VisualStudio2019编译。  生成的VS工程存放在`physx\compiler\vc16win64`。  可能会出现错误`No CMAKE_C_COMPILER could be found`,如下:<a id="antiCollectorAdTxt" href="https://github.com/ThisisGame/cpp-game-engine-book">「游戏引擎 浅入浅出」是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book</a> ```bash I:\Github Repositories\PhysX\physx>generate_projects.bat I:\Github Repositories\PhysX\physx>exit /b 0 Preset parameter required, available presets: (0) android <--- Android-19, armeabi-v7a with NEON PhysX SDK (1) vc12win32 <--- VC12 Win32 PhysX general settings (2) vc12win64 <--- VC12 Win64 PhysX general settings (3) vc14win32 <--- VC14 Win32 PhysX general settings (4) vc14win64 <--- VC14 Win64 PhysX general settings (5) vc15uwp32 <--- VC15 UWP 32bit PhysX general settings (6) vc15uwp64 <--- VC15 UWP 64bit PhysX general settings (7) vc15uwparm32 <--- VC15 UWP 32bit PhysX general settings (8) vc15uwparm64 <--- VC15 UWP ARM 64bit PhysX general settings (9) vc15win32 <--- VC15 Win32 PhysX general settings (10) vc15win64 <--- VC15 Win64 PhysX general settings Enter preset number: 10 Running generate_projects.bat vc15win64 I:\Github Repositories\PhysX\physx>exit /b 0 Using preset xml: buildtools/presets/public/vc15win64.xml Target platform: win64 using compiler: vc15 PM_CMakeModules_PATH: I:/Github Repositories/PhysX/physx/../externals/CMakeModules PM_PATHS: I:/Github Repositories/PhysX/physx/../externals/CMakeModules;I:/Github Repositories/PhysX/physx/../externals/targa Cmake: cmake.exe Not searching for unused variables given on the command line. -- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.17134. -- The C compiler identification is unknown -- The CXX compiler identification is unknown CMake Error at CMakeLists.txt:34 (project): No CMAKE_C_COMPILER could be found. CMake Error at CMakeLists.txt:34 (project): No CMAKE_CXX_COMPILER could be found. -- Configuring incomplete, errors occurred! See also "I:/Github Repositories/PhysX/physx/compiler/vc15win64/CMakeFiles/CMakeOutput.log". See also "I:/Github Repositories/PhysX/physx/compiler/vc15win64/CMakeFiles/CMakeError.log". ``` 大概率是杀毒软件的问题,<font color=red>先把电脑上的杀毒软件都卸载掉!!!</font> 用vs2019打开`PhysXSDK.sln`,编译整个解决方案,运行`SnippetHelloWorld`,按空格发射炮弹。  在项目属性中,可以找到生成的Physx动态库存放在`physx\bin\win.x86_64.vc142.mt\debug`。  #### 3.2 macOS编译Physx 需要macOS 10.13 、XCode 10.1及以上版本,CMake3.12及以上版本,Python2.7.6及以上版本。 我当前开发机系统是macOS 12.2.1,系统中都已经有Python了,无需自己安装。 XCode到AppStore下载最新的,CMake下载后,按下图复制命令安装控制台工具。   安装好所需软件后,在控制台执行`generate_projects.sh`生成xcode工程。  成功后,最后一行显示了xcode工程存放目录。  打开控制台,切换到xcode项目所在目录,执行编译命令: ```bash xcodebuild -project PhysXSDK.xcodeproj -alltargets -configuration debug ``` 编译成功后,Physx库和实例都存放在`physx/bin/mac.x86_64/debug `。 
<< 21.4 引擎支持多线程渲染
22.1 Physx实例-小球掉落 >>
12
代码资源下载
点我下载
Github
点赞、收藏、关注
目录
Introduction
Introduction
前言
前言
1. 游戏引擎框架介绍
1. 游戏引擎框架介绍
1.1 Unity的组成
1.2 游戏引擎组成
2. Opengl开发环境搭建
2. Opengl开发环境搭建
2.1 Opengl到底是什么
2.2 搭建Opengl开发环境
2.3 使用VisualStudio开发
3. 绘制多边形
3. 绘制多边形
3.1 画个三角形
3.2 画个正方形
3.3 画个立方体
4. 着色器
4. 着色器
4.1 Unity Shader和OpenGL Shader
4.2 顶点着色器
4.3 片段着色器
5. 绘制贴图
5. 绘制贴图
5.1 颜色和贴图
5.2 贴图文件介绍
5.3 CPU与GPU的通信方式
5.4 使用stb_image解析图片
5.5 绘制带贴图的立方体盒子
5.6 压缩纹理
5.7 图片压缩工具
5.8 使用压缩纹理
5.9 DXT压缩纹理扩展
6. 索引与缓冲区对象
6. 索引与缓冲区对象
6.1 顶点索引
6.2 缓冲区对象
6.3 OpenGL Core Profile
6.4 顶点数组对象
7. 绘制Mesh和材质
7. 绘制Mesh和材质
7.1 导出Mesh文件
7.2 使用Mesh文件
7.3 Shader文件创建与使用
7.4 创建材质
7.5 使用材质
7.6 MeshRenderer
8. 绘制静态模型
8. 绘制静态模型
8.1 Blender安装与配置
8.2 Blender制作模型
8.3 Blender Python设置开发环境
8.4 Blender Python创建物体
8.5 Blender Python导出顶点数据
8.6 加载导出的Mesh
9. 基于组件开发
9. 基于组件开发
9.1 基于RTTR实现反射
9.2 实现GameObject-Component
10. 相机
10. 相机
10.1 最简单的相机
10.2 多相机渲染
10.3 相机排序
10.4 CullingMask
11. 控制系统
11. 控制系统
11.1 键盘控制
11.2 鼠标控制
12. 拆分引擎和项目
12. 拆分引擎和项目
13. 绘制文字
13. 绘制文字
13.1 TrueType简介
13.2 绘制单个字符
13.3 绘制多个文字
13.4 彩色字
14. GUI
14. GUI
14.1 正交相机
14.2 UIImage
14.3 UIMask
14.4 UIText
14.5 UIButton
15. 播放音效
15. 播放音效
15.1 播放2D音效
15.2 播放3D音效
15.3 使用FMOD Studio音频引擎
16. Profiler
16. Profiler
16.1 初识easy_profiler
16.2 集成easy_profiler
17. 嵌入Lua
17. 嵌入Lua
17.1 Sol2与C++交互
17.2 更加友好的Lua框架设计
17.3 引擎集成sol2
17.4 调试Lua
18. 骨骼动画
18. 骨骼动画
18.1 Blender制作骨骼动画
18.2 Blender导出骨骼动画
18.3 解析骨骼动画
18.4 矩阵的主序
19. 骨骼蒙皮动画
19. 骨骼蒙皮动画
19.1 骨骼蒙皮动画实现
19.2 骨骼权重
19.3 Blender蒙皮刷权重
19.4 Blender导出蒙皮权重
19.5 加载权重文件
20. 解析FBX文件
20. 解析FBX文件
20.1 导出Mesh
20.2 导出骨骼动画
20.3 导出权重
20.4 渲染骨骼蒙皮动画
21. 多线程渲染
21. 多线程渲染
21.1 GLFW多线程渲染
21.2 基于任务队列的多线程渲染
21.3 完全异步的多线程模型
21.4 引擎支持多线程渲染
22. Physx物理引擎
22. Physx物理引擎
22.1 Physx实例-小球掉落
22.2 物理材质
22.3 碰撞检测
22.4 连续碰撞检测
22.5 场景查询
22.6 引擎集成Physx
23. 经典光照
23. 经典光照
23.1 环境光
23.2 漫反射光照模型
23.3 镜面高光光照模型
23.4 高光贴图
23.5 Shader结构体
23.6 Uniform Buffer Object
23.7 方向光
23.8 点光源
23.9 多光源
24. 引擎编辑器的实现
24. 引擎编辑器的实现
24.1 分析Godot引擎编辑器
24.2 FBO RenderTexture GameTurbo DLSS
24.3 ImGui介绍与使用
24.4 分离引擎核心层和应用层
24.5 使用ImGui实现引擎编辑器
24.6 Hierarchy与Inspector面板
25. Shadow Mapping
25. Shadow Mapping
25.1 深度图
25.2 简单阴影
88. VSCode扩展开发与定制
88. VSCode扩展开发与定制
88.1 第一个VSCode扩展程序
88.2 从源码编译VSCode
88.3 打包VSCode内置扩展
88.4 打包LuaHelper到Code-OSS
89. Doxygen生成API文档
89. Doxygen生成API文档
90. GPU分析工具
90. GPU分析工具
90.1 RenderDoc分析不显示bug
98. SubstancePainter插件开发
98. SubstancePainter插件开发
98.1 SP插件开发环境
98.2 开发SP功能性插件
98.3 开发SP渲染插件
99. Toolbag插件开发
99. Toolbag插件开发
99.1 插件开发环境
99.2 API介绍
99.3 命令行调用Toolbag
99.4 更多实现
99.5 代码参考
附录1. Wwise音频引擎
附录1. Wwise音频引擎
1.1 Wwise名词概念
1.2 Wwise制作音效导出SoundBank
1.3 集成Wwise
1.4 封装Wwise播放3D音效
1.5 Wwise性能分析器介绍
1.6 猎人开发后记