[从零构建光栅渲染器] 5.移动摄像机

学习TinyRenderer TinyRenderer学习笔记 阅读详情

[从零构建光栅渲染器] 5.移动摄像机

非常感谢和推荐Sokolov的教程,Sokolov使用500行C++代码实现一个光栅渲染器。教程学习过程非常平滑,从画点、线和三角形开始教学,在逐步深入三维变换,投影,再到顶点着色器,片段着色器等等。教程地址:https://github.com/ssloy/tinyrenderer。Sokolov的教程为英文,我翻译了其文章。

在学习过程中,有些内容可能您可能云里雾里,这时就需要查阅《计算机图形学》的书籍了,这里面的算法和公式可以帮助您理解代码。

作者:尹豆(憨豆酒),联系我yindou97@163.com,熟悉图形学,图像处理领域,本章代码: https://github.com/douysu/computer-graphics-notes

本章运行结果

图片

几何当中最后一个重要的点

今天我们将要完成我比较喜欢的额部分,但是一部分读者可能会感到无聊。一旦你掌握了今天的资料,你可以转移到下一节课,今天我们要完成的是我很喜欢的部分,但很多读者觉得很无聊。一旦你掌握了今天的材料,你可以转移到下一节课,在那里我们将实际做渲染。为了让你眼前一亮,这里是我们已经知道的头,使用Gouraud着色。

图片

我把所有的纹理都去掉了。Gouraud的着色非常简单。我们的3D设计者给了我们模型的每个顶点的法线向量,它们可以在.obj文件的 "vn x y z "行中找到。我们计算出每个顶点的强度(而不是像以前的平面着色那样每个三角形的强度),然后简单地在每个三角形内插值,就像我们已经做了z或uv坐标一样。

顺便说一下,在3D艺术家不是那么好心的情况下,你可以重新计算法向量作为与点相关的所有面的平均向量。前我用来生成这个图像的代码可以在这里找到。here.

三维空间中的基准坐标系变换

在欧几里得空间中,坐标可以由一个点(原点)和一个基点给出。点P在坐标系(O,i,j,k)中的坐标是(x,y,z)意味着什么?意味着,向量OP使用如下表示:

图片

现在图片中有了另一个坐标系(O’, i’,j’,k’)。我们应该怎样从一个坐标系转换到另一个坐标系呢。首先我们需要明白(i,j,k) and (i’,j’,k’) 都是3D的基准坐标系,这里存在一个(非退化)矩阵M可以完成这个操作:

图片

让我们绘制一下插图:

图片

翻译作者内容:坐标系变换。

让我重新整理一下向量OP:

图片

翻译作者内容:这个公式这么理解,向量OO’这里的O’就相当于下面公式中的P点,代入即可

图片

现在,让我们用基矩阵替换右边的(i’,j’,k’),如下:

图片

这就给了我们转换公式,从一个基准坐标系到另一个基准坐标系:

图片

让我们创建我们的视角矩阵gluLookAt

OpenGL,因此,我们的小渲染器只能用位于Z轴上的摄像头来绘制场景。如果我们想移动摄像头,没有问题,我们可以移动所有的场景,让摄像头不动。

让我们这么说吧:我们要画一个位于e点(眼睛)的摄像头的场景,摄像头应该对准c点(中心),这样,给定的向量u(向上)在最终的渲染中是垂直的。

说明图:

图片

这意味着我们要在坐标系(c,x’,y’,z’)中进行渲染。但是,我们的模型是在坐标系(O,x,y,z)中给出的… 没有问题,我们需要的是计算坐标的变换。下面是一个计算必要的4x4矩阵ModelView的C++代码。

void lookat(Vec3f eye, Vec3f center, Vec3f up) {
    Vec3f z = (eye-center).normalize();
    Vec3f x = cross(up,z).normalize();
    Vec3f y = cross(z,x).normalize();
    Matrix Minv = Matrix::identity();
    Matrix Tr   = Matrix::identity();
    for (int i=0; i<3; i++) {
        Minv[0][i] = x[i];
        Minv[1][i] = y[i];
        Minv[2][i] = z[i];
        Tr[i][3] = -center[i];
    }
    ModelView = Minv*Tr;
}

注意,z’是由向量ce给出的(不要忘记将其归一化,这对以后的计算有帮助)。我们如何计算x’?很简单,就是通过u和z’叉乘。然后我们计算y’,使其与已经计算出的x’和z’正交(让我提醒你,在我们的问题设置中,ce和u不一定是正交的)。最后一步是将原点平移到中心c,我们的变换矩阵就准备好了。现在只需在模型帧中得到坐标为(x,y,z,1)的任意点,乘以矩阵ModelView,就可以得到相机坐标系中的坐标。顺便说一下,ModelView这个名字来自于OpenGL的术语。

Viewport视口矩阵

如果你从一开始就跟着这门课程走,你应该还记得像这样奇怪的代码。

screen_coords[j] = Vec2i((v.x+1.)*width/2., (v.y+1.)*height/2.);

它是什么意思?意思是我有一个点Vec2f v,它属于正方形[-1,1][-1,1]。我想把它画在(width,height)的图像中。值(v.x+1)在0和2之间变化,(v.x+1)/2在0和1之间变化,(v.x+1)*width/2也就是在0~width之间变化。这样,我们有效地将双单元方块映射到图像上。

但是现在我们要摆脱这些丑陋的构造,我想用矩阵形式重写所有的计算。让我们考虑一下下面的C++代码。

Matrix viewport(int x, int y, int w, int h) {
    Matrix m = Matrix::identity(4);
    m[0][3] = x+w/2.f;
    m[1][3] = y+h/2.f;
    m[2][3] = depth/2.f;
    m[0][0] = w/2.f;
    m[1][1] = h/2.f;
    m[2][2] = depth/2.f;
    return m;
}

图片

意思是把双单元立方体[-1,1][-1,1][-1,1][-1,1]映射到屏幕立方体[x,x+w][y,y+h]*[0,d]上。对了,是立方体,而不是矩形,这是因为用Z-缓冲区进行深度计算。这里d是z-缓冲区的分辨率。我喜欢把它等于255,因为这样做是为了简单地倾倒z-缓冲区的黑白图像进行调试。

在OpenGL的术语中,这个矩阵被称为视口矩阵。

坐标连续变换

所以,让我们总结一下。我们的模型(比如说角色)是在自己的局部框架(对象坐标)中创建的。它们被插入到以世界坐标表示的场景中。从一个到另一个的转换是用矩阵模型进行的。然后,我们要用相机(眼睛坐标)来表达,这个变换称为View。然后,我们用投影矩阵(第4课)对场景进行变形,产生透视变形,这个矩阵将场景变换成所谓的剪辑坐标。最后,我们绘制场景,将剪贴坐标转化为画面坐标的矩阵称为Viewport。

同样的,如果我们从.obj文件中读取一个点v,那么要在屏幕上画出这个点,需要经过以下的变换链。

Viewport * Projection * View * Model * v.

如果你看了这个提交 this,你会看到以下几行。

Vec3f v = model->vert(face[j]);
screen_coords[j] =  Vec3f(ViewPort*Projection*ModelView*Matrix(v));

由于我只画了一个对象,所以矩阵模型等于本身,我将其与矩阵视图合并。

法向量变换

有一个广为人知的事实。

如果我们有一个模型,它的法向量是由设计者给定的,并且这个模型是用仿射映射进行变换的,那么法向量要用映射进行变换,等于原映射矩阵的逆矩阵的转置

什么–什么–什么–!?我遇到不少程序员都知道这个事实,但对他们来说,这仍然是一个黑魔法。其实,其实也没那么复杂。拿一支铅笔,画一个二维三角形(0,0)、(0,1)、(1,0)和一个向量n,在下图中的法线上。自然,n等于(1,1)。然后,让我们将所有的y坐标扩展2的系数,保留x坐标不变。这样,我们的三角形就变成了(0,0), (0,2), (1,0). 如果我们用同样的方法变换向量n,它就会变成(1,2),并且它不再是三角形的正交边。

因此,为了消除所有的黑魔法,我们需要明白一个简单的道理:我们不需要简单的变换法向量(因为它们可以变得不再是法向量),我们需要计算(新的)法向量到变换后的模型。

回到三维,我们有一个向量n = (A,B,C)。我们知道经过原点的平面,法线为n,有一个方程Ax+By+Cz=0,让我们把它写成矩阵形式(我从一开始就用其次坐标)。

图片

回想一下,(A,B,C)-是一个向量,所以我们在嵌入到4D中时将其增强为0,而(x,y,z)因为是一个点,所以将其增强为1。

让我们在两者之间插入一个身份矩阵(逆向M乘以M等于身份矩阵)。

图片

右边括号中的表达式–是对被变换的对象的点。左边的表达式–是对被变换对象的法向量! 在标准的惯例中,我们通常把坐标写成列(请大家不要把反向量和共变向量的东西都提出来),所以我们可以把前面的表达式改写成如下。

图片

而左边的括号告诉我们,通过应用仿射映射的反转置矩阵,可以从旧法线计算出被变换对象的法线。

请注意,如果我们变换矩阵M是缩放,旋转,平移组成,那么M和它的逆转职是相等的,这种情况下逆和转置是相互抵消的。但是如果包括了投影,其是仿射变换,就需要上面的技巧了。

在目前的代码中,我们没有使用法线向量的变换,但在下一节课中,它将会非常非常方便。

祝你编码愉快!

tinyrenderer学习总结(1) 学习地址:Home · ssloy/tinyrenderer Wiki · GitHub https://gitcode.net/mirrors/ssloy/tinyrenderer 整体说明:tinyrenderer是一个不借助任何其他图形接口来实现三维渲染的一个学习项目。里面所以的代码和相应的库都是自己封装的,能够帮助我们很好地理解整个渲染的底层原理。 接下来以tinyrenderer里的lesson为模块进行总结。 Lesson1:Bresenham’s Line Drawing Algori 阅读详情

相关推荐

计算机图形学/C++ ——对tinyrenderer的详细分析

根据上述vec模板具体定义vec2,vec3。return i?y : x;return i?y : x;return i?(1==i?y : z) : x;return i?(1==i?y : z) : x;增加了normalize操作,提供了将向量转化为标准向量(长度为1)的简便方法。定义了vec4,但未具体定义。

2303_76262050的博客 1164

Tinyrenderer:从零构建软件渲染器的完整指南

Tinyrenderer:从零构建软件渲染器的完整指南 【免费下载链接】tinyrenderer A brief computer graphics / rendering course 项目地址: https://gitcode...

gitblog_00099的博客 706

从零实现软件渲染器:深入理解图形渲染管线与核心算法

计算机图形学是计算机科学的重要分支,其核心目标是将三维场景转换为二维图像。这一过程依赖于图形渲染管线,它定义了从顶点数据到最终像素的完整处理流程。理解渲染管线的原理对于掌握现代图形技术至关重要,它能帮助开发者优化性能、调试复杂视觉效果。在技术实现层面,光栅化算法负责将几何图元转换为像素片段,而深度缓冲(Z-Buffer)技术则解决了三维空间中的物体遮挡问题,确保正确的视觉层次。这些基础技术广泛应用于游戏开发、影视特效、数据可视化以及虚拟现实等领域。通过动手实现一个软件渲染器,开发者可以深入理解坐标变换、三角

weixin_33795806的博客 376

[从零构建光栅渲染器] 总结

相应文章目录: [从零构建光栅渲染器] 0.引言 [从零构建光栅渲染器] 1.Bresenham 画线算法 [从零构建光栅渲染器] 2.三角形栅格化和背面剪裁 [从零构建光栅渲染器] 3.隐藏面剃除 z-buffer(深度缓冲) [从零构建光栅渲染器] 4.透视投影 [从零构建光栅渲染器] 5.移动摄像机 [从零构建光栅渲染器] 6. 顶点和片元着色器的工作原理 实现效果 说的话: 呼~ 光栅渲染器的内容基本结尾了。在学习整理过程中,查阅不少的资料和数学公式,其中对我帮助最大的就是《计算机图形学》、Lea

尹豆的博客 642

Python实现命令行3D魔方渲染器:从零掌握图形学与矩阵变换

3D图形学是计算机科学中模拟三维空间物体在二维屏幕上显示的核心技术,其原理基于坐标变换与投影矩阵。通过矩阵运算实现物体的旋转、平移和缩放,并结合透视投影模拟人眼近大远小的视觉效果,为游戏开发、数据可视化和虚拟现实等领域提供基础。在工程实践中,掌握3D渲染管线能有效提升算法理解与系统设计能力。本文以命令行3D魔方项目为例,深入探讨如何仅用Python标准库实现**透视投影**与**矩阵变换**,将抽象数学概念转化为可交互的终端应用,展示从三维坐标映射到字符渲染的完整流程。

weixin_33770878的博客 372

3D高斯泼溅与UE5融合:实时高质量点云渲染的端到端解决方案

在三维可视化领域,点云数据的实时高质量渲染一直是技术挑战。传统网格化流程存在重建耗时长、数据量大、性能瓶颈等问题。3D高斯泼溅技术作为一种创新的神经渲染方法,通过使用大量带有位置、形状、颜色和不透明度属性的高斯椭球来表征场景,绕过了网格重建,实现了高效的GPU并行渲染。其核心价值在于能够对海量点云进行实时、高保真的可视化,极大地提升了文化遗产数字化、工业检测等领域的应用效率。本文聚焦于将这一前沿技术与成熟的Unreal Engine 5生产管线深度集成,详细阐述了从数据预处理、自定义渲染管线开发到性能优化的

weixin_34380948的博客 423

全网最简单的软渲染器

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

少年的博客 939

软件渲染器tinyrenderer

定义顺时针和逆时针的。

LIJIWEI0611的博客 1188

c++ 判断硬件是否支持opengl_造轮子:一个软渲染和一个基于OpenGL的完整场景

之前造的两个轮子,一个是C++写的CPU光栅化渲染器,另一个是一个完整的场景,用的C++和OpenGL。造轮子是为了光栅化的基础细节和对渲染底层(图形API层)的探索。我更多的时间精力投入到multiple scattering这个工程里了,这个工程想法更多挖得也更深:Marcus Xie:含Multiple Scattering的IBL的Three.js实现​zhuanlan.zhihu.com...

weixin_39616339的博客 549

tinyrenderer:作为练习用 Java 编写的简单图形渲染器

小渲染器 作为练习用 Java 编写的简单图形渲染器。

Tinyrenderer:500 行纯 C++ 实现的轻量级 3D 软件渲染器

资源简介 Tinyrenderer是一个以教学为核心的轻量级3D渲染项目,通过纯C++代码从零构建简化版渲染系统,揭示OpenGL、Vulkan等现代3D图形API的底层工作原理。项目不依赖任何第三方图形库,核心代码仅约500行,适合开发者深入理解3D渲染从模型到图像的完整流程。 项目包含: 核心代码:实现模型加载(OBJ格式)、渲染管线(视图变换、透视投影、光栅化、深度缓冲)、Phong光照模型等核心功能; 示例资源:提供多个3D模型(如非洲人头骨、暗黑破坏神角色、车辆模型等)及对应的漫反射、法线、高光纹理贴图; 工具支持:内置TGA图像读写工具,用于渲染结果的输出与保存,支持CMake构建和Gitpod在线开发环境。 适合希望掌握3D渲染基础原理(如顶点变换、纹理映射、光照计算)的学习者,通过手动实现渲染管线关键环节,理解现代图形API的工作机制。

C++与OpenGL实战:从零构建3D台球游戏的图形学与物理引擎

计算机图形学是构建虚拟3D世界的核心技术,其核心原理在于通过一系列坐标变换与光照计算,将几何数据渲染为屏幕上的逼真图像。OpenGL作为跨平台的底层图形API,为开发者提供了直接操控GPU渲染管线的能力,是实现高性能、高可控性3D应用的技术基石。在游戏开发等工程实践中,结合C++的高效计算能力,可以构建出实时交互的复杂模拟系统。本文以开发一个完整的3D台球游戏为具体场景,深入探讨如何利用OpenGL渲染管线进行场景构建与着色器编程,并实现基于动量守恒的刚体物理碰撞检测与响应,为图形学与游戏物理的入门与实践提

weixin_34356555的博客 379

Android GNSS 可视卫星星空图/卫星天顶图 原理及画法介绍

目录1 概念介绍2 绘制步骤2.1 获取卫星信息2.2 绘制底图 效果图: 1 概念介绍 首先介绍一下方位角和高度角的概念: 方位角:是从某点的指北(地理北极)方向线起,依顺时针方向到目标方向线之间的水平夹角。 高度角:从一点至观测目标的方向线与水平面间的夹角。 卫星天顶图 即是根据每一颗卫星的方位角和高度角将其画在以观测位置为中心的天顶图上。 天顶图其底图为由外向内的三个圆和四条直线。三个圆由外向内依次代表高度角0°、30°、60°,中心点代表90°;四条直线分别表示正北-正南、东北-西南、正东

x1471898145的博客 1万+

PowerShell 7.5 启动崩溃完整指南:Windows 上闪退问题的快速排查与修复

PowerShell 是微软维护的跨平台命令行外壳与脚本自动化环境。不少 Windows 用户在升级到 7.5 之后遇到 **PowerShell 7.5 启动崩溃**:双击或输入 `pwsh` 后窗口一闪即关,没有报错。本文按排障笔记的方式,把问题收敛到运行时、安全策略、配置文件三类原因,给出可复制的检查命令与修复动作。 [![PowerShell 吉祥物插图,PowerShell 7.5 启

gitblog_00854的博客 501

Android应用加固脱壳实战:从爱加密原理到Frida内存Dump与修复

在移动应用安全领域,代码加固与动态加载是保护核心逻辑的关键技术。其原理在于通过修改应用启动流程,将原始DEX加密隐藏,并注入包含解密逻辑的壳DEX,实现运行时动态加载。这项技术的核心价值在于防止应用被逆向分析、二次打包或恶意篡改,广泛应用于金融、游戏等高安全要求场景。对于安全研究、漏洞挖掘或历史版本审计,掌握脱壳技能至关重要。本文聚焦于**爱加密**等主流加固方案,深入探讨如何利用**Frida**框架在内存中精准捕获解密后的DEX数据,并解决脱壳后常见的签名校验等运行问题,提供一套从原理到实践的完整攻防思

weixin_28716443的博客 489

Airsim动态 | 安装ROS包装器(AirSim ROS Wrapper)

本期内容我们将带来在Airsim环境下使用ROS Wrapper的相关教程,以下是AirSim客户端库上的一些ROS Wrapper相关配置。 一、启动 以下步骤适用于 Linux 系统。如果是在 Windows 上运行 AirSim,可以使用 Windows Subsystem for Linux (WSL) 来运行 ROS 包装器,如果不想在主机上安装ROS相关工具,也可以使用Docker容器进行安装。请检查下方内容并按照需求安装,具体内容可以参照最后网址。 如果您的默认 GCC 版本不是8或更高版.

AMOVLAB(阿木实验室) 1776

opengl 场景_造轮子:一个软渲染和一个基于OpenGL的完整场景

之前造的两个轮子,一个是C++写的CPU光栅化渲染器,另一个是一个完整的场景,用的C++和OpenGL。造轮子是为了光栅化的基础细节和对渲染底层(图形API层)的探索。我更多的时间精力投入到multiple scattering这个工程里了,这个工程想法更多挖得也更深:Marcus Xie:含Multiple Scattering的IBL的Three.js实现​zhuanlan.zhihu.com...

weixin_32568295的博客 657

RAP BDL 里的 field ( readonly ) 到底控制了什么?——从语法到运行时的全景解析

RAP行为定义中的只读字段控制 摘要:该代码片段展示的是RAP(ABAP RESTful Application Programming)行为定义语言(BDL)中的字段控制语法,用于声明业务对象中需由框架自动维护的只读字段。field ( readonly )语句将订单ID和审计字段(CreatedBy/CreatedAt等)标记为只读,确保这些字段在更新阶段不可修改。在managed场景下,RAP框架会自动处理这些行政性数据的写入:创建时填充创建信息,更新时刷新变更记录,并利用LocalLastChang

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 154

从零构建游戏引擎:核心架构、C++实践与OpenGL渲染指南

游戏引擎作为游戏开发的核心框架,其本质是一套集成渲染、物理、音频、资源管理等子系统的软件架构。其核心原理在于通过模块化设计,将通用功能抽象为可复用的组件,从而提升开发效率与性能。在技术价值上,自研引擎不仅能提供极致的定制化控制与性能优化,更是深入理解计算机图形学、内存管理与多线程编程的绝佳实践。从应用场景看,无论是追求特定艺术风格的独立游戏,还是对性能有严苛要求的商业项目,掌握引擎底层技术都至关重要。本文聚焦于使用C++和OpenGL,从窗口管理、渲染管线到实体组件系统(ECS),手把手教你构建一个可运行的

weixin_33834910的博客 396

11-16 Fluent结果查看及后处理功能(做动画、监控点)

监控点、面及动画操作

zheaa的博客 1万+

C#怼倍福TwinCAT3:ADS协议封装实战(附完整读写源码+避坑清单)

变量名大小写敏感:PLC里定义的是GVL.bStart,你写GVL.BStart绝对读不到;数组访问格式:PLC数组是,C#里读单个元素要写,读整个数组不用写索引;句柄要释放:用创建的句柄,一定要用using包起来,否则会占着资源;PLC必须运行:哪怕变量定义对了,PLC没Run(只是Login)也读不到数据;路由配置:如果上位机和PLC不在一个网段,要在TwinCAT3里添加路由(Router→Edit Routes)。倍福ADS通信其实不难,核心就是“配置对+变量名写对+数据类型匹配”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 949

Unity中Raymarching渲染器实现:从SDF到光影的完整指南

在计算机图形学中,渲染技术决定了虚拟世界的视觉呈现。传统光栅化基于三角形网格,而距离场(SDF)则通过数学函数定义几何形状,为渲染提供了新的范式。Raymarching(光线步进)正是基于SDF的核心算法,它通过从摄像机发射光线并逐步前进,利用SDF值安全推进,直至命中表面或超出范围。这种技术突破了网格建模的限制,能高效渲染平滑曲面、复杂分形和动态体积等难以用三角形表达的效果。其技术价值在于将程序化生成与实时渲染结合,极大提升了视觉表达的灵活性与艺术风格化能力。在游戏开发、动态特效、建筑可视化等领域,Ray

weixin_30906185的博客 339

Openclaw错误分析与解决方案之:All models are temporarily rate-limited. Please try again in a few minutes

Openclaw错误分析与解决方案之: All models are temporarily rate-limited. Please try again in a few minutes.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1618

Unity6自定义渲染管线实战:从零构建LiteRP与RenderGraph应用

渲染管线是实时图形应用的核心架构,它定义了从三维场景数据到最终屏幕像素的完整绘制流程。其基本原理在于通过CPU组织渲染命令,由GPU执行顶点处理、光栅化、像素着色等阶段。掌握自定义渲染管线技术,对于实现独特的视觉风格、深度优化渲染性能以及适配特定硬件平台具有极高的工程价值,广泛应用于高性能游戏、XR应用及专业可视化领域。本文聚焦于Unity6的可编程渲染管线(SRP)框架,通过构建轻量级渲染管线LiteRP,深入解析了现代声明式渲染架构RenderGraph与智能资源管理组件RTHandleSystem的核

weixin_33743880的博客 313

总结目前开源的视频生成/视频编辑大模型

随着Sora的爆火,视频生成和视频编辑受到了越来越多的关注。这篇博客总结一下目前开源的视频生成和视频编辑的大模型,并分析他们各自的优缺点,以及在自己进行科研任务或者工作中应该如何选用对应的开源模型,希望能给从事这一领域研究和使用的小伙伴们帮助。

沉迷单车的追风少年 3542

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

UE5高斯泼溅插件实战:从视频到实时3D场景的完整指南

三维重建技术旨在从二维图像或视频中恢复真实世界的三维结构与外观,其核心原理是通过多视角几何与计算机视觉算法,将离散的视觉信息融合为连贯的空间表示。传统基于网格(Mesh)的重建流程,往往面临数据量大、计算耗时长、动态光照适配难等挑战。3D Gaussian Splatting(3D-GS,高斯泼溅)作为一种新兴的显式场景表示方法,通过优化数百万个带属性的高斯椭球来表征场景,在保持高视觉保真度的同时,实现了高效的实时渲染。这项技术的工程价值在于,它能够将复杂的现实世界视频,快速转化为游戏引擎中可直接驱动和交互

weixin_30315723的博客 378

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: [从零构建光栅渲染器] 4.透视投影
下一篇: [从零构建光栅渲染器] 6. 顶点和片元着色器的工作原理
尹豆(douysu)
博客等级 码龄9年 151粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值