2012-04-09 8 views
1

Ich arbeite gerade an einem 3D-Terrain-Visualisierungstool. Die Oberfläche ist logisch mit quadratischen Fliesen bedeckt. Diese Fliesen können sichtbar gemacht werden, wie folgt:Terrainfliesenskala im Falle einer gekippten Kamera

Tiled earth

nehme ich ein Bild auf dieser Fliesen zeichnen möchten. Der Detaillierungsgrad für ein Bild muss gemäß der aktuellen Kamera-Skala ausgewählt werden, die für jede Fliese einzeln berechnet wird.

Im Falle einer vertikalen Kamera (keine Neigung, d. H. Die Kamera schaut senkrecht auf den Boden) haben alle Kacheln den gleichen Maßstab, der die Kamerabrennweite auf die Kamerahöhe über dem Boden verteilt.

folgende Abbildung zeigt die Situation:

camera with no tilt

wo rote Dreieck-Kamera, die keine Neigung hat, ist BG Kamerahöhe über dem Boden und EG ist die Brennweite, dann scale = AC/DF = BG/EG

Wenn die Kamera jedoch geneigt ist (dh der Neigungswinkel ist nicht 0), wird die Skalierung von Kachel zu Kachel geändert (sogar von Punkt zu Punkt).

enter image description here

So frage ich mich, ob es irgendeine Art Methode zumutbaren Umfang in diesem Fall für jede Fliese zu produzieren?

+1

Das Tag "computational-geometry" wurde entfernt, da CG eine spezielle Disziplin ist und nicht einfach nur mit Geometrie berechnet wird. –

+0

Ein 2D-Diagramm wäre hilfreich. –

+0

Danke für Ihre Korrekturen! Ich habe einige Bilder hinzugefügt, um es klarer zu machen. – deephace

Antwort

1

Es kann (gibt es fast sicher) eine einfachere Lösung, aber was Sie tun könnten, ist die normale Welt, um die Koordinatenumwandlung zu screenen.

Sie nehmen einfach die Koordinaten der Begrenzungspunkte der Kachel und berechnen, auf welche Pixel auf dem Bildschirm diese projiziert werden (Sie erhalten natürlich Fließkomma-Genauigkeit). Davon ausgehend glaube ich, dass Sie die "Skala" berechnen können, die Sie erwähnen.

Dies gilt für jeden Punkt oder eine Menge von Punkten im Weltbereich.

Here ist Tutorial, wie man das "von Hand" macht. Wenn Sie die Kacheln mit OpenGL oder DirectX rendern, können Sie do this viel einfacher.

+0

Danke für Ihre Antwort! Ich brauche Transformations- und Projektionsmatrizen, um das zu tun, wie Sie es beschrieben haben. Diese Matrizen sind in meinem Fall nicht verfügbar. – deephace

+0

@deephace Sie haben keine Parameter Ihrer Kamera (oder können keine passenden Parameter erstellen)? Wenn Sie OGL/DX verwenden, können Sie diese kostenlos erhalten. Wenn nicht, (wenn es nicht aus dem Tutorial I-Linker klar ist), gibt es Seiten im Internet, die beschreiben, wie man eine solche Matrix ausfüllt. –

+0

Angenommen, ich habe überhaupt keinen Zugriff auf die Rendering-Pipeline. Um dieses Problem zu lösen, möchte ich nur Informationen über die Kameraposition, die Höhe über dem Boden, die Kachelmitte und die Kamerablickposition ohne den Aufbau zusätzlicher Matrizen verwenden. – deephace

Verwandte Themen