区块链技术博客
www.b2bchain.cn

使用深度测试计算图元可见性求职学习资料

本文介绍了使用深度测试计算图元可见性求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

Calculating Primitive Visibility Using Depth Testing | Apple Developer Documentation

通过深度纹理来确定场景中哪些像素是可见的。

介绍了Metal中深度测试的原理和应用场景,以及如何配置深度测试。

翻译术语表

概述

当图形图元相互重叠时,默认情况下,Metal会按照绘图命令提交顺序进行渲染。这种确定可见性的方法被称为油画算法(painter’s algorithm),因为它类似于在表面涂颜料。最后一层总是可见的。然而,这种方法不足以渲染复杂的3D场景。为了独立与提交顺序确定可见性,需要添加背面剔除(hidden-surface removal)。Metal提供了深度测试,作为在渲染每个片元时确定其可见性的方法。

深度是衡量从观察位置到特定像素的距离。当使用深度测试时,会在渲染通道中添加一个深度纹理(depth texture)(有时称为深度缓冲区(depth buffer))。深度纹理为每个像素存储一个深度值,就像颜色纹理存储颜色值一样。通常通过计算每个顶点的深度,让硬件对这些深度值进行插值,来确定如何计算每个片元的深度值。GPU会测试新的片元,看它们是否比深度纹理中存储的当前值更接近观察位置。如果一个片元离得更远,GPU就会丢弃该片元。否则,它会更新像素数据,包括新的深度值。因为GPU会测试所有片元的深度,所以即使三角形部分被遮挡,它也能正确地渲染。

使用深度测试计算图元可见性

这个示例通过显示一个三角形,并让你改变每个顶点的深度值来演示深度测试。每个片元的深度在为三角形顶点设置的深度值之间进行插值,程序配置GPU以执行上述深度测试。每次执行渲染通道时,都会清除深度纹理的数据,然后在中间点渲染一个灰色的方块。最后,渲染通道会渲染三角形。只有比灰色方块更接近观察者的片元才是可见的。

本示例只演示了如何使用深度测试。它不覆盖渲染3D场景的概念。

创建深度纹理

默认情况下,MTKView不创建深度纹理。要添加深度纹理,把depthStencilPixelFormat属性设置为要用于深度纹理的数据格式。视图会自动创建和管理它们。

mtkView.depthStencilPixelFormat = MTLPixelFormatDepth32Float;

本示例为每个像素使用了32位浮点深度值。你可以按照自身需求,选择一个合适的格式。

指定渲染管线中的深度格式

要启用渲染管线的深度测试,在创建渲染管线时,设置描述符的depthAttachmentPixelFormat属性,如下所示:

pipelineStateDescriptor.depthAttachmentPixelFormat = mtkView.depthStencilPixelFormat;

与颜色格式一样,渲染管线需要有关深度纹理的格式信息,以便它能够读取或写入纹理中的值。指定用来配置视图相同的深度格式。当添加深度纹理时,Metal会在渲染管线上启用额外的阶段:

使用深度测试计算图元可见性

配置深度测试

在Metal中,深度测试可以独立于渲染管线配置,所以可以一起进行渲染管线和深度测试的配置。深度测试由MTLDepthStencilState对象表示,就像配置渲染管线那样,通常在初始化程序时创建这个对象,并且只要你执行该测试,就会保留它对引用。

在上述对流程图中,当新的深度值小于深度纹理中目标像素的现有值时,深度测试就会通过,这表明该片元比之前在那个位置渲染的任何东西都接近观察者。当深度测试通过后,片元的颜色值被写入颜色渲染附件,新的深度值被写入深度附件。这段代码展示了如何配置深度测试:

“`
MTLDepthStencilDescriptor *depthDescriptor = [MTLDepthStencilDescriptor new];

Calculating Primitive Visibility Using Depth Testing | Apple Developer Documentation

通过深度纹理来确定场景中哪些像素是可见的。

介绍了Metal中深度测试的原理和应用场景,以及如何配置深度测试。

翻译术语表

概述

当图形图元相互重叠时,默认情况下,Metal会按照绘图命令提交顺序进行渲染。这种确定可见性的方法被称为油画算法(painter’s algorithm),因为它类似于在表面涂颜料。最后一层总是可见的。然而,这种方法不足以渲染复杂的3D场景。为了独立与提交顺序确定可见性,需要添加背面剔除(hidden-surface removal)。Metal提供了深度测试,作为在渲染每个片元时确定其可见性的方法。

深度是衡量从观察位置到特定像素的距离。当使用深度测试时,会在渲染通道中添加一个深度纹理(depth texture)(有时称为深度缓冲区(depth buffer))。深度纹理为每个像素存储一个深度值,就像颜色纹理存储颜色值一样。通常通过计算每个顶点的深度,让硬件对这些深度值进行插值,来确定如何计算每个片元的深度值。GPU会测试新的片元,看它们是否比深度纹理中存储的当前值更接近观察位置。如果一个片元离得更远,GPU就会丢弃该片元。否则,它会更新像素数据,包括新的深度值。因为GPU会测试所有片元的深度,所以即使三角形部分被遮挡,它也能正确地渲染。

使用深度测试计算图元可见性

这个示例通过显示一个三角形,并让你改变每个顶点的深度值来演示深度测试。每个片元的深度在为三角形顶点设置的深度值之间进行插值,程序配置GPU以执行上述深度测试。每次执行渲染通道时,都会清除深度纹理的数据,然后在中间点渲染一个灰色的方块。最后,渲染通道会渲染三角形。只有比灰色方块更接近观察者的片元才是可见的。

本示例只演示了如何使用深度测试。它不覆盖渲染3D场景的概念。

创建深度纹理

默认情况下,MTKView不创建深度纹理。要添加深度纹理,把depthStencilPixelFormat属性设置为要用于深度纹理的数据格式。视图会自动创建和管理它们。

mtkView.depthStencilPixelFormat = MTLPixelFormatDepth32Float;

本示例为每个像素使用了32位浮点深度值。你可以按照自身需求,选择一个合适的格式。

指定渲染管线中的深度格式

要启用渲染管线的深度测试,在创建渲染管线时,设置描述符的depthAttachmentPixelFormat属性,如下所示:

pipelineStateDescriptor.depthAttachmentPixelFormat = mtkView.depthStencilPixelFormat;

与颜色格式一样,渲染管线需要有关深度纹理的格式信息,以便它能够读取或写入纹理中的值。指定用来配置视图相同的深度格式。当添加深度纹理时,Metal会在渲染管线上启用额外的阶段:

使用深度测试计算图元可见性

配置深度测试

在Metal中,深度测试可以独立于渲染管线配置,所以可以一起进行渲染管线和深度测试的配置。深度测试由MTLDepthStencilState对象表示,就像配置渲染管线那样,通常在初始化程序时创建这个对象,并且只要你执行该测试,就会保留它对引用。

在上述对流程图中,当新的深度值小于深度纹理中目标像素的现有值时,深度测试就会通过,这表明该片元比之前在那个位置渲染的任何东西都接近观察者。当深度测试通过后,片元的颜色值被写入颜色渲染附件,新的深度值被写入深度附件。这段代码展示了如何配置深度测试:

“`
MTLDepthStencilDescriptor *depthDescriptor = [MTLDepthStencilDescriptor new];

Calculating Primitive Visibility Using Depth Testing | Apple Developer Documentation

通过深度纹理来确定场景中哪些像素是可见的。

介绍了Metal中深度测试的原理和应用场景,以及如何配置深度测试。

翻译术语表

概述

当图形图元相互重叠时,默认情况下,Metal会按照绘图命令提交顺序进行渲染。这种确定可见性的方法被称为油画算法(painter’s algorithm),因为它类似于在表面涂颜料。最后一层总是可见的。然而,这种方法不足以渲染复杂的3D场景。为了独立与提交顺序确定可见性,需要添加背面剔除(hidden-surface removal)。Metal提供了深度测试,作为在渲染每个片元时确定其可见性的方法。

深度是衡量从观察位置到特定像素的距离。当使用深度测试时,会在渲染通道中添加一个深度纹理(depth texture)(有时称为深度缓冲区(depth buffer))。深度纹理为每个像素存储一个深度值,就像颜色纹理存储颜色值一样。通常通过计算每个顶点的深度,让硬件对这些深度值进行插值,来确定如何计算每个片元的深度值。GPU会测试新的片元,看它们是否比深度纹理中存储的当前值更接近观察位置。如果一个片元离得更远,GPU就会丢弃该片元。否则,它会更新像素数据,包括新的深度值。因为GPU会测试所有片元的深度,所以即使三角形部分被遮挡,它也能正确地渲染。

使用深度测试计算图元可见性

这个示例通过显示一个三角形,并让你改变每个顶点的深度值来演示深度测试。每个片元的深度在为三角形顶点设置的深度值之间进行插值,程序配置GPU以执行上述深度测试。每次执行渲染通道时,都会清除深度纹理的数据,然后在中间点渲染一个灰色的方块。最后,渲染通道会渲染三角形。只有比灰色方块更接近观察者的片元才是可见的。

本示例只演示了如何使用深度测试。它不覆盖渲染3D场景的概念。

创建深度纹理

默认情况下,MTKView不创建深度纹理。要添加深度纹理,把depthStencilPixelFormat属性设置为要用于深度纹理的数据格式。视图会自动创建和管理它们。

mtkView.depthStencilPixelFormat = MTLPixelFormatDepth32Float;

本示例为每个像素使用了32位浮点深度值。你可以按照自身需求,选择一个合适的格式。

指定渲染管线中的深度格式

要启用渲染管线的深度测试,在创建渲染管线时,设置描述符的depthAttachmentPixelFormat属性,如下所示:

pipelineStateDescriptor.depthAttachmentPixelFormat = mtkView.depthStencilPixelFormat;

与颜色格式一样,渲染管线需要有关深度纹理的格式信息,以便它能够读取或写入纹理中的值。指定用来配置视图相同的深度格式。当添加深度纹理时,Metal会在渲染管线上启用额外的阶段:

使用深度测试计算图元可见性

配置深度测试

在Metal中,深度测试可以独立于渲染管线配置,所以可以一起进行渲染管线和深度测试的配置。深度测试由MTLDepthStencilState对象表示,就像配置渲染管线那样,通常在初始化程序时创建这个对象,并且只要你执行该测试,就会保留它对引用。

在上述对流程图中,当新的深度值小于深度纹理中目标像素的现有值时,深度测试就会通过,这表明该片元比之前在那个位置渲染的任何东西都接近观察者。当深度测试通过后,片元的颜色值被写入颜色渲染附件,新的深度值被写入深度附件。这段代码展示了如何配置深度测试:

“`
MTLDepthStencilDescriptor *depthDescriptor = [MTLDepthStencilDescriptor new];

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 使用深度测试计算图元可见性求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们