Jump to content

  • Log In with Google      Sign In   
  • Create Account


We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.

Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


Member Since 10 Dec 2011
Offline Last Active Dec 11 2013 12:43 PM

Topics I've Started

Changing Depth in HLSL

02 October 2013 - 08:28 PM

Hello my friends!
I am trying to implement some kind of this...


Basically my problem is just changing the depth inside PixelShader.

When I change depth field, nothing happens, and I don't know why...

here is my .fx file:

float4x4 World;
float4x4 View;
float4x4 Projection;
float4x4 WorldInverseTranspose;
float4 AmbientColor;
float4 DiffuseColor = float4(1, 1, 1, 1);
float InvLogFar; 
float Radius;
float3 LightDirection = float3(1, 0, 0);
float DiffuseIntensity = 1.0;
float Shininess = 200;
float4 SpecularColor = float4(1, 1, 1, 1);
float SpecularIntensity = 1;
float3 ViewVector = float3(1, 0, 0);
texture ModelTexture;
sampler2D textureSampler = sampler_state {
    Texture = (ModelTexture);
    MinFilter = Linear;
    MagFilter = Linear;
    AddressU = Clamp;
    AddressV = Clamp;
texture ModelTexture2;
sampler2D textureSampler2 = sampler_state {
    Texture = (ModelTexture2);
    MinFilter = Linear;
    MagFilter = Linear;
    AddressU = Clamp;
    AddressV = Clamp;
struct VS_INPUT
    float4 Position : POSITION;
    float4 Normal : NORMAL;
    float2 TextureCoordinate : TEXCOORD;
struct VS_OUTPUT
    float4 ClipPosition : POSITION;
    float3 Normal : NORMAL;
float4 Position : TEXCOORD0;
    float2 TextureCoordinate : TEXCOORD1;
float3 ExactPos : TEXCOORD2;
struct PS_OUTPUT {
float4 Color0 : COLOR0;
float Depth : DEPTH;
VS_OUTPUT VS_Function(VS_INPUT input)
    VS_OUTPUT output;
     // Change the position vector to be 4 units for proper matrix calculations.
    input.Position.w = 1.0f;
    // Calculate the position of the vertex against the world, view, and projection matrices.
    output.ClipPosition = mul(input.Position, World);
    output.ClipPosition = mul(output.ClipPosition, View);
    output.ClipPosition = mul(output.ClipPosition, Projection);
output.Normal = normalize(mul(input.Normal, WorldInverseTranspose));
output.TextureCoordinate = input.TextureCoordinate;
output.ExactPos = input.Position;
output.Position = output.ClipPosition;
    return output;
PS_OUTPUT PS_Function(VS_OUTPUT input) 
    float3 light = normalize(LightDirection);
    float3 normal = normalize(input.Normal);
    float3 r = normalize(2 * dot(light, normal) * normal - light);
    float3 v = normalize(mul(normalize(ViewVector), World));
    float dotProduct = dot(r, v);
    float4 specular = SpecularIntensity * SpecularColor * max(pow(abs(dotProduct), Shininess), 0);
float4 textureColor = float4(1.0,1.0,1.0,1.0);
dotProduct = 0.1;
PS_OUTPUT output;
output.Color0 = dotProduct*saturate(textureColor + AmbientColor + specular);
output.Color0.a = 1.0;
output.Depth = input.Position.z / input.Position.w;
output.Depth = log(output.Depth+1)* InvLogFar; 
// InvLogFar = 1.0/log(Far + 1.0)
    return output;
technique Textured
    pass Pass1
        VertexShader = compile vs_3_0 VS_Function();
        PixelShader = compile ps_3_0 PS_Function();

Please if you help me, I would be very happy :-)

Also my main goal is to show a path composed by real GPS Captured Points and Satellites, so I need a real world size, thats why I am applying a logarithm function to depth...



PS: I have already implemented in  OpenGL and it worked, I don't know why it's not working with XNA...

Quaternions, rotate a model and align with a direction

06 November 2012 - 03:09 PM

Suppose you have quaternion that describes the rotation of a 3D Model.
What I want to do is, given an Object (with rotationQuaternion, side vector...), I want to align it to a target point.
For a spaceship, I want the cockpit to point to a target.
Here is some code I have ... It's not doing what I want and I don't know why...

		if (_target._ray.Position != _obj._ray.Position)
			Vector3 vec = Vector3.Normalize(_target._ray.Position - _obj._ray.Position);
			float angle = (float)Math.Acos(Vector3.Dot(vec, _obj._ray.Direction));
			Vector3 cross = Vector3.Cross(vec, _obj._ray.Direction);
			if (cross == Vector3.Zero)
				cross = _obj._side;
			_obj._rotationQuaternion *= Quaternion.CreateFromAxisAngle(cross,angle);
		// Updates direction, up, side vectors and model Matrix

after some time the rotationQuaternion is filled with almost Zero at X,Y,Z and W
Any help? Thanks ;-)

Intersection Between 2D Ray and Rectangle Borders

19 October 2012 - 01:01 PM

Hello! I need to find this point, if someone could help...

Posted Image
dir is always centered in rectangle.

Thanks ;-)

Tactical Formation with multiple objects

13 July 2012 - 08:11 AM

I created a video about my problem:

Given a group of objects and a goal.

STEP 1 - Find the center of the group.
STEP 2 - Find the path from the center to the goal (it's a list of points).

STEP 3 - For each object, send it to its formation position (relative to group's position).
STEP 4 - Move the objects.
STEP 5 - Repeat STEP 4 If at least one object moved.
STEP 6 - If the goal is not reached, grab the next position of the path and go to STEP 3.

STEP 7 - End.

As you can see it's not perfect, If you have any idea how to improove it, I would thank.

Getting Average Color of DXTCompressed Texture

23 June 2012 - 09:58 PM

Hello again.

I am trying to Implement a Minimap for my game and for each Texture I want the avg color to paint the minimap.

so far I've this:
		public Color GetAvgColor(Texture2D tex)
			Color[] data = new Color[tex.Width*tex.Height];
			Color sum = Color.Black;
			int amount = 0;
			foreach (Color c in data)
				sum.R += c.R;
				sum.G += c.G;
				sum.B += c.B;
			return new Color(sum.R / amount, sum.G / amount, sum.B / amount); ;

I didn't tested with Colored Textures because my terrain textures are DXTCompressed and MipMapped.

The problem is with GetData:
{"The type you are using for T in this method is an invalid size for this resource."}

Is that possible to Get the Average Color of a DXTCompressed Texture?

Thanks ;-)