OpenGL Renderreichweite
-
wenn ich durch die gegend fliege, werden objekte in der entfernung nicht mehr gezeichnet...
wie kann ich manuell festlegen bis zu welcher entfernung die objekte noch gezeichnet werden sollen?
-
Du kannst die Sichtweite festlegen, indem du den View-Frustum einstellst.
Mit dieser Methode sollte es funktionieren:
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.5f, 1.0f, 1000.0f );1.0f ist die vordere Clipping-Ebene.
1000.0f ist die hintere Clipping-Ebene.
-
Mit der far clipping plane.
http://www.fh-merseburg.de/~roesch/trash/alles_klar.gif
-
falls du glFrustum(left, right, bottom, top, near, far); nutzt, mußt du die far veriable vergrößern
rapso->greets();
-
Oder du nutzt gluPerspective, und gibst die Far Plane direkt als letzten wert ein
-
ich hab ma glfrustum probiert
dann veränderts aber auch die perspektive und damit auch schrift und objektauswahldie perspektive soll aber gleich bleiben und nur auch objekte in weiterer entfernung rendern
-
wie kann ich eigentlich die aktuellen werte der perspektive bekommen?
-
Kannst du ohne Probleme
Allerdings weiß ich es jetzt nur mit Matritzen.In dem Code, wie man das Frustum ausliest, kannst du es auslesen:
void CCLipper::BuildFrustum() { static SMatrix proj, modl, clip; static CMatrix cMat; // projection matrix auslesen glGetFloatv( GL_PROJECTION_MATRIX, (float*)&proj.vec ); // modelview matrix auslesen glGetFloatv( GL_MODELVIEW_MATRIX, (float*)&modl.vec ); cMat.Mul( clip, modl, proj ); // und ebenen gleichungen bauen ! // RIGTH PLANE frustum[0][0] = clip.vec[ 3] - clip.vec[ 0]; frustum[0][1] = clip.vec[ 7] - clip.vec[ 4]; frustum[0][2] = clip.vec[11] - clip.vec[ 8]; frustum[0][3] = clip.vec[15] - clip.vec[12]; // LEFT PLANE frustum[1][0] = clip.vec[ 3] + clip.vec[ 0]; frustum[1][1] = clip.vec[ 7] + clip.vec[ 4]; frustum[1][2] = clip.vec[11] + clip.vec[ 8]; frustum[1][3] = clip.vec[15] + clip.vec[12]; // DOWN PLANE frustum[2][0] = clip.vec[ 3] + clip.vec[ 1]; frustum[2][1] = clip.vec[ 7] + clip.vec[ 5]; frustum[2][2] = clip.vec[11] + clip.vec[ 9]; frustum[2][3] = clip.vec[15] + clip.vec[13]; // UP PLANE frustum[3][0] = clip.vec[ 3] - clip.vec[ 1]; frustum[3][1] = clip.vec[ 7] - clip.vec[ 5]; frustum[3][2] = clip.vec[11] - clip.vec[ 9]; frustum[3][3] = clip.vec[15] - clip.vec[13]; // FAR PLANE frustum[4][0] = clip.vec[ 3] - clip.vec[ 2]; frustum[4][1] = clip.vec[ 7] - clip.vec[ 6]; frustum[4][2] = clip.vec[11] - clip.vec[10]; frustum[4][3] = clip.vec[15] - clip.vec[14]; // NEAR PLANE frustum[5][0] = clip.vec[ 3] + clip.vec[ 2]; frustum[5][1] = clip.vec[ 7] + clip.vec[ 6]; frustum[5][2] = clip.vec[11] + clip.vec[10]; frustum[5][3] = clip.vec[15] + clip.vec[14]; }
In der Near und Far Plane findest du die Informationen, über die Renderreichweite
-
kewl danke... werd ich gleich mal ausprobiern