nach diversen Google Suchen und Fragen auf anderen Plattform konnte mir bisher nirgendwo geholfen werden und auch ich bin noch nicht auf die Lösung gekommen. Daher frage ich auch hier noch einmal nach und hoffe - Nein bete sogar das mir jemand helfen kann.
Es geht um Picking über ein Ray, dass ist in Stage ja nicht anders als in OpenGL oder DirectX - Also habe ich mir ein OpenGL Code genommen und umgeschrieben für Stage3D/Flash, das sieht nun so aus:
Code: Alles auswählen
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, Dir);
Jetzt habe ich aus Verzweiflung einfach mit den Werten rumgespielt und festgestellt das wenn ich folgendes mache:
Code: Alles auswählen
return new CRay(nearPos.subtract(position.add(Dir))
Das Ray genau trifft, auch die Position zurückgerechnet stimmt usw. - Alles perfekt - Bis ich die Kamera bewege oder Rotiere, dann treffe ich gar nix mehr. Was wohl daran liegt das ich die Camera da mnit reingnommen habe(position = camera position).
Hat hier jemand eine Idee wie ich den original code verändern muss damit das ganze läuft? Ich bin dem Wahnsinn schon nahe :(
Vielen Dank im Vorraus