Das Frustum beschreibt typischerweise den Sichtbereich der Kamera. Es ist als Pyramidenstumpf mit vier Seiten, der Nearplane (Deckfläche) und der Farplane(Grundfläche). Die Kamera befindet sich an der Pyramidenspitze. Die Nearplane repräsentiert die Bildschirmflächen, während die Farplane den Sichtbereich in der Ferne begrenzt. More...
#include <Frustum.h>
Public Member Functions | |
Frustum () | |
Konstruktor. | |
Frustum (int width, int height) | |
Konstruktor. | |
void | init () |
Initialisiert das Frustum. | |
void | set (Tile &tile) |
Baut ein Frustum (hier fuer das Portal-Clipping) | |
void | set (Vec &origin, Tile &tile) |
Baut ein Frustum (hier fuer die Lightmap-Culling) | |
float | getOriginDist () |
Getter fuer die Distanz zum Ursprung. | |
void | clip (Tile &tile) |
Die Tile wird gegen das Frustum geclipped. Zuerst werden die orginal Vertices in die Clipp-Liste uebertragen. Anschliessend wird gegen alle Planes des Frustums geclippt, sodass zum Schluss das 'eingepasste' Polygon in der Clipp-Liste uebrig bleibt. | |
bool | inside (Tile &tile) |
Testet, ob eine Tile im Frustum liegt oder schneidet. | |
bool | inside2 (Tile &tile) |
Testet, ob eine Tile im Frustum liegt oder schneidet. | |
bool | inside (Partikel &partikel) |
Testet, ob ein Partikel im Frustum liegt. | |
bool | inside (Vec &v) |
Testet, ob ein Punkt im Frustum Liegt. | |
void | dump () |
Obligatorische Dump-Methode fuer Debugzwecke. | |
virtual | ~Frustum () |
Destruktor. | |
Public Attributes | |
int | NearPlaneHeight |
int | NearPlaneWidth |
int | NearFarDist |
int | NearPlaneDist |
int | FarPlaneDist |
Vec | vEnd |
Vec | Origin |
Private Types | |
enum | PLANE_SIDE { PLANE_TOP = 0, PLANE_RIGHT = 1, PLANE_BOTTOM = 2, PLANE_LEFT = 3 } |
Private Member Functions | |
bool | intersects (Line &line) |
Testet, ob eine Line das Frustum schneidet. | |
Private Attributes | |
int | viewAngle |
Vec | vOrigin |
float | OriginDist |
Vec | OriginPlaneLR |
Vec | OriginPlaneUR |
Vec | OriginPlaneLL |
Vec | OriginPlaneUL |
Vec | PlaneDir |
Vec | NearPlaneLR |
Vec | NearPlaneUR |
Vec | NearPlaneLL |
Vec | NearPlaneUL |
Vec | FarPlaneLR |
Vec | FarPlaneUR |
Vec | FarPlaneLL |
Vec | FarPlaneUL |
int | m_usedSidePlanes |
Plane * | m_sidePlanes |
Plane | OriginPlane |
Plane | NearPlane |
Plane | FarPlane |
Static Private Attributes | |
static int | SIDE_PLANES = 10 |
Das Frustum beschreibt typischerweise den Sichtbereich der Kamera. Es ist als Pyramidenstumpf mit vier Seiten, der Nearplane (Deckfläche) und der Farplane(Grundfläche). Die Kamera befindet sich an der Pyramidenspitze. Die Nearplane repräsentiert die Bildschirmflächen, während die Farplane den Sichtbereich in der Ferne begrenzt.
Das Frustum wird nicht analog zur Cameraposition bewegt. Es ist mit der Frustumspitze fest im Ursprung (0,0,0) verankert und zeigt in z-Richtung. Stattdessen werden alle Objekte im 3D-Raum transformiert. Das hat Vorteile bei der Projektion und hebt die (Performanz-)Nachteile beim transformieren aller Weltobjekte wieder auf.
Bem.: Das Frustum wird auch als Portalfrustum und beim erzeugen der Lightmaps verwendet. Dort kann es potentiell 3..n Seitenflächen besitzen.
enum Frustum::PLANE_SIDE [private] |
Frustum::Frustum | ( | ) |
Konstruktor.
Frustum::Frustum | ( | int | width, |
int | height | ||
) |
Konstruktor.
width | Breite der Nearplane, bzw. des Bildschirmfensters |
height | Hoehe der Nearplane, bzw. des Bildschirmfensters |
Frustum::~Frustum | ( | ) | [virtual] |
Destruktor.
void Frustum::clip | ( | Tile & | tile | ) |
Die Tile wird gegen das Frustum geclipped. Zuerst werden die orginal Vertices in die Clipp-Liste uebertragen. Anschliessend wird gegen alle Planes des Frustums geclippt, sodass zum Schluss das 'eingepasste' Polygon in der Clipp-Liste uebrig bleibt.
tile | Referenz auf die Tile |
void Frustum::dump | ( | ) |
Obligatorische Dump-Methode fuer Debugzwecke.
float Frustum::getOriginDist | ( | ) |
Getter fuer die Distanz zum Ursprung.
void Frustum::init | ( | ) |
Initialisiert das Frustum.
bool Frustum::inside | ( | Vec & | v | ) |
Testet, ob ein Punkt im Frustum Liegt.
v | der Punkt |
bool Frustum::inside | ( | Partikel & | partikel | ) |
bool Frustum::inside | ( | Tile & | tile | ) |
bool Frustum::inside2 | ( | Tile & | tile | ) |
bool Frustum::intersects | ( | Line & | line | ) | [private] |
Baut ein Frustum (hier fuer die Lightmap-Culling)
origin | Ursprung, Koordinate der Frustumspitze |
tile | Geometrie fuer die FarPlane aus der die SeitenPlanes entstehen |
void Frustum::set | ( | Tile & | tile | ) |
Baut ein Frustum (hier fuer das Portal-Clipping)
tile | Geometrie aus der die SeitenPlanes entstehen |
Plane Frustum::FarPlane [private] |
Vec Frustum::FarPlaneLL [private] |
Vec Frustum::FarPlaneLR [private] |
Vec Frustum::FarPlaneUL [private] |
Vec Frustum::FarPlaneUR [private] |
Plane* Frustum::m_sidePlanes [private] |
int Frustum::m_usedSidePlanes [private] |
Plane Frustum::NearPlane [private] |
Vec Frustum::NearPlaneLL [private] |
Vec Frustum::NearPlaneLR [private] |
Vec Frustum::NearPlaneUL [private] |
Vec Frustum::NearPlaneUR [private] |
float Frustum::OriginDist [private] |
Plane Frustum::OriginPlane [private] |
Vec Frustum::OriginPlaneLL [private] |
Vec Frustum::OriginPlaneLR [private] |
Vec Frustum::OriginPlaneUL [private] |
Vec Frustum::OriginPlaneUR [private] |
Vec Frustum::PlaneDir [private] |
int Frustum::SIDE_PLANES = 10 [static, private] |
int Frustum::viewAngle [private] |
Vec Frustum::vOrigin [private] |