I have figured out, that my code can't be working because all my Normals look up. So i have a plane 2d mesh , not a picture - a mesh , but all my vertexes are on the X/Y Axis. All my Normals are going up. The shader takes the angle between cam position and normal, if i understood right. So that can't be working....
Have somebody an idea how to draw an outline for a mesh where the normals are all in the same direction?!
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 cameraI build my view matrix like the post before this. When i move the camera 1 unit , the ray hit nothing