I was wondering if there is a way to draw a zglPTexture with a modified hue. I'm writing a game with this (excellent!) library and I would like to add colour dye to armour or make variations of monsters with different colours.
Thank you in advance
I was wondering if there is a way to draw a zglPTexture with a modified hue. I'm writing a game with this (excellent!) library and I would like to add colour dye to armour or make variations of monsters with different colours.
Thank you in advance
I guess you'd have to do that yourself. One thing you could do is reserve one colour like purple (255,0,255) and replace it with other colours for all your different monsters. But you'd need to change hue if you want to change your whole monster to another color.
Convert RGB to HSV:
http://delphi.about.com/od/adptips2006/qt/RgbToHsb.htm
Convert from HSV to RGB:
http://www.delphipages.com/forum/sho...d.php?t=133111
More info:
http://www.efg2.com/Lab/Graphics/Colors/HSV.htm
So just write a function that takes one pixel as input, converts to HSV, changes hue, then back to RGB. Call it for every pixel and you're done.
One cool variation would be to use a mask. That'd give you control over which area's of the picture must be changed and which will have the same color.
Good luck!
Coders rule nr 1: Face ur bugz.. dont cage them with code, kill'em with ur cursor.
If there is a solution via standard OpenGL pipeline, I would implement it in ZenGL, but there is a problem with that. One solution, which can do things like this is color matrix, but latest drivers for new hardware are not support them(here the demo with grayscale effect in realtime, but seems it works only on my ArchLinux with Radeon HD 4650 and Radeon HD 5850 ). Another way - pixel shaders, but for now ZenGL doesn't provide functionality for them. So, the only possible way for now is using different textures. You can modify them in any graphical editor and save for later using, or modify pixels during loading the texture via tex_LoadFromFile. For this - add to flags TEX_CUSTOM_EFFECT and register your own postprocess procedure via zgl_Reg and constant TEX_CURRENT_EFFECT:
where pData - pointer to pixels in RGBA, which you must modify.Code:procedure myHUE( var pData : Pointer; Width, Height : Word );
One more solution - color mix(function fx2d_SetColor, see demo05), but it's not so good as changing hue.Originally Posted by NickS
Last edited by Andru; 13-02-2011 at 10:36 AM.
I think the important bit here Andru is thebit. I will be the first person to admit that there is a world of difference between OpenGl on windows and almost any linux 'distro' (call them that for simplicity and not anger mobs of users). Perhaps as linux is solely dependant on OpenGl for graphics? I dont know - but I believe it may not just be the card at fault.ArchLinux
A thought to keep in mind.
I once tried to change the world. But they wouldn't give me the source code. Damned evil cunning.
Maybe, but there are such OpenGL extensions as GL_ARB_imaging and GL_SGI_color_matrix(this was in OpenGL 1.2), which were dropped under Windows for many videocards and drivers... and I hate developers for that >_<I think the important bit here Andru is the
Last edited by Andru; 13-02-2011 at 11:37 AM.
Ah yes, the infamous ARGB format (I had some nice battle with that one but won in the end) and I must say that ever since Prometheus went Gl, I am so glad I am not on windows Its no surprise you see a majority of OpenGl code written on mac or linux. Thats no minority windows developers - get with the program. Excuse the pun.
I once tried to change the world. But they wouldn't give me the source code. Damned evil cunning.
Thank you a bunch once again =) I used the code from demo05 for now for colour changing, will implement the more complicated way using hue in the future.
Thanks so much!
Bookmarks