【多视重建】从Zero-123到One-2-3-45:多视角生成

文章目录
- 摘要
- 一、引言
- 二、相关工作
- 三、Zero-1-to-3
- 3.1.学习如何控制照相机的视角
- 3.2.视角作为条件的扩散
- 3.3三维重构
- 3.4 数据集
- 四、One-2-3-45
- 4.1 Zero123: 视角条件的 2D Diffusion
- 4.2 NeRF优化:将多视图预测提升到三维图像
- 4.3 基于不完美多视图的 神经表面重建
- * 2阶段 源视图选择 和 Groundtruth预测 混合训练
- 4.4 像机位姿估计
- 总结
Zero-1-to-3: Zero-shot One Image to 3D Object
论文:https://arxiv.org/pdf/2303.11328.pdf
摘要
提示:这里可以添加本文要记录的大概内容:
Zero-1-3:只给定一张RGB图像(为了在这种欠约束的设置下进行新的视图合成),利用大规模扩散模型,学习关于自然图像的几何先验。我们的条件扩散模型使用合成数据集来学习对相对摄像机视点的控制,这允许在特定的摄像机转换下生成同一对象的新图像。即使它是在合成数据集上训练的,我们的模型保留了对分布外数据集的zero shot 泛化能力,以及在野外的图像,包括印象派绘画。我们的视点条件扩散方法可以进一步用于从单幅图像的三维重建任务。
One-2-3-45则是在 Zero-123的基础上,进一步将不太一致的多视图像,提升到三维空间(mesh 或 sdf 形式)
一、引言
仅仅从一个相机的角度来看,人类通常能够想象一个物体的三维形状和外观。这种能力可以部分通过依赖几何先验来解释,事实上,我们可以预测在物理世界中不存在(甚至不可能存在)的物体的三维形状,这依赖于人类一生的视觉探索而积累起来的先验知识。
相比之下,大多数现有的3D图像重建方法都是在封闭的世界环境中运行的,因为它们依赖于昂贵的3D注释(如CAD模型)或针对特定类别的先验[37,21,36,67,68,66,25,24]。
在本文中,我们证明了大规模扩散模型,能够学习操纵摄像机视点的控制机制,如稳定扩散[44],以进行zero shot 新视图合成和三维形状重建。现代生成模型(超过50亿张图像),扩散模型是自然图像分布的最新表示,支持从许多角度涵盖了大量的对象。虽然它们是在没有摄像机对应的二维单眼图像上训练的,没有任何对应的图像,但我们可以微调模型,以学习在生成过程中相对摄像机旋转和平移的控制。这些控制允许我们编码任意图像解码到一个不同的我们选择的相机视点。图1显示了我们的结果的几个示例。
本文证明了大型扩散模型已经学习了关于视觉世界的丰富的三维先验,即使它们只在二维图像上进行了训练。第2节中简要回顾一下相关的工作。在第3节中,我们描述了通过微调大型扩散模型来学习相机外显器控制的方法。在第4节提出了几个定量和定性的实验来评估zero shot视图的合成和从单一图像的几何形状和外观的三维重建。
二、相关工作
略
三、Zero-1-to-3
给定一个物体的单一RGB图像 x∈RH×W×3,目标是从不同的相机角度合成该物体的图像。设R∈R3×3和T∈R3 分别为所需视点的相对摄像机旋转和平移。我们的目标是学习一个模型 f,它在这个相机转换下合成了一个新的图像:

我们希望我们估计的 x ^ \hat{x} x^ R.T 在感知上与真实但未被观察到的新视图 xR,T 相似。
由于其训练数据[47]的规模,预先训练好的扩散模型是当今自然图像分布的最先进的表示。然而,我们必须克服两个挑战来创造 f 。首先,大规模生成模型是在不同视点下的各种对象上进行训练的,这些表示并没有明确地编码视点之间的对应关系。其次,生成模型继承了互联网上反映的观点偏见。如下图2所示,稳定扩散倾向于生成具有规范姿态的前置椅子的图像。这两个问题极大地阻碍了从大规模扩散模型中提取三维知识的能力。

3.1.学习如何控制照相机的视角
由于扩散模型是在网络尺度数据上进行训练的,它们对自然图像分布的支持可能涵盖了大多数对象的大多数观点,但这些观点不能在预先训练的模型中得到控制。一旦我们能够教模型一种机制来控制捕捉照片的相机外部功能,那么我们就能解锁执行新视图合成的能力。
为此,给定成对图像及其相机外参的数据集{x,xR,T,R,T},如图3所示,我们微调预训练的扩散模型,以学习对相机参数的控制,而不破坏其他参数的表示。使用具有编码器、去噪U-Net和解码器的潜在扩散架构。在扩散时间步长t∼[1,1000],设c(x,R,T)作为输入视图和相对相机外部信息的嵌入。然后,我们求解以下目标来微调模型:

经过模型εθ 的训练后,推理模型 f 可以通过对以c(x,R,T)为条件的高斯噪声图像进行迭代去噪来生成图像。
推断出微调数据集中看到的对象之外的视角,最终的模型可以为缺乏3D assets 且永远不会出现在微调集中的对象类合成新的视图。
3.2.视角作为条件的扩散
从单一图像进行三维重建需要低级感知(深度、阴影、纹理等) 和高水平的理解(类型、功能、结构等)。因此,我们采用了一种混合调节机制:
在一个流上,将输入图像的CLIP嵌入与(R,T)连接,形成一个“posed CLIP”嵌入c(x,R,T)。我们将交叉注意作为去噪U-Net的条件,其 提供了输入图像的高级语义信息。
在另一个流上,输入图像与被去噪的图像进行通道连接,帮助模型保持被合成的对象的身份和细节。
为了能够应用无分类器引导[19],我们遵循[3:InstructPix2Pix]中提出的类似机制,将输入图像和假设的CLIP嵌入随机设置到一个零向量,并在推理过程中对条件信息进行缩放。
3.3三维重构
在许多应用中,合成一个物体的新视图是不够的。一个完整的三维重建,能够捕获对象的外观和几何形状是理想的。我们采用了一个最近的开源框架,Score Jacobian Chaining (SJC)[53],来优化一个从文本到图像扩散模型的先验的三维表示。然而,由于扩散模型的概率性质,梯度更新是高度随机的。受DreamFusion [38]的启发,SJC中使用的一个关键技术是将无分类器的引导值设置为明显高于通常的值。这种方法减少了每个样本的多样性,但提高了重建的保真度。
如图4所示,与SJC类似,我们随机抽样视点,并执行体渲染。然后,我们用高斯噪声 ε~N(0,1)对得到的图像进行扰动,并通过应用以输入图像x、假设CLIP嵌入c(x,R,、T)和时间步长T为条件的U-Net εθ 对其进行去噪,以近似于无噪声输入xπ:


其中,∇LSJC 是由[53]引入的PAAS分数。此外,我们还使用MSE损失来优化输入视图。为了进一步规范NeRF表示,我们还对每个采样视点应用深度平滑性损失,并应用近视图一致性损失来规范附近视图之间的外观变化。
3.4 数据集
我们使用最近发布的Objaverse[8]数据集进行微调,这是一个大规模的开源数据集,包含由100K+艺术家创建的800K+ 3D模型。虽然它没有像ShapeNet [4]这样明确的类标签,但它体现了大量几何形状丰富的高质量3D模型,其中许多具有细粒度的细节和材料属性。对于数据集中的每个对象,我们随机抽取12个相机外部矩阵,我指向对象的中心,并使用光线追踪引擎渲染12个视图。在训练时,每个对象可以采样两个视图,形成一个图像对(x、xR,T)。相应的相对视点变换(R,T)去了两个视点之间的映射,可以很容易地从两个外部矩阵中导出。
四、One-2-3-45
给定一幅图像,首先使用 view-conditioned 二维扩散模型 Zero123,生成对应的多视图图像,然后将它们提升到三维空间。由于传统的重建方法存在不一致的多视图预测,我们基于sdf的广义神经表面重建方法构建了三维重建模块,并提出了几种关键的训练策略来实现360度网格(mesh)的重建,能产生更好的几何形状和三维一致的结果。此外,还集成了现成的文本到图像的扩散模型。
这项工作是一个通用的解决方案,将任何类别的图像,变成一个高质量的3D纹理网格(mesh)。与3D数据相比,2D图像更容易获得和可扩展。最近的二维生成模型(如DALLE 、Imagen 和Stable Diffusion)和视觉语言模型(如CLIP )通过对互联网规模的图像数据集进行预训练取得了重大进展。一个新兴领域,如DreamField, DreamFusion, and Magic3D,常用可微渲染和CLIP模型或二维扩散模型的指导来执行每个形状的优化。其中神经场是优化中最常用的表示。其缺点:1.耗时 2.内参紧张 3.三维不一致 4.不好的纹理。
4.1 Zero123: 视角条件的 2D Diffusion
最近的工作[23:Lora,91:Adding conditional control to text-to-image diffusion models]表明,预训练2D Diffusion 的微调允许我们在扩散模型中添加各种条件控制,并根据特定条件生成图像。条件,如canny 边缘、用户涂鸦、深度和法线图,已经被证明是有效的[91]。
Zero123 旨在为 2D Diffusion添加视点条件控制:微调成对图像上的相对相机转换,由大规模3D数据集[11]合成。其假设对象以坐标系的原点为中心,并使用一个球形摄像机,即摄像机被放置在球体的表面上,并且总是查看原点。对于两个相机姿态(θ1,ϕ1,r1)和(θ2,ϕ2,r2)分别表示极角、方位角和半径,目标模型:f(x1,θ2−θ1,ϕ2−ϕ1,r2−r1)在感知上与x2 相似,其中x1和x2是从不同视图捕获的一个物体的两幅图像。
4.2 NeRF优化:将多视图预测提升到三维图像
给定一张图像,首先使用Zero123生成32张多视图图像(相机姿态从球面均匀采样);然后用基于nerf的方法(TensoRF [48])和基于SDF的方法(NeuS [74]),分别优化密度和SDF场。效果如图3:由于zero 123预测不一致,产生了大量的扭曲和漂浮物。在图4中,我们将Zero123的预测与GroundTruth 的效果进行比较,总体PSNR不高,特别是当输入相对姿态很大或目标姿态在不寻常的位置(例如,从底部或顶部)。


然而,mask IoU(大多数区域大于0.95)和CLIP相似性相对较好。表明Zero123倾向于产生在感知上与GroundTruth 相似的预测,并具有相似的轮廓或边界,但像素级的外观可能并不完全相同,这种不一致对于传统的基于优化的方法已经是致命的。
4.3 基于不完美多视图的 神经表面重建
不使用基于优化的方法,重建模块基于一个可推广的SDF重建方法SparseNeuS(MVSNeRF 的一个变体),它结合了多视图立体、神经场景表示和体积渲染。如图2所示,我们的重建模块将多个源图像与相应的摄像机位姿作为输入,并在一次前馈通道中生成一个纹理网格。

如图2所示,重建模块以m个姿态的源图像作为输入,首先使用二维特征网络提取 m 个二维特征图。接下来,该模块构建一个三维cost volume(代价体),其内容由 每个三维体素投影到m个二维特征平面,对应的 m 个投影二维位置的特征的方差计算得到。然后使用一个稀疏的3D CNN来处理cost volume,以获得一个对输入形状的基础几何形状进行编码的的几何 volume。为了预测任意三维点上的SDF,MLP网络从几何编码体中获取三维坐标及其相应的插值特征作为输入。为了预测一个三维点的颜色,另一个MLP网络以投影位置的二维特征,从几何体中插值特征,以及相对于源图像的查看方向的查询光线的查看方向作为输入。该网络预测每个源视图的混合权重,并将三维点的颜色预测为其投影颜色的加权和。最后,将一种基于sdf的渲染技术应用于两个MLP网络之上,用于RGB和深度渲染[74:Neus]。
* 2阶段 源视图选择 和 Groundtruth预测 混合训练
SparseNeuS 只演示了正面视图重建,但我们通过以特定的方式选择源视图并在训练过程中添加深度监督,在一次前馈通道中重建360度网格。具体来说,我们的重建模型是在一个三维对象数据集上训练的,同时冻结zero 123。我们遵循Zero123来规范化训练形状,并使用一个球形摄像机模型。对于每个形状,我们首先渲染n个GroundTruth RGB和来自n个相机姿态的深度图像,均匀地放置在球体上。对于n个视图中的每一个,我们使用Zero123来预测附近的四个视图。
训练时,我们将所有4个具有GroundTruth 姿态的×n预测输入重建模块,并随机选择n个地面真实RGB图像视图中的一个作为目标视图。我们将这种视图选择策略称为2阶段的源视图选择。我们用GT的RGB和深度值来监督训练。通过这种方式,该模块可以学习处理来自Zero123的不一致的预测,并重建一个一致的360◦网格。我们认为,我们的两级源视图选择策略是至关重要的,因为从球面统一选择n×4个源视图会导致相机姿态之间的距离更大。然而,基于cost volume 的方法[40,28,6]通常依赖于非常接近的源视图来找到局部相关性。此外,如图4所示,当相对姿态较小时(例如,相距10度),Zero123可以提供非常准确和一致的预测,因此可以用来寻找局部对应和推断几何形状。
训练时,我们在第一阶段使用n个GroundTruth 渲染,使深度损失更好的监督。然而,在推理过程中,我们可以用Zero123预测替换n个GroundTruth 渲染,如图2所示,并且不需要深度输入。我们将在实验中表明,这种GroundTruth 预测混合训练策略也很重要。为了导出纹理网格,我们使用 marching cubes [41]从预测的SDF字段中提取mesh,并查询 Neus 中描述的网格顶点的颜色。虽然我们的重建模块是在三维数据集上训练的,但我们发现它主要依赖于局部对应,可以很好地推广到看不见的形状。
4.4 像机位姿估计
我们的重建模块需要4×n源视图图像的像机位姿。请注意,我们采用Zero123来进行图像合成,它在一个标准的球面坐标系中,(θ,ϕ,r)中参数化摄像机。虽然我们可以任意调整方位角ϕ和半径r所有源视图图像同时,导致相应的旋转和比例重建对象,这个参数化需要知道一个相机的绝对仰角θ,在一个标准的XYZ框架中确定所有相机的相对位姿。具体地,相机(θ0,ϕ0,r0)和相机(θ0+∆θ,ϕ0+∆ϕ ,r0)对不同θ0 的相对姿态也不同,即使∆θ和∆ϕ是相同的。因此,同时改变所有源图像的elevation angle仰角(例如,上升30度或下降30度)将导致重建形状的扭曲(示例见图10)。
因此,我们提出了一个仰角估计模块来推断输入图像的仰角(elevation angle)。首先,我们使用Zero123来预测输入图像的四个附近视图。然后,我们以从粗到细的方式列举所有可能的仰角。对于每个高程候选角,我们计算四张图像对应的相机姿态,并计算这组相机姿态的重投影误差,以测量图像和相机姿态之间的一致性。通过结合输入视图的姿态和相对姿态,使用重投影误差最小的仰角来生成所有4×n源视图的相机姿态。(重投影误差,请参阅补充资料)。
总结
相关文章:
【多视重建】从Zero-123到One-2-3-45:多视角生成
文章目录 摘要一、引言二、相关工作三、Zero-1-to-33.1.学习如何控制照相机的视角3.2.视角作为条件的扩散3.3三维重构3.4 数据集 四、One-2-3-454.1 Zero123: 视角条件的 2D Diffusion4.2 NeRF优化:将多视图预测提升到三维图像4.3 基于不完美多视图的 神经表面重建*…...
(四)Unity开发Vision Pro——参考文档
4.参考文档 4.1 支持的功能和组件 4.1.1 支持的 Unity 功能和组件 大多数 Unity 组件无需修改即可在此平台上运行 - 包括大多数自定义 MonoBehaviours、动画逻辑、物理、输入处理、资产管理、AI 等。然而,需要渲染的组件需要特殊的支持。因此,一些组件…...
【Linux】简单线程池的设计与实现 -- 单例模式
前言对锁的封装整体代码LockGuard - RALLRALLMutex封装 对线程创建的封装整体代码成员函数解释声明 业务处理封装-加减乘除(可有可无)整体代码成员函数解释声明 线程池的设计与实现整体代码成员函数解释声明 展示 前言 线程池: 一种线程使用模式。线程过…...
[RoarCTF 2019Online Proxy]sql巧妙盲注
文章目录 [RoarCTF 2019Online Proxy]sql巧妙盲注解题脚本脚本解析 [RoarCTF 2019Online Proxy]sql巧妙盲注 解题 在源代码界面发现:Current Ip 我们会联想到:X-Forwarded-For来修改ip: 结果我们发现,response会讲Last Ip回显出…...
flutter开发实战-just_audio实现播放音频暂停音频设置音量等
flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放,这里使用just_audio来实现播放音频暂停音频设置音量等 一、引入just_audio 在pubspec.yaml引入just_audio just_audio: ^2.7.0在iOS上,video_p…...
【Bert101】最先进的 NLP 模型解释【01/4】
0 什么是伯特? BERT是来自【Bidirectional Encoder Representations from Transformers】变压器的双向编码器表示的缩写,是用于自然语言处理的机器学习(ML)模型。它由Google AI Language的研究人员于2018年开发,可作为…...
c语言经典例题讲解(输出菱形,喝汽水问题)
目录 一、输出菱形 二、喝汽水问题 方法1:一步一步来 方法二:直接套公式 一、输出菱形 输出类似于下图的菱形: 通过分析:1、先分为上下两部分输出 2.在输出前先输出空格 3.找规律进行输出 可知,可令上半部分lin…...
【Flutter】【基础】CustomPaint 绘画功能(一)
功能:CustomPaint 相当于在一个画布上面画画,可以自己绘制不同的颜色形状等 在各种widget 或者是插件不能满足到需求的时候,可以自己定义一些形状 使用实例和代码: CustomPaint: 能使你绘制的东西显示在你的ui 上面&a…...
iOS 实现图片高斯模糊效果
效果图 用到了 UIVisualEffectView 实现代码 - (UIVisualEffectView *)bgEffectView{if(!_bgEffectView){UIBlurEffect *blur [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];_bgEffectView [[UIVisualEffectView alloc] initWithEffect:blur];}return _bgEffect…...
[保研/考研机试] KY7 质因数的个数 清华大学复试上机题 C++实现
描述 求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如1202*2*2*3*5,共有5个质因数。 输入描述: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。 输出描述: 对于每组数…...
初识Redis
目录 认识Redis分布式系统Redis的特性Redis的应用场景Redis客户端Redis命令 认识Redis 上面一段话是官网给出的对Redis的介绍,in-memory data store表明Redis是在内存中存储数据的,这和我们接触的其他数据库就有很大的不同,比如MySQL…...
每天一道leetcode:115. 不同的子序列(动态规划困难)
今日份题目: 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数。 题目数据保证答案符合 32 位带符号整数范围。 示例1 输入:s "rabbbit", t "rabbit" 输出:3 解释: 如下所…...
服务器数据恢复-RAID5多块磁盘离线导致崩溃的数据恢复案例
服务器数据恢复环境: DELL POWEREDGE某型号服务器中有一组由6块SCSI硬盘组建的RAID5阵列,LINUX REDHAT操作系统,EXT3文件系统,存放图片文件。 服务器故障&分析: 服务器raid5阵列中有一块硬盘离线,管理员…...
NO.2 MyBatis框架:创建Mapper接口和映射文件,实现基本增删改查
目录 1、Mapper接口和映射文件关系 2、Mapper接口和映射文件的命名规则 2.1 Mapper接口的命名规则 2.2 映射文件的命名规则 3、Mapper接口和映射文件的创建及增删改查的实现 3.1 Mapper接口和映射文件的创建 3.2 增删改查的实现 3.2.1表结构 3.2.2 创建表User对应的实…...
【JS】怎么提取object类的内容
需求:在网页端中通过getElementsByClassName获取到一个元素,想提取其中的数字内容做个if判断,奈何一直提取不了 开始获取元素时,以为默认就是字符类型;但使用操作字符的函数就失败,然后就考虑数据类型是不是…...
分布式系统的 38 个知识点
天天说分布式分布式,那么我们是否知道什么是分布式,分布式会遇到什么问题,有哪些理论支撑,有哪些经典的应对方案,业界是如何设计并保证分布式系统的高可用呢? 1. 架构设计 这一节将从一些经典的开源系统架…...
机器学习基础(二)
线性回归 误差是独立并且具有相同的分布通常认为服从均值为0方差为的高斯分布。 损失函数(loss Function)/代价函数(Cost Function) 其实两种叫法都可以,损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随…...
Java 实现Rtsp 转rtmp,hls,flv
服务支撑:FFmpeg srs(流媒体服务器) 整个流程是 FFmpeg 收流转码 推 rtmp 到流媒体服务 流媒体服务再 分发流到公网 搭建流媒体服务: 1. SRS (Simple Realtime Server) | SRS (本例子使用的是SrS 安装使用docker ) 2.GitHub - ZLMedi…...
机器学习基础(三)
逻辑回归 场景 垃圾邮件分类 预测肿瘤是良性还是恶性 预测某人的信用是否良好 正确率与召回率 正确率与召回率(Precision & Recall)是广泛应用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。 一般来说,正确率就是检索出来的条目有多少是正确的,召回率就…...
Kubeadm安装K8s集群
一、硬件环境 准备3台Linux服务器,此处用Vmware虚拟机。 主机名CPU内存k8smaster2核4Gk8snode12核4Gk8snode22核4G 二、系统前置准备 配置三台主机的hosts文件 cat << EOF > /etc/hosts 192.168.240.130 k8smaster 192.168.240.132 k8snode1 192.168.…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
