Jump to content

  • Log In with Google      Sign In   
  • Create Account


hdlopesrocha

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

Posts I've Made

In Topic: Language for 3d graphics

04 October 2013 - 09:39 AM

You can try C# with XNA, you will find that a lot of crazy math is already implemented (Matrix operations, collisions, 3DModels...)
I started with Allegro (C ), then OpenGL(C/C++), then XNA(C#) which for me was the easier one.


In Topic: Changing Depth in HLSL

03 October 2013 - 06:56 PM

Problem solved!

If you have the same problem the code is here (with multitexturing also...)

float4x4 World;
float4x4 View;
float4x4 Projection;
float4x4 WorldInverseTranspose;
float4 AmbientColor;
float4 DiffuseColor = float4(1, 1, 1, 1);
float InvLogFar;
float Far;
float Radius;
 
float3 LightDirection = float3(0, 0, -1);
 
float DiffuseIntensity = 1.0;
 
float Shininess = 200;
float4 SpecularColor = float4(0.3, 0.3, 0.3, 1);
float SpecularIntensity = 1;
float3 ViewVector;
 
 
Texture2D Texture0; sampler2D Sampler0 = sampler_state { Texture = (Texture0);  MinFilter = Linear; MagFilter = Linear;  AddressU = Wrap; AddressV = Wrap;};
Texture2D Texture1; sampler2D Sampler1 = sampler_state { Texture = (Texture1);  MinFilter = Linear; MagFilter = Linear;  AddressU = Wrap; AddressV = Wrap;};
Texture2D Texture2; sampler2D Sampler2 = sampler_state { Texture = (Texture2);  MinFilter = Linear; MagFilter = Linear;  AddressU = Wrap; AddressV = Wrap;};
Texture2D Texture3; sampler2D Sampler3 = sampler_state { Texture = (Texture3);  MinFilter = Linear; MagFilter = Linear;  AddressU = Wrap; AddressV = Wrap;};
Texture2D Texture4; sampler2D Sampler4 = sampler_state { Texture = (Texture4);  MinFilter = Linear; MagFilter = Linear;  AddressU = Wrap; AddressV = Wrap;};
 
struct VS_INPUT
{
    float4 Position : POSITION;
    float4 Normal : NORMAL;
    float3 TextureCoordinate : TEXCOORD;
};
 
struct VS_OUTPUT
{
    float4 Position : POSITION;
    float4 Position2D : TEXCOORD0;
    float3 Normal : NORMAL;
    float2 TextureCoordinate : TEXCOORD1;
float4 TextureA : TEXCOORD2;
float4 TextureB : TEXCOORD3;
};
 
struct PS_OUTPUT {
float4 Color0 : COLOR0;
float Depth0 : DEPTH0;
};
 
VS_OUTPUT VS_Function(VS_INPUT input)
{
    VS_OUTPUT output;
 
    output.Position = mul(input.Position, World);
output.Position = mul(output.Position, View);
output.Position = mul(output.Position, Projection);
 
output.Position2D = output.Position;
output.Normal = normalize(mul(input.Normal, WorldInverseTranspose));
output.TextureCoordinate = input.TextureCoordinate;
 
output.Position.z = 0.1;
 
output.TextureA = float4(0.0,0.0,0.0,0.0);
output.TextureB = float4(0.0,0.0,0.0,0.0);
 
// TEXTURE WEIGHT
if(input.TextureCoordinate.z<0.5)
output.TextureA[0] = 1.0;
else if(input.TextureCoordinate.z<1.5)
output.TextureA[1] = 1.0;
else if(input.TextureCoordinate.z<2.5)
output.TextureA[2] = 1.0;
else if(input.TextureCoordinate.z<3.5)
output.TextureA[3] = 1.0;
else if(input.TextureCoordinate.z<4.5)
output.TextureB[0] = 1.0;
 
    return output;
}
 
PS_OUTPUT PS_Function(VS_OUTPUT input)
{
PS_OUTPUT output;
 
    float3 light = normalize(LightDirection);
    float3 normal = normalize(input.Normal);
    float3 r = normalize(2 * dot(light, normal) * normal - light);
    float dotProduct = dot(r, ViewVector);
 
    float4 specular = SpecularIntensity * SpecularColor * max(pow(abs(dotProduct), Shininess), 0);
 
    
float4 textureColor = float4(0.0,0.0,0.0,0.0);
 
 
if(dotProduct<0.1)
dotProduct = 0.1;
 
textureColor += tex2D(Sampler0,input.TextureCoordinate*256.0)*input.TextureA[0];
textureColor += tex2D(Sampler1,input.TextureCoordinate*256.0)*input.TextureA[1];
textureColor += tex2D(Sampler2,input.TextureCoordinate*256.0)*input.TextureA[2];
textureColor += tex2D(Sampler3,input.TextureCoordinate*256.0)*input.TextureA[3];
textureColor += tex2D(Sampler4,input.TextureCoordinate*256.0)*input.TextureB[0];
 
output.Color0 = dotProduct*saturate(textureColor + AmbientColor + specular);
output.Color0.a = 1.0;
 
output.Depth0 = log(input.Position2D.z+1.0)/log(input.Position2D.w*Far+1);
// output.Color0 = float4(output.Depth0,output.Depth0,output.Depth0,1.0);
    return output;
}
 
 
 
technique Textured
{
    pass Pass1
    {
        VertexShader = compile vs_3_0 VS_Function();
        PixelShader = compile ps_3_0 PS_Function();
    }
}

 

and the result...

 

br6.png


In Topic: Quaternions, rotate a model and align with a direction

07 November 2012 - 01:47 PM

ok now it's rotating like crazy...

		    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);
			 
			    cross = (cross == Vector3.Zero) ? _obj._side : Vector3.Normalize(cross);
			
			    _obj._rotationQuaternion *= Quaternion.CreateFromAxisAngle(cross,angle);
			    _obj._rotationQuaternion.Normalize();
		    }
		    _obj.UpdateMatrix();

I have normalized the cross and quaternion...

In Topic: Quaternions, rotate a model and align with a direction

07 November 2012 - 06:43 AM

Mmmm, probably it's that...

In Topic: Intersection Between 2D Ray and Rectangle Borders

06 November 2012 - 03:05 PM

thanks ;-) problem solved!

PARTNERS