DirectX png 绘制

13 篇文章 0 订阅
5 篇文章 0 订阅
	//要打开Alpha混合,否则会导致显示图片不正确,比如白茫茫一片
	pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);//开启Alpha混合
	pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);//设置源混合因子,混合因子之源Alpha
	pDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);//设置目标混合因子,混合因子之源Alpha翻转,D3DBLEND_INVSRCALPHA必须使用这个,
如果使用D3DBLEND_INVDESTALPHA会显示黑色

使用注意实现事项,一共两个点:

1.启动Alpha融合

2.D3DBLEND_INVSRCALPHA 必须使用这个才能产生透明效果


DirectX 9中,可以使用IDirect3DTexture9口创建纹理并将其绘制到ImGui窗口中。以下是一个简单的示例代码: ```cpp // 初始化ImGui IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO& io = ImGui::GetIO(); // 创建渲染器设备对象 IDirect3DDevice9* pDevice; // 创建ImGui Direct3D9渲染器 ImGui_ImplWin32_Init(hwnd); ImGui_ImplDX9_Init(pDevice); // 创建纹理 IDirect3DTexture9* pTexture; D3DXCreateTextureFromFile(pDevice, "path_to_texture.png", &pTexture); // 主循环 MSG msg; ZeroMemory(&msg, sizeof(msg)); while (msg.message != WM_QUIT) { if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); continue; } // 开始ImGui帧 ImGui_ImplDX9_NewFrame(); ImGui_ImplWin32_NewFrame(); ImGui::NewFrame(); // 在ImGui窗口中绘制纹理 ImGui::Begin("Texture Window"); ImVec2 imageSize(400, 300); ImGui::Image(pTexture, imageSize); ImGui::End(); // 渲染ImGui绘制的内容 pDevice->SetRenderState(D3DRS_ZENABLE, false); pDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false); pDevice->SetRenderState(D3DRS_SCISSORTESTENABLE, false); // 渲染绘制数据 ImGui::Render(); ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData()); // 显示渲染结果 pDevice->Present(NULL, NULL, NULL, NULL); } // 释放资源 ImGui_ImplDX9_Shutdown(); ImGui_ImplWin32_Shutdown(); ImGui::DestroyContext(); pTexture->Release(); ``` 请注意,上述代码只是一个简单的示例,实际使用中可能需要根据具体需求进行适当的修改。另外,需要确保已正确链接ImGui库并正确设置DirectX 9相关的头文件和库文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值