[Interest] Using QSGVertexColorMaterial transparency

Nuno Santos nunosantos at imaginando.pt
Tue Nov 11 19:16:45 CET 2014


Gunnar,

Awesome! Working! :)

This was actually ultra simple. If had a bigger background on OpenGL this would probably be part of the “ABC”

Thanks,

Regards,

Nuno

On 11 Nov 2014, at 17:32, Gunnar Sletta <gunnar at sletta.org> wrote:

> 
>> On 11 Nov 2014, at 12:17, Nuno Santos <nunosantos at imaginando.pt> wrote:
>> 
>> Hi,
>> 
>> I want to give a flashing effect on a quad. My idea is to draw two quads. One with the base color, and one above it with a white color but with transparency oscillating. This will give the flashing effect. 
>> 
>> I’m not being able to do it with QSGVertexColorMaterial. There is no opacity on quad there is placed above. I have found the following post answer but I still can’t understand it quite well.
>> 
>> "The blend mode used by the scene graph is glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) which gives you premultiplied blending. A “valid” color in premultiplied mode must have r <= a (same for g and b of course). If it doesn’t, then that color channel will overflow, giving you additive blending instead.”
>> 
>> Will it be possible to implement this with a QSGVertexColorMaterial?
>> 
>> // quad below
>> 
>> v[0].set(_rect.left(), _rect.bottom(), r, g, b, a);
>> v[1].set(_rect.left(), _rect.top(), r, g, b, a);
>> v[2].set(_rect.right(), _rect.top(), r, g, b, a);
>> 
>> v[3].set(_rect.left(), _rect.bottom(), r, g, b, a);
>> v[4].set(_rect.right(), _rect.top(), r, g, b, a);
>> v[5].set(_rect.right(), _rect.bottom(), r, g, b, a);
>> 
>> // flashing quad above
>> 
>> a=128+128*qSin(phase),r=0xff,g=0xff,b=0xff;
>> 
>> v[6].set(_rect.left(), _rect.bottom(), r, g, b, a);
> 
> v[6].set(_rect.left(), _rect.bottom(), r * a, g * a, b * a, a );
> 
> Use premultiplied alpha as the docs state, otherwise you will end up getting something closer to additive blending which is not what you are after in this case.
> 
> cheers,
> Gunnar
> 
>> v[7].set(_rect.left(), _rect.top(), r, g, b, a);
>> v[8].set(_rect.right(), _rect.top(), r, g, b, a);
>> 
>> v[9].set(_rect.left(), _rect.bottom(), r, g, b, a);
>> v[10].set(_rect.right(), _rect.top(), r, g, b, a);
>> v[11].set(_rect.right(), _rect.bottom(), r, g, b, a);
>> 
>> Thanks,
>> 
>> Regards,
>> 
>> Nuno
>> 
>> 
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
> 




More information about the Interest mailing list