Jump to content

View more

Image of the Day

WIP title screen for #DeathOfAPartisan #screenshotsaturday #gamedev https://t.co/qJNhfZCvd4
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

How do you match a colour in HLSL

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 ankhd   Members   


Posted 19 July 2014 - 02:35 AM

Hi all.

What I'm doing is creating a selected object display. This is when a user selects a game object and a window has its detail and a image,
That may show its health status.

I'm working on the image part.
Each object has a .DDS icon image with alpha channel and its a image of the object rendered as a wire frame
the inner parts are coloured black, This is the colour I would Like to over ride.
I tryed three ways the last one works the best but it adds a line at the top and bottom.

I'm thinking its from the top and bottom of the image.




here is my HLSL pixel shader snippit of code
//any other ways I should try.

float4 texColor = gTex.Sample( TexS, input.tex0 );
float4 diffuse = Mdiffuse * texColor;
// Kill transparent pixels.
clip(diffuse.a - 0.15f);
// Interpolated normals can become unnormal--so normalize.
input.normalW = normalize(input.normalW);
input.toEyeW  = normalize(input.toEyeW);
// Light vector is opposite the direction of the light.
float3 lightVecW = gLight.dir;
//shadow stuff
float shadowFactor = 0.0;
float3 removethiscolour = float3(0.0, .0, 0.0);//this will be user set later

//if the colour is black then we want to change that colour
//to our new colour

//try 1
//float val = diffuse.r + diffuse.g + diffuse.b;
	//if(val <= 0.55)
		//diffuse = float4(0.0, 1.0, 0.0, 1.0);
 //try 2
//find the colour to over write
	//if(diffuse.r == removethiscolour.r && diffuse.g == removethiscolour.g && diffuse.b == removethiscolour.b )
	//	diffuse = float4(0.25, 0.25, 0.105, 1.0);

//this one I like more
//this here has a nice look to it
float v1 = diffuse.r - removethiscolour.r;
float v2 = diffuse.g - removethiscolour.g;
float v3 = diffuse.b - removethiscolour.b;
float delta = 0.5;
if(v1 <= delta && v2 <= delta & v3 <= delta)
          diffuse = float4(1.0, 0.0, 0.0, 1.0);

 float4 spec    = Mspec;
 // Compute the lit color for this pixel.
 SurfaceInfo v = {input.posW, input.normalW, diffuse, spec};
 float3 litColor = ParallelLight(v, gLight, gEyePosW, shadowFactor);

 return float4(litColor * gSelectedColour, gAlpha);

#2 kauna   Members   


Posted 19 July 2014 - 06:03 PM

Just a quick question : how your sampler TexS is defined? Have you tried using point sampling?



#3 ankhd   Members   


Posted 20 July 2014 - 12:48 AM

Good point.

Totally sliped my mind to change the sampler hehe.


But I still getting the line but is smaller in length, going to look at it in pix see whats going on there.




and using MIN_MAG_MIP_POINT now.



SamplerState TexS



AddressU = Wrap;

AddressV = Wrap;



Heres a Image with three ways of displaying the objects health

A is just replacing the the colour with the health colour.

B is the image with the health colour added to it.

C is change one colour with the Health colour.


I like B. then again C is looking ok. What do you all think..


Edited by ankhd, 20 July 2014 - 06:28 AM.

#4 ankhd   Members   


Posted 20 July 2014 - 05:37 AM

Ok I know what does it.


It's the Texture Address Mode


I have it set to wrap and it produces the lines all ways at the edge.


I change the Address mode to Clamp and the lines are gone fixed I think.


And after all that I think I don't like what the look of the health image looks like.  may do a icon of the obejct and the health colour over the top with no wire frame.

Edited by ankhd, 21 July 2014 - 01:35 AM.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.