Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Ray tracing


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
2 replies to this topic

#1 DmitryNik   Members   -  Reputation: 199

Like
0Likes
Like

Posted 03 November 2012 - 04:03 AM

Hello.

Since I'm new for 3d gamedev, I decided to start with a relatively simple framework and after words transform my knowledge in something low-level, like OpenGl or DirectX. I learned how to use matrices and quaternions for transformation, it wasn't that hard. What, apparently stays hard to me is understanding of global(world coordinates) and local (mesh coordinates) coordinates systems. And, of course, I got a problem because of that misunderstanding. The problem appears in ray tracing. First one was with transformation mouse coordinates to 3D world coordinates with invisible plane.

I used this code for it and it seems, that this code doesn't work properly. Please, point out to me my mistakes:

[source lang="csharp"] MouseState state = Mouse.GetState(); Vector3 nearSource = new Vector3((Single)state.X, (Single)state.Y, 0); Vector3 farSource = new Vector3((Single)state.X, (Single)state.Y, 1); Vector3 nearDest = this.graphics.GraphicsDevice.Viewport.Unproject(nearSource, this.projection, this.view, this.world); Vector3 farDest = this.graphics.GraphicsDevice.Viewport.Unproject(farSource, this.projection, this.view, this.world); Vector3 direction = farDest - nearDest; direction.Normalize(); Ray ray = new Ray(nearDest, direction); Vector3 norm = new Vector3(1.0f, 0f, 1.0f); Plane plane = new Plane(norm, 0.0f); //Since the ray equation is P = P0 + t*P1 and the plane equation is n.P = -d Single t = -(plane.D + Vector3.Dot(ray.Position, plane.Normal)) / (Vector3.Dot(ray.Direction, plane.Normal)); this.resultVector = nearDest + direction * t;[/source]

And the second one was with getting intersection coordinates on a bounding box(I want to know precisely where the ray goes through and draw in that place a small dot ).

Here is my code for the ray and my understanding of transformation the ray into the mesh's coordinates system:

[source lang="csharp"]Ray ray = new Ray(Vector3.Transform(nearDest, Matrix.Invert(this.cubeModel.Meshes[0].ParentBone.Transform)), Vector3.Transform(direction, Matrix.Invert(this.cubeModel.Meshes[0].ParentBone.Transform))); [/source]

As a result for this code:
{X:-1.527575E-07 Y:-0.1127879 Z:-3.105072}
{X:-1.527575E-07 Y:-0.1127879 Z:-3.105072}
{X:10.00013 Y:-1.509978E-06 Z:10.00018}
{X:10.00013 Y:-1.509978E-06 Z:10.00018}
{X:2.369367 Y:-0.08606504 Z:-1.035683E-07}
{X:2.369367 Y:-0.08606504 Z:-1.035683E-07}

In other words for some very strange reasons, the ray intersects all box's planes...

Could you, please, point out to me my mistakes and explain why it doesn't work properly?

Thank you in advance.

Edited by DmitryNik, 03 November 2012 - 05:58 AM.


Sponsor:

#2 DmitryNik   Members   -  Reputation: 199

Like
0Likes
Like

Posted 04 November 2012 - 11:45 AM

Problem solved. There are no problems with code at all. Problems were with my math =) Sorry Posted Image

#3 3Ddreamer   Crossbones+   -  Reputation: 3160

Like
1Likes
Like

Posted 04 November 2012 - 08:00 PM

Hi,

Ray tracing has the potential to really put a hit on performance if used much in a game, just so you know.


Clinton

Personal life and your private thoughts always effect your career. Research is the intellectual backbone of game development and the first order. Version Control is crucial for full management of applications and software.  The better the workflow pipeline, then the greater the potential output for a quality game.  Completing projects is the last but finest order.

 

by Clinton, 3Ddreamer





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.



PARTNERS