Jump to content
  • Advertisement
Sign in to follow this  
Stimpy1983

OpenGL [Stage3D] Picking / Ray Intersect don't work

This topic is 2261 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi,

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

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 blink.png )....

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

Share this post


Link to post
Share on other sites
Advertisement
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;


[font=Consolas,]var mY:Number = p.y; [color=#000000]//i.e. stage.mouseY;[/font]

Edited by bwhiting

Share this post


Link to post
Share on other sites
Hi bwhiting,

sounds good when it is close - But not near enough huh.png

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

Share this post


Link to post
Share on other sites
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 camerawacko.pngI build my view matrix like the post before this. When i move the camera 1 unit , the ray hit nothingunsure.png Edited by Stimpy1983

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!