首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectX中Photoshop的“屏幕”模式

DirectX中Photoshop的“屏幕”模式
EN

Stack Overflow用户
提问于 2009-06-06 17:40:54
回答 2查看 1.8K关注 0票数 4

编辑:问题解决了!见邮报的结尾。

如何在DirectX 8中实现Photoshop的“屏幕”混合模式?

信息,我在这个主题(id=228)上找到了:

结果=1- (1 -目的地)* (1 -源)结果=1- (1 -源-目的地+目标*源)结果=1-1+源+目的地-目的地*源结果=源+目的地-源*源结果=目的地+源* (1 -目的地) 现在我们已经计算好了,我们只需设置混合模式: BlendOperation = Add DestinationBlend = One SourceBlend = InvDestColor

我假设DirectX混合状态必须是:

代码语言:javascript
复制
pD3DDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR);

这是正确的吗?(我有个错误的结果)

示例项目:链接 镜像

Photoshop结果:

http://img192.imageshack.us/img192/7015/photoshopf.jpg

我在DirectX中的结果是:

http://img193.imageshack.us/img193/2969/directx.jpg

问题解决:公式不考虑图像alpha,要修复它,需要使图像背景纯黑100%不透明

EN

回答 2

Stack Overflow用户

发布于 2009-06-06 19:02:30

以下一行是错误的:

代码语言:javascript
复制
pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_ADD);

您的意图可能是状态α搅拌器应该做添加,但D3DTSS_COLOROP设置不影响最终搅拌器,它设置纹理组合器。将其设置为从纹理中向样本添加一些东西(前一/下一阶段的结果,或类似的结果),这是错误的。D3DTOP_SELECTARG1或默认的D3DTOP_MODULATE应该完成这项工作。

相反,您需要写的是:

代码语言:javascript
复制
pD3DDevice->SetRenderState(D3DBLENDOP, D3DBLENDOP_ADD);
票数 2
EN

Stack Overflow用户

发布于 2009-06-06 18:24:03

这个数学似乎是正确的,您设置DirectX函数的方式应该是有效的。

我的建议是:

  1. 使用与在Photoshop中使用的相同的图像,这样您就知道它没有正确地使纯白色(可能)。
  2. 检查是否可以执行其他混合模式,并确保它们生成正确的输出。
代码语言:javascript
复制
- apologies if you have already done both of those.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/960176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档