Maussteuerung bei Visual Studio-3D Anwendung?

lh85

Grünschnabel
Hiho
Folgendes Problem:
Wir arbeiten zur Zeit an einem Projekt, bei dem wir einen Wohnung in 3d-Studio max nachbauen mussten. Diese Wohnung haben wir in ein dot X-file umgewandelt und im Visual C#. net studio eingebunden. Mit Tastartur durch Wohnung navigieren usw. funktioniert auch schon ABER:
Im Visual-Studio erstellen wir an verschiedenen Stellen der Wohnung Objekte, die beim Anklicken ein Popup-Fenster öffnen sollen. Das Fensteröffnen arbeitet auch schon, allerdings nur wenn man mit der Kamera in das Objekt fährt.
Wir bräuchten eine Ansatz für eine Maussteuerung, die erkennt, ob sich der Cursor über einem der Objekte befindet, die auf Clicks reagieren sollen. (Absolute Koordinaten bringen nichts, da Ansicht frei gedreht und bewegt werden kann)

thx im voraus
 
Das geht nur mit etwas Vektorrechnung. Ich würde eins nach den anderen probieren. Als ersten Schritt würde ich versuchen, wie in einem First-Person-Shooter die Sichtline als "Klickstrahl" zu verwenden; so als würde man die Objekte anschiessen. Dazu würde der Benutzer dann mit der Monitormitte das zu klickende Objekt anvisieren und dann klicken. Dazu nehmt ihr den Richtungsvektor, der genau durch die Mitte des Bildschirms in die Szenerie hinein geht (diesen nennt man den Sehstrahl) und bei allen (sichtbaren) Objekten überprüft, welche von ihm geschnitten werden. Von den geschnittenen Objekten ist das nächstliegende dann das Angeklickte.

Sobald das funktioniert, könnt ihr mit einem freiem Mauszeiger experimentieren. Die Methode ist dieselbe, nur dass der zu überprüfende Vektor vom Sichtstrahl abweicht.

Den Test, ob sich ein Punkt innerhalb eines Objekts befindet, habt ihr ja bereits fertig. Für den Schnitt mit dem Sehstrahl müsst ihr eine Methode entwickeln, um festzustellen, ob ein beliebiger Punkt einer Geraden im Raum in einem der Objekte enthalten ist.

Ich habe in dieser Richtung vor einer Weile einiges gemacht; wenn ihr also diesbezüglich noch Hilfe braucht, kann ich mal sehen, an was ich mich noch erinnern kann.
 
Zurück