我正在使用Qt3D的预制材料:
Qt3DRender::QMaterial *MyClass::createMaterial()
{
Qt3DExtras::QPhongAlphaMaterial *mat = new Qt3DExtras::QPhongAlphaMaterial();
mat->setAmbient(QColor("#576675"));
mat->setDiffuse(QColor("#5F6E7D"));
mat->setSpecular(QColor("#61707F"));
mat->setShininess(0.0f);
mat->setAlpha(0.5f);
return mat;
}
我将alpha设置为0.5f
,所以我希望材料是半透明的。但是该模型看起来除部分区域外大多是白色的:
当我检查source code时,我看到以下设置为alpha混合:
m_blendState->setSourceRgb(QBlendEquationArguments::SourceAlpha);
m_blendState->setDestinationRgb(QBlendEquationArguments::OneMinusSourceAlpha);
m_blendEquation->setBlendFunction(QBlendEquation::Add);
我想知道为什么模型看起来是白色的吗?
如@Macke所建议,黑色背景上的对象看起来不错!
当我将alpha
设置为1.0
时,会发现:
正如@Macke指出的,一个问题与深度测试有关。在source code上,默认情况下禁用深度蒙版:
// ...
, m_noDepthMask(new QNoDepthMask())
// ...
m_phongAlphaGL3RenderPass->addRenderState(m_noDepthMask);
m_phongAlphaGL2RenderPass->addRenderState(m_noDepthMask);
m_phongAlphaES2RenderPass->addRenderState(m_noDepthMask);
我通过删除QNoDepthMask
的东西启用了深度蒙版,现在使用alpha = 1.0
渲染效果很好:
由@EddyAlleman建议,我添加了以下代码行:
blendState->setSourceAlpha(Qt3DRender::QBlendEquationArguments::Zero);
blendState->setDestinationAlpha(Qt3DRender::QBlendEquationArguments::One);
然后,即使在灰色背景下,透明度(alpha = 0.4
)也可以:
答案 0 :(得分:2)
尝试设置混合方程式状态
set sourceAlphaArg to Qt3DRender::QBlendEquationArguments::Zero
set destinationAlphaArg to Qt3DRender::QBlendEquationArguments::One
枚举QBlendEquationArguments :: Blending中的info
恒定值OpenGL Qt3DRender :: QBlendEquationArguments ::零0 GL_ZERO Qt3DRender :: QBlendEquationArguments :: One 1 GL_ONE
编辑: 可以在这里找到一个很好的解释:learningopengl.com/Advanced-OpenGL/Blending
答案 1 :(得分:1)
尝试不使用blendequation,似乎由blendstate计算的颜色已添加到灰色背景。 (可能对产生粒子火花有好处,对物体则少)
黑色背景看起来如何?