【游戏引擎之路】登神长阶(七)——x86汇编学习:凡做难事,必有所得

news2024/9/9 3:56:20

5月20日-6月4日:攻克2D物理引擎。
6月4日-6月13日:攻克《3D数学基础》。
6月13日-6月20日:攻克《3D图形教程》。
6月21日-6月22日:攻克《Raycasting游戏教程》。
6月23日-7月1日:攻克《Windows游戏编程大师技巧》。
7月2日-7月6日:攻克《雅达利2600汇编游戏开发》。
7月7日-7月11日:攻克《x86/x64汇编语言》。

下个目标:《3D游戏编程大师技巧》

这次又是一次“异形”星球的征战。我昨天去骑行了60公里,这不是一般的60公里,最后20公里全是山路,回来把我累死了。 今天的精神状态不是很好,可以说“咬牙”把教程学完了。

但是,我发现我还喜欢上这种感觉了。不像是雅达利2600汇编那样陌生。

学汇编真的像那种顶尖的对局,真的一点错误也不能犯。我记的笔记比我一个学期记得还多。虽然就是几条语句,但我都密密麻麻地写上了注释。我以前读大学的时候如果能这么用功就好了。

这次教程我学了两个,一个是X86-32位的。一个是x86-64位的。两个都各有所长,也各有所短。比如第一个教程教到最后都没教怎么调用函数。而64位的基础讲得很好,但高级应用一点也没有。

这一通学习下来,我有一个最大的感悟,以前觉得汇编是比较“底层”的东西,比较“落后“的东西,毕竟现在的语言都冠上了一个“高级语言”的帽子。

这给我一种那要样的印象,如果我用的编程语言是枪和炮,那汇编语言就是冷兵器。怎么想都觉得有一种比较“落后”的印象。我学雅达利2600汇编的时候也是这个印象。

但是,当我学了x86的汇编之后,这个印象完全改观了。汇编简直是一种“次世代”的武器,他不是冷兵器,而是“高科技”,是激光剑。

他只是“难用”,而不是“弱”。相反,他强的离谱。

以前我听别人说学汇编,不止一次看到说现在的编译器很先进了,即便你学了汇编,写出的代码也不会像以前一样提升很多效率。我现在知道了,这东西就纯属放屁。从MMX到AVX,这种并行处理的能力,你是无论如何用写代码也写不出来的,什么编译器也做不到,必须得用汇编才能把这个强大的功能用出来。

而我的应用正是游戏引擎,最是需要批量处理图形的地方。

我之前学汇编其实只是看到了我的书上说有些注意性能的地方还是得用汇编。就是这么简单的一个作者的感受。我其实并没有想到汇编语言能够如此强大。

这其实也得益于我现在的“少即是多”的思想。因为我之前想着做游戏,总想着跨平台,做PC,做手机,现在我自已做引擎了,要求不能那么高了,跨平台是别想了,所以我专心把PC平台做好。所以我才有了学汇编的念头。如果我总想着跨平台,可能不会有这个念想。

以前金一南教授的一个讲座里面有一句话让我印象非常深刻:

凡做难事,必有所得。

这几乎成为了我人生的信条之一。这次又是印证了这句话的力量。

学汇编给我的收获比想象中大多了。我都有点迫不及待地去修改我之前的一些代码。比如以前我有一个Alpha混合的代码,因为DirectX的DirectDraw并不支持Alpha通道。所以我自已写了一段Alpha混合来支持半透明物体。这东西巨慢,本来800帧的,可以一瞬间拉下到200帧。而仅仅只是主角的飞行器用这个算法而已。如果用汇编,相信可以高很多。当然,这个也只是去尝试改进而已,其实主要的还是得靠硬件。如果只有Blt,我的帧数可以达到4000多。这是怎么换算法都达不到的。

不过,能够改进的地方还是得改进。比如,我的SpritePack的功能。这东西是硬件管不了的,都是靠我的算法来实现。这其中的效率提高汇编能够提供巨大的价值。

其实我本来想再学一下Python+机器学习的。这段时间也不知道怎么了,什么都想去了解。感觉AI将是我游戏开发中非常重要的一块拼图。我现在用AI制作图像,原画,用得非常顺手。这方面的知识想更深入的了解一下。

但是这段时间没有看书,一直是学教程,所以一直坐着,腰都受不了了。如果是拿着书本学,我可以看书的时候还躺一下,所以我选择学《3D游戏编程大师技巧》。这样缓解一下我的腰的压力。

过了这段时间,再看看能不能学Python。

加油!

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

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

相关文章

数据结构-二叉搜索树与红黑树

4.二叉搜索树 又叫二叉查找树、有序二叉树、排序二叉树。树中任意一个结点,其左子树的每个节点值都要小于该节点,其右子树的每个节点值都要大于该节点 作用:能够进行快速查找、插入、删除操作 4.1 二叉搜索树的时间复杂度 注:二…

Python基础教学之五:异常处理与文件操作——让程序更健壮

Python基础教学之五:异常处理与文件操作——让程序更健壮 一、异常处理概念 1. 理解异常 异常是程序运行中发生的错误或意外情况,比如除以零、访问不存在的列表元素等。如果不进行处理,异常会导致程序终止运行。在编程过程中,我…

Java语言程序设计——篇三(2)

循环结构 概述1️⃣while循环例题讲解 2️⃣do-while循环例题讲解 🚩while循环与do-while循环区别3️⃣for循环例题讲解 4️⃣循环的嵌套🏮例题讲解 概述 ⭐️Java语言提供了4种循环结构: (1) while循环 (2) do-while循环 (3) for循环 (4)增…

wangEdtior富文本编辑器 结合element使用,博客必备,通俗易懂

效果展示 使用步骤 安装 npm install wangeditor/editor-for-vue --save创建自定义组件 引入组件并注册&#xff0c;使用组件 <template><div style"border: 1px solid #ccc;"><Toolbarstyle"border-bottom: 1px solid #ccc":editor"…

如何使用Vger对已经过身份验证的Jupyter实例进行安全检测

关于Vger Vger是一款功能强大的交互式命令行应用程序&#xff0c;广大研究人员可以利用Vger与已经过身验证的Jupyter实例进行交互&#xff0c;并对其执行人工智能或机器学习方面的安全检测操作。 使用场景 1、作为红队研究人员&#xff0c;当我们寻找到了Jupyter凭证之后&…

经验分享|如何维护自己的大数据信用?

在当今数字化时代&#xff0c;大数据信用成为越来越多人生活中不可或缺的一部分。大数据信用评估是基于个人的信用历史、信用行为、信用记录等信息&#xff0c;对个人信用状况进行综合评估的一种方式。良好的大数据信用可以帮助个人获得更多的金融服务、更高的信用额度、更低的…

一招解决 Windows 文件重命名时后缀名不显示的困扰

在日常使用电脑的过程中&#xff0c;我们经常需要对文件进行重命名。然而&#xff0c;有时你会发现&#xff0c;在 Windows 系统中重命名文件时&#xff0c;默认情况下不会显示文件的扩展名&#xff08;即后缀名&#xff09;&#xff0c;这可能会导致意外地更改文件类型或者混淆…

Flutter开发者必读:sp_util - SharedPreferences的终极解决方案

简介 sp_util 是一个在 Flutter 社区中广泛使用的轻量级、无依赖的 SharedPreferences 封装库。 SharedPreferences 是 Android 和 iOS 平台上用于存储少量数据的简单键值存储系统。 典型场景 sp_util 库在 Flutter 应用开发中的典型使用场景包括但不限于以下几点&#xff…

模块化沙箱:多场景零信任数据安全解决方案

在政企领域&#xff0c;不同场景和用户往往有着层次不一的安全需求。传统的单一安全解决方案已经无法满足这些复杂而多样化的需求&#xff0c;因此&#xff0c;高灵活性和高扩展性的模块化沙箱应运而生。这种新型数据安全产品通过“积木式”的模块组合&#xff0c;能够精确、灵…

Keysight 是德 DSAX93204A 高性能示波器

Keysight 是德 DSAX93204A 高性能示波器 DSAX93204A Infiniium 高性能示波器&#xff1a; 33 GHz 高带宽实时示波器 zui佳的 33 GHz 真正模拟带宽80 GSa/s 采样率&#xff0c;2 通道&#xff1b;40 GSa/s 采样率&#xff0c;4 通道zui深的存储深度――高达 2 Gpts 存储器&am…

怎么办?我的C盘又爆红了!别慌!博主手把手带你管理你的C盘空间~

怎么办&#xff1f;我的C盘又爆红了&#xff01;别慌&#xff01;博主手把手带你管理你的C盘空间~ 文章目录 怎么办&#xff1f;我的C盘又爆红了&#xff01;别慌&#xff01;博主手把手带你管理你的C盘空间~0. 在开始清理之前1. 推荐执行的操作1.1 清理系统缓存文件1.2 磁盘清…

极客天成ScaleFlash与南大通用数据库兼容互认证

近日&#xff0c;北京极客天成科技有限公司与天津南大通用数据技术股份有限公司完成产品兼容性互认证&#xff0c;测试结果表明&#xff0c;极客天成分布式存储软件[简称NVMatrix]V3.0与南大通用多模多态数据库管理系统[简称GBase 8c]V5产品兼容性良好、运行稳定。 北京极客天成…

第三期书生大模型实战营 第2关 Python 基础知识

第三期书生大模型实战营 第2关 Python 基础知识 第三期书生大模型实战营 第2关 Python 基础知识Python 基础函数定义常见的内置方法replace(old, new)lower()split() 字典dict 使用Python实现词频统计使用VSCode进行调试总结 第三期书生大模型实战营 第2关 Python 基础知识 Hel…

Python基础教学之三:函数与模块篇——实现代码重用和模块化

Python基础教学之三&#xff1a;函数与模块篇——实现代码重用和模块化 一、函数的定义与使用 1. 理解函数 函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码块。它可以提高代码的重用性和程序的清晰度。 你可以定义一个由自己想要功能的函数&#xff0c;以下是…

星环科技知识平台TKH:引领企业构建高效AI基础设施,加速数智化转型新纪元

5月30-31日&#xff0c;2024向星力未来数据技术峰会期间&#xff0c;星环科技正式发布其最新人工智能基础设施产品——Transwarp Knowledge Hub星环知识平台&#xff08;以下简称TKH&#xff09;。该平台旨在为企业打通从人工智能基础设施建设到大数据、人工智能等研发应用的完…

Kafka-02 @KafkaListener学习

一. 引入依赖 SpringBoot 和 Kafka 搭配使用的场景&#xff0c;引入 spring-kafka 即可&#xff1b; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.11</version>…

数据交换系列-DWG数据交换方案选型

1.背景介绍 1.1 什么是块 块相当于一个“标准件”&#xff0c;当你要用的时候可以随意插入&#xff0c;插入的时候可以旋转角度&#xff0c;还可以定义比例。块 &#xff0c;在CAD中&#xff0c;就是一个、或一组图形实体的总称&#xff0c;可以包含任意对象&#xff0c;简单…

Linux(一)线程——何为线程???Linux线程控制

文章目录 什么是线程&#xff1f;&#xff1f;&#xff1f;线程和进程的区别和联系Linux线程控制POSIX线程库创建线程线程等待线程终止线程分离 什么是线程&#xff1f;&#xff1f;&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的…

Airtest成功案例分享:KLab连续2年携Airtest私有云产品参加CEDEC大会!

一、KLab株式会社介绍 KLab株式会社是一家位于日本的移动游戏开发公司&#xff0c;成立于2000年。公司以开发和运营基于动漫和漫画IP的手机游戏而闻名&#xff0c;尤其是在音乐节奏游戏领域。KLab的一些知名作品包括《LoveLive!学园偶像祭》、《排球少年&#xff1a;新的征程》…

【Redis】Redis十大类型

文章目录 前言一、string字符串类型二、List列表类型三、 Hash表四、 Set集合五、 ZSet有序集合六、 GEO地理空间七、 HyperLogLog基数统计八、Bitmap位图九、bitfield位域十、 Stream流10.1 队列指令10.2 消费组指令10.3 ACK机制 前言 redis是k-v键值对进行存储&#xff0c;k…