Jump to content

  • Log In with Google      Sign In   
  • Create Account


[Stage3D] Picking / Ray Intersect don't work


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 Stimpy1983   Members   -  Reputation: 110

Like
0Likes
Like

Posted 13 July 2012 - 03:31 AM

Hi,

i have a little Question about Ray Picking - I use the Flash API "Stage3D" where it is hard to find informations. Posted Image

After a lot of searching i dosn't find a stage solution so i adapt some opengl/directX Code, but i don't became it work.

Here is my current code:

[source lang="java"] var mX:Number = -1 + (p.x / winSize.x) * 2; var mY:Number = 1 - (p.y / winSize.y) * 2; var farPos:Vector3D = new Vector3D( mX, mY, 1.0, 1.0 ); var nearPos:Vector3D = new Vector3D( mX, mY, 0.0, 1.0 ); var mt:Matrix3D = new Matrix3D(); mt.append(getProjection()); mt.append(getView()); mt.invert(); nearPos = mt.transformVector(nearPos); farPos = mt.transformVector(farPos); nearPos.scaleBy(1.0 / nearPos.w); farPos.scaleBy(1.0 / farPos.w); var Dir:Vector3D = farPos.subtract(nearPos); Dir.normalize(); trace(nearPos.toString()); ray = new CRay(nearPos, Dir); return ray;[/source]
But when i click on some boxes on the screen the intersection never happens, or on the wrong element(everytime the same Posted Image )....

So now i don't have any idea what is wrong and i'm very frustrated. Can here somebody help me out? That were soo great!

p.s. sorry for my bad english.

Greetz

Stimpy

Edited by Stimpy1983, 13 July 2012 - 03:32 AM.


Sponsor:

#2 bwhiting   Members   -  Reputation: 504

Like
0Likes
Like

Posted 13 July 2012 - 05:40 AM

looks very close mate!!

what is in your view matrix? have you tried not normalizing the mouse coords...

i.e.

var mX:Number = p.x; //i.e. stage.mouseX;

var mY:Number = p.y; //i.e. stage.mouseY;


Edited by bwhiting, 13 July 2012 - 05:40 AM.


#3 Stimpy1983   Members   -  Reputation: 110

Like
0Likes
Like

Posted 13 July 2012 - 06:03 AM

Hi bwhiting,

sounds good when it is close - But not near enough Posted Image

I have tried with no normalized mouse coords - The result is the same, no hit.

Here some values:

Vector3D(0.030640805686170305, 0.0016271979761298063, 0.00006891936057909493) <- The nearPos Vector , btw. the ray orgin (is little small, or?!?!?!)

My View Matrix i set like this:


var m:Matrix3D = new Matrix3D;
m.invert();
m.appendRotation(neigung, Vector3D.X_AXIS);

view.identity();
view.appendTranslation(position.x, position.y, position.z);
view.append(m);

getFrustum();

Hope this helps

#4 Stimpy1983   Members   -  Reputation: 110

Like
0Likes
Like

Posted 13 July 2012 - 06:18 AM

Now i'm confused:

I have found some another calulation for ray picking, and now i'm really close to success , but now it seems that the hole coordinate system is a few units more left and bottom. So when i click left , buttom a few pixel away from an aabb box it beginn to hits. Now i'm confused....

The code i have found here:

[source lang="java"]var NEAR:Number = 0.1; var FAR:Number = 5000; var ASPECT:Number = winSize.x / winSize.y; var dx:Number=Math.tan((45 * Math.PI / 180)*0.5)*(p.x/(winSize.x * 0.5)-1.0)/ ASPECT; var dy:Number=Math.tan((45 * Math.PI / 180)*0.5)*0.5*(1.0-p.y/(winSize.y * 0.5)); var mt:Matrix3D = new Matrix3D(); mt.append(getView()); mt.invert(); var p1:Vector3D=new Vector3D(dx*NEAR,dy*NEAR,NEAR); var p2:Vector3D = new Vector3D(dx * FAR, dy * FAR, FAR); p1 = mt.transformVector(p1); p2 = mt.transformVector(p2); var dir:Vector3D = new Vector3D(); dir = p2.subtract(p1);return new CRay(p1, dir);[/source]
How can that be?!?!

EDIT: okay, another notice. When i press the mouse in the direct center from the screen the second algo works perfectly!!! Hits the Box exactly! But when i go away from the center(with the mouse, camera still the same), the ray goes more and more wrong. Hope this helps somebody

EDIT #2: I'm really go crazy!

So this Code work perfectly on begin:

[source lang="java"] var mX:Number = -1 + (p.x / winSize.x) * 2; var mY:Number = 1 - (p.y / winSize.y) * 2; var farPos:Vector3D = new Vector3D( mX, mY, 1.0, 1.0 ); var nearPos:Vector3D = new Vector3D( mX, mY, 0.0, 1.0 ); var mt:Matrix3D = new Matrix3D(); mt.append(getProjection()); mt.append(getView()); mt.invert(); nearPos = mt.transformVector(nearPos); farPos = mt.transformVector(farPos); nearPos.scaleBy(1.0 / nearPos.w); farPos.scaleBy(1.0 / farPos.w); var Dir:Vector3D = farPos.subtract(nearPos); Dir.normalize(); return new CRay(nearPos.subtract(position.add(Dir)), Dir);[/source]

So i hit everywhere with the mouse my boxes - All good....until i rotate or move my cameraPosted ImageI build my view matrix like the post before this. When i move the camera 1 unit , the ray hit nothingPosted Image

Edited by Stimpy1983, 13 July 2012 - 08:42 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.



PARTNERS