HenriqueRocha

Members
  • Content count

    27
  • Joined

  • Last visited

Community Reputation

145 Neutral

About HenriqueRocha

  • Rank
    Member
  1. Alguém vende bilhete para o arraial (só sábado)?
  2. Language for 3d graphics

    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.
  3. OpenGL Changing Depth in HLSL

    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...  
  4. Hello my friends! I am trying to implement some kind of this... http://outerra.blogspot.pt/2012/11/maximizing-depth-buffer-range-and.html   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);   if(dotProduct<0.1) 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...
  5. Grupo para CN, alguém? Já somos 2.
  6. As pessoas impacientes que têm pressa a conduzir metem-me graça. Acabaram de ultrapassar-me pela berma da estrada, xD o melhor é que eu depois ultrapassei essa pessoa mais à frente... ridículo.
  7. Quaternions, rotate a model and align with a direction

    ok now it's rotating like crazy... [CODE] 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(); [/CODE] I have normalized the cross and quaternion...
  8. Quaternions, rotate a model and align with a direction

    Mmmm, probably it's that...
  9. 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... [CODE] 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 _obj.UpdateMatrix(); [/CODE] after some time the rotationQuaternion is filled with almost Zero at X,Y,Z and W Any help? Thanks ;-)
  10. Intersection Between 2D Ray and Rectangle Borders

    thanks ;-) problem solved!
  11. Hello! I need to find this point, if someone could help... [img]http://imageshack.us/a/img694/3699/questionnw.jpg[/img] dir is always centered in rectangle. Thanks ;-)
  12. Tactical Formation with multiple objects

    I can't find any papers about this subject...
  13. Tactical Formation with multiple objects

    Bi-Directional A* with Manhattan Heuristic
  14. I created a video about my problem: [media]http://www.youtube.com/watch?v=ly_NmJW4YTY&feature=youtu.be[/media] Algorithm: 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.
  15. A* and quick invalid path determination.

    Try Bi-Directional, and find the intersection between paths, If the goal is unreachable one of the sides will stop.