当前位置: 首页 > news >正文

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看

2024年 5月20日-6月4日:攻克2D物理引擎。
2024年 6月4日-6月13日:攻克《3D数学基础》。
2024年 6月13日-6月20日:攻克《3D图形教程》。
2024年 6月21日-6月22日:攻克《Raycasting游戏教程》。
2024年 6月23日-7月1日:攻克《Windows游戏编程大师技巧》。
2024年 7月2日-7月6日:攻克《雅达利2600汇编游戏开发》。
2024年 7月7日-7月11日:攻克《x86/x64汇编语言》。
2024年 7月11日-7月22日:学习《3D游戏编程大师技巧》(阶段性)。
2024年 7月14日-7月18日:学习《游戏引擎架构》(完成)。
2024年 7月23日-7月30日:攻克Python语言学习。
2024年 7月31日-8月5日:攻克《3D游戏编程大师技巧》。
2024年 9月10日-9月20日:攻克游戏动画绑定
2024年 10月27日-10月31日:攻克《C++大师教程》
2024年 10月21日-11月02日:攻克《DirectX11教程》
2024年 11月02日-11月06日:攻克《CMake教程》
2024年 11月06日-11月10日:攻克《Vulkan教程》
2024年 11月11日-11月13日:攻克《OpenGL教程》

(一)学习笔记
真是没有想到,20多个小时的《OpenGL教程》,我只花了三天就学完了。
这次的OpenGL教程讲了非常多的内容,比如阴影,我在之前的教程中几乎都没看到过。以前我学Shader的时候,也是使用Unity预置的东西。
果然好教程就是学起来轻松愉快。当然,加上OpenGL的确比其它的引擎更加容易理解。《Vulkan教程》只有5小时教程,但是我学了一周,当然,这个是因为我每天只花半天时间学习的原因。
这段时间因为肩膀受伤,不能继续建模,只能休息一周恢复一下,下周才开始建模。所以有整天的时间来学习《OpenGL》。没想到学得这么快。
我从前也并不是一个学习非常牛逼的人,最好的成绩也只是班里面前十而已。而且是偶尔,不是能够保持。
我记得年轻的时候看很多学霸他们学东西,都觉得非常羡慕,而且觉得不可思议。他们怎么能够学那么多东西的?
后来步入社会,被社会上那些庸俗的理念影响,说什么人35岁之后学习能力就不行了,而且正好那时候我是抑郁症最严重的时期,所以觉得世界一片昏暗。
我觉得我改变思维的方式是从“烧水学习法”开始的。当然这可能有其它名称,或者某个著名的学习法演化过来的,但是我是从“烧水学习法”才开始学习“学习”。
没错,“学习”本身也是一种需要学习的东西。而再也没有什么比“学习”这样技能掌握纯熟之后,给人带来这么大的变化。
“对标”这个概念从那时候起就刻在我的心里面,我任何时候都用对标的思维去思考,去学习。
事情就是这样的:学习在我看来就是这样,如果你用错误的学习方法去学习,你只会得到无限的痛苦。而用正确的方法去学习,你不仅学到了东西,而且也学到了学习。
你的技能和知识体系是相互作用的。你学得越多,你就学得越快。这前面一个学是指你的知识,后面一个学是指你的学习能力。
其实从5月到现在,差不多刚好半年。但我感觉这半年学的东西,比我过去三年加起来还要多。


(二)为什么要学习基础
我现在如痴如狂地学习3D游戏的基础,把一切需要掌握的知识都有教无类地学习(虽然这个成语不是这么用的,但我就觉得好用,把自已的心态转化一下,你选择学什么,其实就是你做为老师,要教给你自已什么,别管你以前是什么人,比如说你是程序员,难倒就不能学建模吗?)。
回忆起我几年前做Unity的时候,的确是一种“眼高手低”的状态。举个例子,我当时做打击系统的时候,还给自已的受击部位做了材质,比如说金属,木材,这些东西被打击的时候,会有不同的反应,音效,很合理,也很牛逼。但是我当时的技术水平并不足以驾驭这些酷炫的东西。
现在我只想做一个普普通通的动作游戏,能打架,能探索,总之就是很普通。但是我却花了很多很多心思来钻研底层的技术,甚至自已去做引擎。自已做引擎倒不一定是得用自已的引擎,只是这个学习的过程对于夯实自已的基础太有用了。
希望我这条路会有它的价值。

(三)不要犯以前的错误了
做Unity的时候我犯下一个大错,导致我的软件工程灾难,这个在我做引擎的时候不能再犯了。
就好比,我们想象这样一个场景,如果我的引擎是要同时支持DirectX12和Vulkan,那么,我在做这个项目的时候,是不是要考虑以后兼容性的问题?所以在一开始的设计之中,我的系统就应该支持,而不是像牛仔一样编程。比如说我会考虑使用中性的glm库,而不是使用DirectXMath库。
如果自已的类过多依附于DirectX,那么以后兼容就会有问题。
但是,要实现这个的前提是,你对于两个系统,以及你做的系统要有充分的了解。
我以前用了十年的Java,我对于我要做的东西都非常清楚,所以我在做Unity的时候,把Java中系统构架的惯性思维都用到了Unity的开发中,给自已构架了一个自以为健壮,当创造之后,就具备工业生产能力的系统。我在和朋友聊天的时候,还吹嘘自已不会像其它独立游戏开发者一样返工,因为我做的系统就是“Productivity Ready”的。
但是我没有想到Unity里面全是坑。如果就是做点小游戏,或者说在Unity的“舒适区”做游戏,也许没什么问题。但是,一但想要做点跳出这个舒适圈的东西,大坑就一个接着一个来。我自以为“无敌”的系统,全部都是破绽。
我想做一个开放世界,真正的,牛逼的开放世界 。
我不是想做一个那种别人一看就是模板的二流游戏,不想让别人说,你这游戏拿XX引擎的素材一拼就能做出来。
所以我痛定思痛,转过身来打自已的基础,甚至自已学建模。我其实最初也没想过自已做引擎的,但是这真的就像是《阿甘正传》里面的故事,你都跑了这么远了,何不跑得更远一点呢?
但是,我不能再犯以前的错误了。以前我在Java中能做的事情,是因为我有10年的Java经验。但是没有经验的领域,就是牛仔编程,或者说好听点,极限编程。系统构架那套行不通,只能步步为营。
真正的系统工程里的确是以架构换时间,但对于新的领域,要以时间换架构!

相关文章:

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看 2024年 5月20日-6月4日:攻克2D物理引擎。 2024年 6月4日-6月13日:攻克《3D数学基础》。 2024年 6月13日-6月20日:攻克《3D…...

相等日期问题(c++方法解决)

问题描述 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之…...

深度学习——优化算法、激活函数、归一化、正则化

文章目录 🌺深度学习面试八股汇总🌺优化算法方法梯度下降 (Gradient Descent, GD)动量法 (Momentum)AdaGrad (Adaptive Gradient Algorithm)RMSProp (Root Mean Square Propagation)Adam (Adaptive Moment Estimation)AdamW 优化算法总结 经验和实践建议…...

Android 老项目适配 Compose 混合开发

在Android项目中使用Jetpack Compose进行混合开发时&#xff0c;可以通过以下步骤进行适配&#xff1a; 1.更新项目的build.gradle文件&#xff0c;确保使用最新的Compose库版本。 dependencies { implementation androidx.compose.ui:ui:<latest_version> implementat…...

PH热榜 | 2024-11-14

DevNow 是一个精简的开源技术博客项目模版&#xff0c;支持 Vercel 一键部署&#xff0c;支持评论、搜索等功能&#xff0c;欢迎大家体验。 [在线预览](https://www.laughingzhu.c 1. Vocera 标语&#xff1a;利用模拟和监控加速语音代理上线 这句话的意思是&#xff1a;通过…...

删库跑路,启动!

起因&#xff1a;这是一个悲伤的故事&#xff0c;在抓logcat时 device待机自动回根目录了&#xff0c;而题主对当前路径的印象还停留在文件夹下&#xff0c;不小心在根目录执行了rm -rf * … 所以&#xff0c;这是个悲伤的故事&#xff0c;东西全没了…device也黑屏了&#xff…...

Vue 3 在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 Vue 3 在现代前端开发中的应用 引言 Vue 3 概述 定义与原理 发展历…...

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable 一、 问题背景&#xff1a; 无法调试debug应用&#xff0c;IDE右下角显示该弹窗&#xff1a; Hdc server port XXXX has been used.Configure environment variable ‘OHOS_HDC_SERVER_POR…...

使用 ts-node 运行 ts文件,启动 nodejs项目

最近在写一个nodejs项目&#xff0c;使用 ts-node 启动项目。遇到了一些问题&#xff0c;在此记录一下。 ts-node 是 TypeScript 执行引擎和 Node.js 的 REPL(一个简单的交互式的编程环境)。 它能够直接在 Node.js 上执行 TypeScript&#xff0c;而无需预编译。 这是通过挂接…...

scala中的case class

package test_27 //Set的特点&#xff1a;唯一&#xff08;元素不同&#xff09;&#xff1b;无序 //case class定义一组数据 case class Book(var bookName:String,var author:String,var price:Double){} object caseclass {def main(args: Array[String]): Unit {//定义一个…...

探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解

文章目录 前言一、GET 方法&#xff1a;用于获取资源二、POST 方法&#xff1a;用于提交数据三、PUT 方法&#xff1a;用于更新资源四、DELETE 方法&#xff1a;用于删除资源五、PATCH 方法&#xff1a;用于部分更新资源六、HEAD 方法&#xff1a;用于请求响应头七、OPTIONS 方…...

前端项目中,public文件下的system.js有什么作用

‌SystemJS在前端项目中的作用主要包括模块加载、资源管理和兼容性处理。‌ 模块加载 SystemJS是一个通用的模块加载器&#xff0c;支持多种模块规范&#xff0c;包括CommonJS、AMD、全局模块对象和ES6模块。通过使用插件&#xff0c;它还可以加载CoffeeScript和TypeScript。…...

odoo-040 odoo17前端的js方法调用后端py方法action报错

文章目录 问题描述梳理写法xml写法前端方法后端action的写法 错误解释 问题描述 在前端的kanban视图上添加了几个自定义按钮&#xff0c;按钮点击可以跳转到对应的tree视图&#xff0c;在写按钮调用方法的时候报错如下&#xff1a; 前端调用后端action报错&#xff1a; actio…...

图形 2.7 LDR与HDR

LDR与HDR B站视频&#xff1a;图形 2.7 LDR与HDR 文章目录 LDR与HDR基本概念LDRHDR为什么需要HDR不同显示屏的差异 Unity中的HDRCamera HDR 设置Lightmap HDR设置拾色器 HDR设置优缺点 HDR与Bloom通常Bloom渲染步骤渲染出原图获取图像中较亮部分高斯模糊叠加 Unity中Bloom渲染…...

DP动态规划基础题(Kadane算法)

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种在数学、管理科学、计算机科学、经济学和生物信息学等领域中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划算法通常用于优化问题&#xff0c;特别是那…...

[UnLua]动态创建SceneCapture2d相机,并且添加渲染目标纹理

在 Unlua 开发中&#xff0c;相机相关的操作是构建场景视觉效果的重要部分。以下我们来详细分析一段涉及相机实例化和为相机赋予纹理目标的 Unlua 代码。 -- 实例化相机local World self:GetWorld()maskCamera World:SpawnActor(UE.ASceneCapture2D)-- 给相机赋值纹理目标lo…...

【leetcode练习·二叉树】用「分解问题」思维解题 I

本文参考labuladong算法笔记[【强化练习】用「分解问题」思维解题 I | labuladong 的算法笔记] 105. 从前序与中序遍历序列构造二叉树 | 力扣 | LeetCode | 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵…...

【gitlab-ce】各组件介绍

主要组件功能接介绍&#xff08;chatgpt回答的&#xff09; nginx&#xff1a;作为Web服务器和反向代理&#xff0c;用于访问GitLab的Web界面。可以关闭&#xff0c;但会导致无法通过Web界面访问GitLab。prometheus_monitoring&#xff1a;提供监控和报警功能&#xff0c;收集和…...

PostgreSQL分区表:基础语法与运维实践

引言 简介&#xff1a;什么是数据库分区 数据库分区是一种将大型表物理上分割成多个较小的部分的技术。每个部分称为一个分区&#xff0c;这些分区可以分布在不同的存储设备上&#xff0c;以提高查询性能和管理效率。 为什么使用分区表 提高查询性能&#xff1a;通过减少需…...

Docker入门系列——DockerFile的使用

前面了解了Docker的基本概念&#xff0c;今天来认识一下DockerFile。 Dockerfile 是一个文本文件&#xff0c;包含一系列指令来组装 Docker 镜像。每个指令执行一个特定动作&#xff0c;例如安装包、复制文件或定义启动命令。正确使用 Dockerfile 指令对于构建高效容器至关重要…...

数据集平台分享

Kaggle: Your Machine Learning and Data Science CommunityKaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.https://www.kaggle.com/Kaggle 包含非常丰富的数据集和代码&#xff0c;…...

去地面算法——depth_clustering算法调试(1)

1 源码下载 论文&#xff1a; 《2016-Fast Range Image-Based Segmentation of Sparse 3D Laser Scans for Online Operation》 《2017-Efficient Online Segmentation for Sparse 3D Laser Scans》 代码&#xff1a;git链接 2 问题记录 2.1 无法找到qt问题 问题截图&…...

设计模式-七个基本原则之一-单一职责原则 + SpringBoot案例

单一职责原理:(SRP) 面向对象七个基本原则之一 清晰的职责&#xff1a;每个类应该有一个明确的职责&#xff0c;避免将多个责任混合在一起。降低耦合&#xff1a;通过将不同的职责分开&#xff0c;可以降低类之间的耦合度&#xff0c;提高系统的灵活性。易于维护&#xff1a;当…...

HWA高速辅助驾驶系统组成及功能场景

HWA最基本功能包括智能跟车、拨杆变道、压速变道、车道居中保持等功能&#xff0c;有效减轻驾驶疲劳。随着智能驾驶不断走向成熟&#xff0c;HWA升级到高速自动驾驶HWP&#xff0c;可实现智能避让汇入口、智能避让大车、分心/疲劳监测、智能进出匝道、智能判别易混分叉路口、智…...

SpringMVC学习笔记(一)

一、SpringMVC的基本概念 &#xff08;一&#xff09;三层架构和MVC 1、三层架构概述 我们的开发架构一般都是基于两种形式&#xff0c;一种是 C/S 架构&#xff0c;也就是客户端/服务器&#xff0c;另一种是 B/S 架构&#xff0c;也就是浏览器服务器。在 JavaEE 开发中&…...

kaggle 如何利用API下载数据集

首先 上传kaggle官网生成得 API 密钥&#xff1a; kaggle.json 文件。放到该代码同目录下&#xff0c;再运行一下代码。 注&#xff1a; 只需要修改下载竞赛数据集&#xff0c;就可以选择你的指定数据集。 jupyter文件运行 #首先 上传 kaggle.json 文件并设置 API 密钥 #再…...

第一个 Flutter 项目(1)共46节

前端开发工具vs code&#xff0c;安装Flutter sdk&#xff0c;如果你的下载速度比较慢&#xff0c;可以选择这个&#x1f604; flutter sdk 解压码&#xff1a;stwq 配置可以看这Flutter 新建工程一直等待 解决办法-CSDN博客 如果你是新的 Flutter 开发者&#xff0c;我们建…...

学术论文写作丨机器学习与深度学习

目录 第一章、ChatGPT-4o使用方法与技巧 第二章、ChatGPT-4o辅助文献检索、总结与分析 第三章、ChatGPT-4o辅助学术论文选题、创新点挖掘与实验方案设计 第四章、ChatGPT-4o辅助学术论文开题与大纲生成 第五章、ChatGPT-4o辅助学术论文写作马拉松活动介绍 第六章、ChatGP…...

导-4涉及的知识点

除了本课题&#xff0c;3D结构几何修复领域还有以下一些值得关注的研究&#xff1a; 1. **Poisson图像编辑**&#xff1a; 成功地将给定的纹理块融合到可能完全不同的背景图像上。 2. **张量投票&#xff08;TV&#xff09;框架**&#xff1a; - 讨论了使用张量投票框架进…...

从0开始深度学习(28)——序列模型

序列模型是指一类特别设计来处理序列数据的神经网络模型。序列数据指的是数据中的每个元素都有先后顺序&#xff0c;比如时间序列数据&#xff08;股票价格、天气变化等&#xff09;、自然语言文本&#xff08;句子中的单词顺序&#xff09;、语音信号等。 1 统计工具 前面介绍…...