DirectX11笔记(二)--Direct3D初始化1之基本概念

2024-05-11 22:58

本文主要是介绍DirectX11笔记(二)--Direct3D初始化1之基本概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 纹理 Texture
  • 交换链 Swap Chain
  • 深度缓冲 Depth Buffer
  • 纹理资源视图 Texture Resourse View
  • 多重采样 Multisampling
  • 特征等级 Feature Level


纹理( Texture )

  2D纹理是一个数据元素的矩阵,2D纹理的一种使用场景是存储一张2D图片每一个像素的颜色,但是他一般都不只有这一种用途。在更高级的技术中,比如法线贴图(Normal Mapping),他还可以存储一个3D向量来表示法线信息,而不是存储颜色。纹理可以做很多事情,这些在以后会继续讨论, 但是需要注意,一个纹理只能按一种格式存储,这些格式由枚举值DXGI_FORMAT指定.

交换链( Swap Chain )

  为了避免渲染场景时的闪烁, 最好是将这一帧的所有内容先画到一张离屏的纹理上( back buffer ), 当一帧结束之后一次渲染到屏幕上, 这样观察者就只会看到完整的帧而不是一帧中各个成员的绘制过程. 为了实现这一过程, 硬件会维护两个buffer, 分别称为front bufferback buffer. front buffer存储正在画的帧, back buffer存储下一帧, 当back buffer准备完毕之后, back buffer和front buffer发生交换, 这个交换操作我们把它叫做presenting. presenting本身其实是一个效率很高的操作, 因为实际上它只是改变指针的指向.
swap chain

深度缓冲( Depth Buffer )

  深度缓冲便是纹理不存储图片数据的一种典型应用. 它存储了每一个像素的深度信息, 范围是0.0~1.0, 分别表示从最近到最远. 它的每一像素和back buffer是严格一一对应的.
  假设我们要按照圆柱体, 球体, 圆锥体的顺序进行渲染下图的场景. 深度缓冲的工作模式是: (back buffer一般会事先被清空, 深度缓冲全部是1.0表示最远)d3 < d = 1.0 深度测试通过, P = P3, d = d3; d1 < d 深度测试通过, P = P1, d = d1; d2 > d 深度测试失败不做处理. 最终我们得到像素P的颜色为P1.
深度缓冲
  深度缓冲帮助我们找到距离视点最近的像素点. 深度缓冲也是一张贴图, 它的格式也被DXGI_FORMAT指定, 注意一个应用可以不使用模板缓冲( stencil buffer ), 但使用时一般会和深度缓冲结合使用, 称为深度模板缓冲. 在一张32bits的纹理中, 深度缓冲占24bits, 模板缓冲占8bits.

纹理资源视图( Texture Resourse View )

  纹理可以通过设置特定的标记绑定到渲染管线的不同阶段, 比如作为render target和shader resource. 资源本身不会直接绑定到不同的阶段, 绑定到对应阶段的是资源视图. Direct3D要求我们在初始化阶段创建纹理资源视图, 如果要把一张纹理用作render target和shader resource便需要创建ID3D11RenderTargetView和ID3D11ShaderResourceView. 为了给资源创建特定的视图, 我们需要在创建资源时为资源绑定特定的标记. 比如为没有指定D3D11_BIND_DEPTH_STENCIL标记的资源创建ID3D11DepthStencilView视图将会报错.
  纹理资源视图一般被用于以下两点:
  告诉Direct3D如何使用这个资源
  当资源格式在创建时是无类型格式时, 在创建资源视图时就必须指定其类型. 因此对于无类型格式的纹理, 它的元素可能被视为浮点数或者整数.

多重采样( Multisampling )

  由于像素并不是绝对小的点, 所以在渲染斜线的时候必然出现阶梯状的锯齿, 这种缺陷会随着屏幕分辨率的提高减弱, 但通常不能无节制的提高分辨率, 所以我们会采取一些方法进行抗锯齿操作. 超级采样( Supersampling )便是其中的一种, 他使用两个四倍于原back buffer的纹理作为back buffer和depth buffer, 在提交back buffer之前, 用四个像素的平局值来计算一个像素. 实际上这是在软件层面提高分辨率.
  但是超级采样是极其昂贵的操作, 他相比原来使用了4倍的内存, pixel 处理也是4倍. 对此, Direct3D使用了一种相对妥协的方法: 多重采样抗锯齿. 假设我们使用4倍多重采样抗锯齿, 多重采样的还是需要4倍屏幕分辨率大小的纹理, 但是他不对每一个像素进行计算, 多重采样相较于超级采样节省在先进行位置判断, 这省去了对图形内部不会产生锯齿的像素的重复计算. 他只在边缘进行了类似于超级采样的处理, 减少了抗锯齿的消耗. 但需要注意的是多重采样并没有提升图形内部的画质, 超级采样依旧具有更好的效果, 只不过他也需要更强大的硬件支持.

特征等级( Feature Level )

  特征等级实际上就是Direct3D提供的一个枚举变量, 他严格的表示了当前的API等级, 我们在编程时应该注意设置特征等级, 一种好的做法是维护一个特征等级数组, API等级由高到低存储, 在用户的设备无法支持高版本API时能自动降低到低版本API.

这篇关于DirectX11笔记(二)--Direct3D初始化1之基本概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980894

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识