Alternative: Für das Zeichnen der Polygone müssen dir ja die Eckpunkte bekannt sein. Mithilfe einer PointinPoly-Funktion kannst du dann schnell überprüfen, ob ein Punkt (der Mauszeiger) in einem Polygon liegt. Bei 4x4x4 Polygonen dürfte das ausreichend schnell sein. Wenn es noch schneller sein muss, kannst du erstmal überprüfen, über welcher Ebene dein Mauszeiger ist (grob, anhand des umgebenden Rechtecks). Dann musst du nur noch 16 Polygone vergleichen. Du könntest nun nochmal z.B. auf vier Quadranten einschränken, so dass du im Zweifelsfall ~6 Polygone mit PointinPoly überprüfen musst. Ob sich der Aufwand aber für die Geschwindigkeit lohnt, wage ich zu bezweifeln - es sei denn, du willst aus 4x4x4 später mal 200x200x200 machen
.
Delphi-Quellcode:
function PointinPoly(P: Tpoint): boolean;
var
hnd: hdc;
begin
hnd := CreatePolygonRgn(PolyArray, AnzahlPunkte, Winding); // Polygonregion erstellen
Result := PtInRegion(hnd, p.x, p.y); // Testen, ob Punkt drin
DeleteObject(hnd); // freigeben Objekt
end;
PolyArray ist dabei ein Array of TPoint, AnzahlPunkte ein Integer mit der Anzahl der Punkte im Array. WINDING eine Windows-Konstante (ALTERNATE wäre die andere, passt aber hier nicht).
Mfg
Codewalker