Googel mal nach Ray AABB Collision.
Und teile den Strahl in kurze Strecken und teste dann die Kollision zwischen der Strecke und den Blöcken, die zwischen Anfang und Ende der Strecke liegen.
Die Berechnung der Richtung des Strahls ist falsch. Du kannst einfach die Kameramatrix (inverse View Matrix, ohne Verschiebung, also nur die 3x3 Matrix, die sich auf den 3x3 linken oberen Elementen ergibt) dafür nutzen oder basierend auf der Rotation einfach eine Rotationsmatrix generieren und diese dann nutzen, um den Vektor zu transformieren. Oder du guckst dir die Umrechnung von Kugelkoordinaten in karthesische Koordinaten an, allerdings musst du hierbei beachten, dass die Reihenfolge der Rotation anders ist.
Hier ist mein Code für die Richtung der Kamera, ich bin mir aber nicht 100% sicher, ob der bei dir funktioniert, da er für ein linkshändiges Koordinatensystem mit x nach links, y nach oben und z nach hinten gedacht ist. Rein theoretisch müsste der aber für rechts- und linkshändige Koordinatensysteme gelten. Es sei denn, bei dir zeigt z nach oben, dann bin ich mir nicht sicher. Gilt auch nur, wenn die Reihenfolge der Rotation erst um die x-Achse und dann um die y-Achse stattfindet und die Blickrichtung bei 0 Grad in positive z-Richtung ist.
|
C-/C++-Quelltext
|
1
2
3
|
DOUBLE3 Camera_t::GetDirection(){
return DOUBLE3(sin(Rotation.y)*cos(Rotation.x), -sin(Rotation.x), cos(Rotation.y)*cos(Rotation.x));
}
|