草庐IT

自己动手从零写桌面操作系统GrapeOS系列教程——13.向MBR中写入程序

学习操作系统原理最好的方法是自己写一个简单的操作系统。前面铺垫了这么久,今天终于开始写程序了。本讲将介绍3个逐步深入但非常简单的程序,一方面是让大家熟悉开发流程,另一方面是顺便解决前面遇到的CPU占用率高的问题。一、mbr1.asm回顾mbr1.asm的代码之前我们介绍过,这里我们回顾一下代码和演示步骤。mbr1.asm代码如下:;生成一个空的MBRtimes510db0;前510个字节全为0db0x55,0xaa;最后两个字节是0x55和0xaa。下面我们来演示:1.启动并登录CentOS在VirtualBox中启动CentOS虚拟机,并用PowerShell登录到CentOS虚拟机。2.创

自己动手从零写桌面操作系统GrapeOS系列教程——13.向MBR中写入程序

学习操作系统原理最好的方法是自己写一个简单的操作系统。前面铺垫了这么久,今天终于开始写程序了。本讲将介绍3个逐步深入但非常简单的程序,一方面是让大家熟悉开发流程,另一方面是顺便解决前面遇到的CPU占用率高的问题。一、mbr1.asm回顾mbr1.asm的代码之前我们介绍过,这里我们回顾一下代码和演示步骤。mbr1.asm代码如下:;生成一个空的MBRtimes510db0;前510个字节全为0db0x55,0xaa;最后两个字节是0x55和0xaa。下面我们来演示:1.启动并登录CentOS在VirtualBox中启动CentOS虚拟机,并用PowerShell登录到CentOS虚拟机。2.创

[CG从零开始] 3. 安装 pyassimp 库加载模型文件

assimp是一个开源的模型加载库,支持非常多的格式,还有许多语言的binding,这里我们选用assimp的python的binding来加载模型文件。不过社区主要是在维护assimp的C++代码,对于这些binding可能更新的不够及时,比如python版本的就存在一些问题。assimp的源码1.安装pyassimp官方的编译的指南,有些坑还是需要踩一下。pyassimp只是assimp的一个wrapper,所以计算上还必须有assimp的库才行,还是免不了要去编译assimp。这里推荐采用vcpkg的进行管理,windows上需要装一下visualstudio,mac需要装一下xcode

[CG从零开始] 3. 安装 pyassimp 库加载模型文件

assimp是一个开源的模型加载库,支持非常多的格式,还有许多语言的binding,这里我们选用assimp的python的binding来加载模型文件。不过社区主要是在维护assimp的C++代码,对于这些binding可能更新的不够及时,比如python版本的就存在一些问题。assimp的源码1.安装pyassimp官方的编译的指南,有些坑还是需要踩一下。pyassimp只是assimp的一个wrapper,所以计算上还必须有assimp的库才行,还是免不了要去编译assimp。这里推荐采用vcpkg的进行管理,windows上需要装一下visualstudio,mac需要装一下xcode

软光栅从零开始——Bresenham’s Line

Bresenham算法介绍​ 画线算法有三种,分别是DDA算法、中点算法、Bresenham算法,但为什么我们选择Bresenham算法呢?因为Bresenham算法仅仅使用整数加法、减法和位移,是一种增量误差算法,这些操作省时高效精确,是当前最有效的画线算法。并且,此算法并不局限于直线,圆等其他曲线同样可以画。更重要的是,该算法用于绘图仪等硬件和现代显卡的图形芯片中,以及非常多的软件图形库中都可以看到他的身影。鉴于Bresenham算法的简单高效,因此我们选用他作为实现渲染器的一部分Bresenham算法思想​ 在图形学中,屏幕是一个二维数组,数组里的每一个元素都为一个像素,其中每个像素都必

软光栅从零开始——Bresenham’s Line

Bresenham算法介绍​ 画线算法有三种,分别是DDA算法、中点算法、Bresenham算法,但为什么我们选择Bresenham算法呢?因为Bresenham算法仅仅使用整数加法、减法和位移,是一种增量误差算法,这些操作省时高效精确,是当前最有效的画线算法。并且,此算法并不局限于直线,圆等其他曲线同样可以画。更重要的是,该算法用于绘图仪等硬件和现代显卡的图形芯片中,以及非常多的软件图形库中都可以看到他的身影。鉴于Bresenham算法的简单高效,因此我们选用他作为实现渲染器的一部分Bresenham算法思想​ 在图形学中,屏幕是一个二维数组,数组里的每一个元素都为一个像素,其中每个像素都必

[CG从零开始] 6. 加载一个柴犬模型学习UV贴图

在第5篇文章中,我们成功加载了fbx模型,并且做了MVP变换,将立方体按照透视投影渲染了出来。但是当时只是随机给顶点颜色,并且默认fbx文件里只有一个mesh,这次我们来加载一个柴犬模型,并且给模型贴图,模型可以从sketchfab下载。本文没有涉及到理论解释,更多的是代码实践。完整代码在https://github.com/MangoWAY/CGLearner/tree/v0.3tagv0.31.创建纹理,加载图片我们来封装一个Texture类用来加载图片,创建、bind纹理,加载图片我用的是pillow库。fromOpenGLimportGLasglfromPILimportImageim

[CG从零开始] 6. 加载一个柴犬模型学习UV贴图

在第5篇文章中,我们成功加载了fbx模型,并且做了MVP变换,将立方体按照透视投影渲染了出来。但是当时只是随机给顶点颜色,并且默认fbx文件里只有一个mesh,这次我们来加载一个柴犬模型,并且给模型贴图,模型可以从sketchfab下载。本文没有涉及到理论解释,更多的是代码实践。完整代码在https://github.com/MangoWAY/CGLearner/tree/v0.3tagv0.31.创建纹理,加载图片我们来封装一个Texture类用来加载图片,创建、bind纹理,加载图片我用的是pillow库。fromOpenGLimportGLasglfromPILimportImageim

[CG从零开始] 5. 搞清 MVP 矩阵理论 + 实践

在4中成功绘制了三角形以后,下面我们来加载一个fbx文件,然后构建MVP变换(model-view-projection)。简单介绍一下:从我们拿到模型(主要是网格信息)文件开始,模型网格(Mesh)里记录模型的顶点位置信息,比方说(-1,1,1)点,那么这个点是相对于这个模型的(0,0,0)点来说的,这和我们在制作模型的时候有关,例如我可以让这个(0,0,0)点位于模型的中心也可以是底部。接着我们需要通过放置许多的模型来构建整个场景,为了描述每个物体的位姿(位置和姿态),我们需要一个世界原点,然后所有物体的位姿信息都是相对于这个世界原点的。如果用过游戏引擎或者DCC软件的话,一般每个物体都会

[CG从零开始] 5. 搞清 MVP 矩阵理论 + 实践

在4中成功绘制了三角形以后,下面我们来加载一个fbx文件,然后构建MVP变换(model-view-projection)。简单介绍一下:从我们拿到模型(主要是网格信息)文件开始,模型网格(Mesh)里记录模型的顶点位置信息,比方说(-1,1,1)点,那么这个点是相对于这个模型的(0,0,0)点来说的,这和我们在制作模型的时候有关,例如我可以让这个(0,0,0)点位于模型的中心也可以是底部。接着我们需要通过放置许多的模型来构建整个场景,为了描述每个物体的位姿(位置和姿态),我们需要一个世界原点,然后所有物体的位姿信息都是相对于这个世界原点的。如果用过游戏引擎或者DCC软件的话,一般每个物体都会