国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在direct3D中,透明度處理和D2D1_ALPHA_MODE_PREMULTIPLIED含義?

這篇具有很好參考價(jià)值的文章主要介紹了在direct3D中,透明度處理和D2D1_ALPHA_MODE_PREMULTIPLIED含義?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.D2D1_ALPHA_MODE_PREMULTIPLIED 含義

D2D1_ALPHA_MODE_PREMULTIPLIED 是 Direct2D 中定義的一種 Alpha 模式,用于描述像素顏色值和其 Alpha 通道(透明度)之間的關(guān)系。

在非預(yù)乘 Alpha (Straight or Unpremultiplied Alpha) 圖像中,每個(gè)顏色分量(紅、綠、藍(lán))是獨(dú)立于 Alpha 值的。而在預(yù)乘 Alpha 圖像中,每個(gè)顏色分量已經(jīng)被其對(duì)應(yīng)的 Alpha 通道所乘過(guò)了。這意味著,如果一個(gè)像素的 Alpha 值不是100%(即不完全不透明),那么它的顏色值也會(huì)被相應(yīng)的淡化。

例如,在預(yù)乘 Alpha 的圖像中,一個(gè)半透明的紅色像素(Alpha = 0.5)的顏色值已經(jīng)進(jìn)行了 Alpha 混合處理,實(shí)際存儲(chǔ)的是半強(qiáng)度的紅色而不是全強(qiáng)度的紅色。

使用 D2D1_ALPHA_MODE_PREMULTIPLIED 作為呈現(xiàn)目標(biāo)或紋理的 Alpha 模式時(shí),Direct2D 在進(jìn)行繪制和混合操作時(shí)會(huì)假設(shè)輸入的顏色數(shù)據(jù)已經(jīng)是預(yù)乘的,并據(jù)此進(jìn)行正確的透明度計(jì)算。這種模式有助于減少在執(zhí)行多次透明度疊加時(shí)出現(xiàn)的顏色失真現(xiàn)象,尤其是在圖形管線中有多層透明內(nèi)容需要正確融合時(shí)。

2.Direct3D10中預(yù)乘設(shè)置

在Direct3D 10中處理透明度預(yù)乘主要涉及到紋理的格式選擇和渲染狀態(tài)的設(shè)置。以下是如何正確設(shè)置以實(shí)現(xiàn)Alpha預(yù)乘:

  1. 紋理格式選擇

    • 如果要使用預(yù)乘Alpha,確保你的紋理包含預(yù)乘過(guò)的顏色值,通常選用支持預(yù)乘Alpha的紋理格式如 DXGI_FORMAT_B8G8R8A8_UNORM_SRGBDXGI_FORMAT_B8G8R8A8_UNORM 并且在加載或創(chuàng)建時(shí)已經(jīng)進(jìn)行了預(yù)乘。
  2. 像素著色器輸出

    • 在像素著色器中,如果你從非預(yù)乘紋理采樣并希望硬件執(zhí)行預(yù)乘混合,你需要手動(dòng)將每個(gè)顏色通道與Alpha通道相乘后輸出到輸出合并階段(OM)。
  3. 渲染狀態(tài)設(shè)置

    • 對(duì)于預(yù)乘Alpha的紋理,不需要特殊的混合模式,因?yàn)轭伾当旧砭褪穷A(yù)乘后的結(jié)果,可以直接進(jìn)行常規(guī)的混合操作。
    • 確保blend state不是針對(duì)非預(yù)乘Alpha設(shè)計(jì)的。對(duì)于預(yù)乘Alpha,通常會(huì)設(shè)置 blend state 的源因子為 (SrcAlpha, One)(One, SrcAlpha) 來(lái)利用預(yù)乘的顏色信息。
  4. 創(chuàng)建Blend State對(duì)象

    • 使用 ID3D10Device::CreateBlendState 方法創(chuàng)建一個(gè)blend state對(duì)象,設(shè)置其描述符(D3D10_BLEND_DESC)中的 SrcBlendDestBlend 成分來(lái)匹配預(yù)乘Alpha所需的混合模式。

例如,若要設(shè)置預(yù)乘Alpha的blend state,可以這樣做:

D3D10_BLEND_DESC blendDesc;
ZeroMemory(&blendDesc, sizeof(blendDesc));
blendDesc.AlphaToCoverageEnable = FALSE;
blendDesc.IndependentBlendEnable = FALSE;
blendDesc.RenderTarget[0].BlendEnable = TRUE;
blendDesc.RenderTarget[0].SrcBlend = D3D10_BLEND_ONE; // 源顏色使用預(yù)乘Alpha,即自身
blendDesc.RenderTarget[0].DestBlend = D3D10_BLEND_INV_SRC_ALPHA; // 目標(biāo)顏色使用源顏色Alpha的反向值
blendDesc.RenderTarget[0].BlendOp = D3D10_BLEND_OP_ADD;
blendDesc.RenderTarget[0].SrcBlendAlpha = D3D10_BLEND_ONE;
blendDesc.RenderTarget[0].DestBlendAlpha = D3D10_BLEND_ZERO;
blendDesc.RenderTarget[0].BlendOpAlpha = D3D10_BLEND_OP_ADD;
blendDesc.RenderTarget[0].RenderTargetWriteMask = D3D10_COLOR_WRITE_ENABLE_ALL;

// 創(chuàng)建Blend State對(duì)象
ID3D10BlendState* pBlendState;
HRESULT hr = m_pDevice->CreateBlendState(&blendDesc, &pBlendState);
if (SUCCEEDED(hr))
{
    // 設(shè)置當(dāng)前blend狀態(tài)
    m_pDevice->OMSetBlendState(pBlendState, 0, 0xffffffff);
}

在繪制帶預(yù)乘Alpha的紋理時(shí),應(yīng)用上述設(shè)置,并確保所有的顏色數(shù)據(jù)都已正確地進(jìn)行了預(yù)乘計(jì)算。

3.清除背景顏色

在Direct2D中,您可以創(chuàng)建一個(gè)完全透明的背景來(lái)繪制對(duì)象。這通常是通過(guò)設(shè)置渲染目標(biāo)(RenderTarget)的背景色或者清除渲染目標(biāo)時(shí)指定完全透明的顏色來(lái)實(shí)現(xiàn)的。

  1. 設(shè)置背景色
    如果您是在窗口或位圖上進(jìn)行繪制,并希望其背景為全透明,首先確保您的渲染目標(biāo)支持透明度,例如使用DXGI_FORMAT_B8G8R8A8_UNORM格式。然后,不需特別去“設(shè)置”背景色為透明,而是應(yīng)當(dāng)避免填充背景色,因?yàn)槟J(rèn)情況下未繪制區(qū)域就是透明的。

  2. 清除渲染目標(biāo)
    若要清空整個(gè)渲染目標(biāo)到透明狀態(tài),可以調(diào)用ID2D1RenderTarget::Clear()方法,并傳入一個(gè)包含透明度值的顏色結(jié)構(gòu)。比如,如果你使用的是包含Alpha通道的顏色結(jié)構(gòu)(如D2D1_COLOR_F),則可以這樣設(shè)置:

D2D1_COLOR_F clearColor = D2D1::ColorF(0.0f, 0.0f, 0.0f, 0.0f); // RGBA,其中A=0表示全透明
d2dRenderTarget->Clear(clearColor);
  1. 窗口透明
    對(duì)于窗口級(jí)別的透明,還需要啟用Windows Aero主題并且利用Desktop Window Manager (DWM) 的效果,可以通過(guò)啟用DWM的透明效果來(lái)實(shí)現(xiàn)窗口內(nèi)容的透明,同時(shí) Direct2D 內(nèi)容也會(huì)正確顯示其透明度。

  2. 層疊順序與混合模式
    要使Direct2D繪制的對(duì)象具有透明效果,不僅僅是背景透明,還涉及到繪制順序以及繪制過(guò)程中使用的混合模式。通常,Direct2D會(huì)按照后繪制的內(nèi)容覆蓋前面內(nèi)容的原則處理透明度,因此要確保正確的繪制順序以實(shí)現(xiàn)預(yù)期的透明疊加效果。

總結(jié)起來(lái),在Direct2D中繪制對(duì)象時(shí),可以直接或間接地讓背景保持透明,并且可以靈活控制每個(gè)繪制對(duì)象自身的透明度。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-823499.html

到了這里,關(guān)于在direct3D中,透明度處理和D2D1_ALPHA_MODE_PREMULTIPLIED含義?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Direct3D 12——燈光——光照模型的概述

    Direct3D 12——燈光——光照模型的概述

    將之前所述的所有光照內(nèi)容都結(jié)合起來(lái),即表面反射的光量相當(dāng)于環(huán)境反射光、漫反射光以及 鏡面反射光的光量總和。 1.環(huán)境光 C a :模擬經(jīng)表面反射的間接光量。 2.漫反射光 C d :對(duì)進(jìn)入介質(zhì)內(nèi)部,又經(jīng)過(guò)表面下吸收而最終散射岀表面的光進(jìn)行模擬。由于對(duì)表 面下的散射光

    2023年04月16日
    瀏覽(21)
  • Direct3D 12——計(jì)算著色器——計(jì)算著色器概念

    Direct3D 12——計(jì)算著色器——計(jì)算著色器概念

    計(jì)算著色器雖然是一種可編程的著色器,但Direct3D并沒(méi)有將它直接歸為渲染流水線中的一部分。雖然如此,但位于流水線之外的計(jì)算著色器卻可以讀寫(xiě)GPU資源。從本質(zhì)上來(lái)說(shuō),計(jì)算著 色器能夠使我們?cè)L問(wèn)GPU來(lái)實(shí)現(xiàn)數(shù)據(jù)并行算法,而不必渲染出任何圖形。由于計(jì)算著色器是Dir

    2024年02月03日
    瀏覽(20)
  • Character Animation With Direct3D 讀書(shū)筆記

    2D動(dòng)畫(huà):循環(huán)播放多張圖片 3D動(dòng)畫(huà): 骨骼動(dòng)畫(huà)、變形動(dòng)畫(huà) Win32 應(yīng)用程序 Application類:處理主程序循環(huán),圖形設(shè)備的初始化 Init:加載資源并創(chuàng)建圖形設(shè)備 Update:更新游戲世界,移動(dòng)對(duì)象,更新物理引擎 Render:渲染所有對(duì)象,并將結(jié)果呈現(xiàn)給屏幕 Quit Cleanup DirectX 渲染循環(huán):

    2024年02月12日
    瀏覽(20)
  • 一、D3D12學(xué)習(xí)筆記——初始化Direct3D

    工廠類IDXGIFactory4,這個(gè)類有兩個(gè)作用: 1.枚舉適配器(顯卡); 2.創(chuàng)建交換鏈 這個(gè)類對(duì)象的創(chuàng)建如下: 用這個(gè)對(duì)象mdxgiFactory枚舉我們可以使用的顯卡等適配器: 對(duì)于一個(gè)選定的適配器pIAdapter,拿著它去創(chuàng)建設(shè)備 IID_PPV_ARGS這個(gè)宏實(shí)際包含了兩個(gè)東西,uuid的COM ID和對(duì)象的指針

    2024年02月10日
    瀏覽(20)
  • d3d12龍書(shū)閱讀----Direct3D的初始化

    使用d3d我們可以對(duì)gpu進(jìn)行控制與編程,以硬件加速的方式來(lái)完成3d場(chǎng)景的渲染,d3d層與硬件驅(qū)動(dòng)會(huì)將相應(yīng)的代碼轉(zhuǎn)換成gpu可以執(zhí)行的機(jī)器指令,與之前的版本相比,d3d12大大減少了cpu的開(kāi)銷,同時(shí)也改進(jìn)了對(duì)多線程的支持,但是使用的api也更加復(fù)雜。 接下來(lái),我們將先介紹在

    2024年03月12日
    瀏覽(19)
  • VTK————3D模型的旋轉(zhuǎn)、交互、透明度設(shè)置

    旋轉(zhuǎn)模型的話可以用到以下例程,但是每次設(shè)置選擇坐標(biāo)時(shí),都是累加的??梢酝ㄟ^(guò)SetOrientation來(lái)將模型方向設(shè)為初試方向。如果三個(gè)坐標(biāo)都使用較大值來(lái)進(jìn)行旋轉(zhuǎn),那么由于累加的特性。模型會(huì)在空間內(nèi)進(jìn)行大幅度的旋轉(zhuǎn)和位移,這是需要注意的。 也可以通過(guò)設(shè)置interacto

    2024年02月10日
    瀏覽(17)
  • 三維引擎基礎(chǔ)概述(Direct3D、OpenGL、UE、U3D、threejs等)

    三維引擎基礎(chǔ)概述(Direct3D、OpenGL、UE、U3D、threejs等)

    一般而言,三維引擎是在三維底層圖形技術(shù)的基礎(chǔ)上,封裝硬件操作與三維圖形算法,形成普遍意義上的三維交互引擎,提供給開(kāi)發(fā)者一個(gè)簡(jiǎn)單易用、功能豐富的三維圖形環(huán)境,在此基礎(chǔ)上進(jìn)行虛擬現(xiàn)實(shí)、三維交互、可視化管理平臺(tái)二次開(kāi)發(fā)等,極大提高開(kāi)發(fā)效率。 【底層圖

    2024年02月11日
    瀏覽(31)
  • DirectX12_Windows_GameDevelop_3:Direct3D的初始化

    DirectX12_Windows_GameDevelop_3:Direct3D的初始化

    查看龍書(shū)時(shí)發(fā)現(xiàn), 第四章介紹預(yù)備知識(shí)的代碼不太利于學(xué)習(xí) 。因?yàn)樗幌袷荓earnOpenGL那樣從頭開(kāi)始一步一步教你敲代碼,導(dǎo)致你沒(méi)有一種整體感。 如果你把它當(dāng)作某一塊的代碼進(jìn)行學(xué)習(xí),你跟著敲會(huì)發(fā)現(xiàn),總有幾個(gè)變量是沒(méi)有定義的。這是因?yàn)闀?shū)上的代碼都是把框架里的某

    2024年02月08日
    瀏覽(28)
  • web3D三維引擎(Direct3D、OpenGL、UE、U3D、threejs)基礎(chǔ)掃盲

    web3D三維引擎(Direct3D、OpenGL、UE、U3D、threejs)基礎(chǔ)掃盲

    三維引擎是指用于創(chuàng)建和渲染三維圖形的軟件框架。它們通常提供了圖形處理、物理模擬、光照、碰撞檢測(cè)等功能,幫助開(kāi)發(fā)者構(gòu)建逼真的三維場(chǎng)景和交互體驗(yàn)。在這里,我將為您詳細(xì)介紹一些常見(jiàn)的三維引擎,包括Direct3D、OpenGL、Unreal Engine、Unity3D和Three.js。 Direct3D是由微軟

    2024年02月11日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包