Direct3D融合技术

这篇具有很好参考价值的文章主要介绍了Direct3D融合技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该技术能使我们将当前要进行光栅化的像素的颜色与先前已已光栅化并处于同一位置的像素的颜色进行合成,即将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成(混合),利用该技术我们可得到各种各样的效果,尤其是透明效果。

在融合运算时需要遵循:首先绘制那些不需要进行融合的物体,然后将需要进行融合的物体按照相对于摄像机的深度值进行排序,如果物体已处于观察坐标系中,该运算的效率会相当高,因为此时只需要对Z分量进行排序,最后按照自后往前的顺序逐个绘制将要进行融合运算的物体。

融合处理公式

Direct3D融合技术,3d学习,3d

这个公式中每个变量都是一个4D颜色向量(r,g,b,a),中间符号表示分量逐个相乘

OutpurPixel:融合后的颜色值
SourcePixel:当前计算得到的、用于与后台缓存中对应像素进行融合的像素颜色值
SourceBlendFactor:源融合因子,指定了源像素的颜色值在融合中所占比例,该值在区间[0,1]
DestPixel:当前处于后台缓存中的像素颜色值
DestBlendFactor:目标融合因子,指定了目标像素的颜色值在融合中所占的比例,该值在区间[0,1]内

源融合因子和目标融合因子使我们可以各种方式修改源像素和目标像素的颜色值,从而获得各种不同的效果,Direct3D中默认状态下是禁止融合运算的,可将绘制状态D3DRS_ALPHABLENDENABLE设为true便启用了融合运算,融合计算的开销并不低,所以应该仅在必需的场合中使用,当绘制完需要进行融合的几何体之后,应禁止Alpha融合,在对三角形单元组进行融合时,最好进行批处理,之后应立即绘制出来,这样就可避免在每帧图像中都启用了禁止融合运算。

Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);

//融合运算  Draw...

Device->SetRenderState(D3DRS_ALPHABLENDENABLE, false);

融合因子

可通过设置绘制状态D3DRS_SRCBLENDD3DRS_DESTBLEND的值来对源融合因子和目标融合因子分别进行设定。

//Source、Destination  填D3DBLEND枚举
Device->SetRenderState(D3DRS_SRCBLEND, Source);
Device->SetRenderState(D3DRS_DESTBLEND, Destination);

透明度

每个顶点颜色中的Alpha分量与颜色值类似,都是沿着三角形到单元表面渐变的,但它并非用于确定某像素的颜色值,而是用于确定像素的Alpha分量,Alpha分量主要用于指定像素的透明度,假定为每个像素的Alpha分量保留8位,则合法区间为[0,255],Alpha为0时元素完全透明,为255则完全不透明,为了能使Alpha分量来描述像素的透明度,必须将融合因子和目标融合因子分辨设置为D3DBLEND_SRCALPHAD3DBLEND_INVSRCALPHA,这些值恰好也是融合因子的默认值。

Alpha通道

我们并不直接使用计算得到Alpha分量,而往往是从纹理的Alpha通道中获取Alpha信息,Alpha通道是保留给存储了Alpha分量的纹理元的一个额外的位集合,当纹理映射到某个图元中时,Alpha通道中的Alpha分量也进行了映射,并成为了该图元中像素的Alpha分量。

指定Alpha来源

默认状态下,如果当前设置的纹理拥有一个Alpha通道,Alpha值就取自该Alpha通道,如果没有Alpha通道,Alpha值就取自顶点的颜色,也可以用下列绘制状态来指定Alpha值的来源(漫反射颜色值或Alpha通道)

//漫反射颜色值
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

//纹理的Alpha通道
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

用DirectX Texture Tool创建Alpha通道

最常见的图像文件格式中不含有Alpha信息,可以用DirectX纹理工具创建一个具有Alpha通道的DDS文件,DDS文件是一种专门为DirectX应用程序和纹理设计的图像格式。可使用D3DXCreateTextureFromFile函数将DDS文件加载到纹理中。

使用该工具打开图片后会自动加载为24位的RGB纹理(红、绿、蓝分量各占8位),如果想扩展为32位的ARGB格式的纹理,选择菜单中Format然后选择Change Surface Format命令,选择A8R8G8B8格式并确定就创建了一幅像素颜色深度为32位的图像,接下来的任务是将数据加载到Alpha通道中,选择菜单File,然后选择Open Onto Alpha Channel Of This Texture命令,找到要加载到该Alpha通道的数据的图像文件后就完成在Alpha通道作用下的纹理图了,保存后命名为xxx.dds文章来源地址https://www.toymoban.com/news/detail-731418.html

到了这里,关于Direct3D融合技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Direct3D 12——模板——平面镜效果

    1.将实物照常渲染到后台缓冲区内(不包括镜子)。注意,此步骤不修改模 板缓冲区。 2.清理模板缓冲区,将其整体置零。 将实物都绘制到后台缓冲区中,并将模板缓冲区清理为0 (用浅灰色来表示)。 绘制在模板缓冲区中的黑色轮廊线条反映的是:后台缓冲区与模板缓冲区

    2023年04月21日
    浏览(37)
  • Direct3D 12——计算着色器——计算着色器概念

    计算着色器虽然是一种可编程的着色器,但Direct3D并没有将它直接归为渲染流水线中的一部分。虽然如此,但位于流水线之外的计算着色器却可以读写GPU资源。从本质上来说,计算着 色器能够使我们访问GPU来实现数据并行算法,而不必渲染出任何图形。由于计算着色器是Dir

    2024年02月03日
    浏览(40)
  • Character Animation With Direct3D 读书笔记

    2D动画:循环播放多张图片 3D动画: 骨骼动画、变形动画 Win32 应用程序 Application类:处理主程序循环,图形设备的初始化 Init:加载资源并创建图形设备 Update:更新游戏世界,移动对象,更新物理引擎 Render:渲染所有对象,并将结果呈现给屏幕 Quit Cleanup DirectX 渲染循环:

    2024年02月12日
    浏览(41)
  • d3d12龙书阅读----Direct3D的初始化

    使用d3d我们可以对gpu进行控制与编程,以硬件加速的方式来完成3d场景的渲染,d3d层与硬件驱动会将相应的代码转换成gpu可以执行的机器指令,与之前的版本相比,d3d12大大减少了cpu的开销,同时也改进了对多线程的支持,但是使用的api也更加复杂。 接下来,我们将先介绍在

    2024年03月12日
    浏览(45)
  • 三维引擎基础概述(Direct3D、OpenGL、UE、U3D、threejs等)

    一般而言,三维引擎是在三维底层图形技术的基础上,封装硬件操作与三维图形算法,形成普遍意义上的三维交互引擎,提供给开发者一个简单易用、功能丰富的三维图形环境,在此基础上进行虚拟现实、三维交互、可视化管理平台二次开发等,极大提高开发效率。 【底层图

    2024年02月11日
    浏览(47)
  • web3D三维引擎(Direct3D、OpenGL、UE、U3D、threejs)基础扫盲

    三维引擎是指用于创建和渲染三维图形的软件框架。它们通常提供了图形处理、物理模拟、光照、碰撞检测等功能,帮助开发者构建逼真的三维场景和交互体验。在这里,我将为您详细介绍一些常见的三维引擎,包括Direct3D、OpenGL、Unreal Engine、Unity3D和Three.js。 Direct3D是由微软

    2024年02月11日
    浏览(59)
  • DirectX12_Windows_GameDevelop_3:Direct3D的初始化

    查看龙书时发现, 第四章介绍预备知识的代码不太利于学习 。因为它不像是LearnOpenGL那样从头开始一步一步教你敲代码,导致你没有一种整体感。 如果你把它当作某一块的代码进行学习,你跟着敲会发现,总有几个变量是没有定义的。这是因为书上的代码都是把框架里的某

    2024年02月08日
    浏览(43)
  • 【C/C++】使用C++和Direct3D (d3d)获取屏幕截图并根据传入分辨率进行缩放图片大小

    目录 一,函数清单 1.Direct3DCreate9 函数 2.IDirect3D9::CreateDevice 方法 3.IDirect3DDevice9::GetDisplayMode 方法 4.IDirect3DDevice9::CreateOffscreenPlainSurface 方法 5.IDirect3DDevice9::GetFrontBufferData 方法 6.IDirect3DDevice9::D3DXLoadSurfaceFromSurface 方法 7. D3DXSaveSurfaceToFile 函数 二,关键代码实现 三,最终实现

    2024年01月18日
    浏览(48)
  • 在direct3D中,透明度处理和D2D1_ALPHA_MODE_PREMULTIPLIED含义?

    D2D1_ALPHA_MODE_PREMULTIPLIED 是 Direct2D 中定义的一种 Alpha 模式,用于描述像素颜色值和其 Alpha 通道(透明度)之间的关系。 在非预乘 Alpha (Straight or Unpremultiplied Alpha) 图像中,每个颜色分量(红、绿、蓝)是独立于 Alpha 值的。而在预乘 Alpha 图像中,每个颜色分量已经被其对应的

    2024年01月25日
    浏览(45)
  • direct3d-msaa-抗锯齿算法-教程-涉及概念解析

    交换链(Swap Chain)在计算机图形学和窗口系统中是一个核心概念,它主要用于管理一组缓冲区(通常是帧缓冲区),这些缓冲区用于存储渲染的图像,并且有序地与屏幕显示进行交替更新。 窗口系统中的交换链: 在Windows、Linux等操作系统上的窗口环境中,交换链与图形API(

    2024年01月24日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包