Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » Probleme mit Darstellungsbereich

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.04.2006, 17:23 Uhr
~SvenK
Gast


Hallo,

ich habe eine Programm geschrieben, welches in eine Dialoganwendung (Visual Studio, C++)
eine OpenGL Ansichtsfläche darstellt.

Soweit klappte alles ohne Probleme, doch seit dem ich die Größe des Darstellungsbereiches
ändern möchte, bekomme ich Probleme!


C++:
void OpenGL::InitView()
{
    glViewport(0,0,MAX_X,(MAX_Y*MAX_VH));
    
    glOrtho(0.0f,
                       (m_Breite/XFact),
                       (m_Hoehe/YFact)*MAX_VH,
                       0.0f,
                       -(m_Tiefe),
                       -(m_Tiefe-m_TiefenPuffer));

    glTranslatef(XMitte,
                    (YMitte+(m_Hoehe/6.f)),
           -(m_TiefenPuffer/4.f));                                                        
    glMatrixMode(GL_PROJECTION);                        glLoadIdentity();


Danach werden eine Reihe von Bildpunkten im Darstellungbereich angezeigt. Bei jeder Änderung wird dieses erneut aufgerufen! (mag sein das dies überflüssig ist!)
Wenn ich jetzt eine Erweiterung der Bildpunkte in Z_Richtung durchführe,
dabei werden Werte wie : m_Tiefe, m_Tiefenpuffer ebenfalls erweitert, bekomme ich das Problem, das ich irgendwann meinen Darstellungsbereich überschreite und einige Bildpunkte nicht mehr dargestellt werden. Ich versuche bereits verzweifelt dieses Problem zu umgehen, doch leider sind meine versuche gescheitert! gibt es eine Möglichkeit den kompletten Darstellungsbereich zu verwerfen und neu zu initialisieren?
Wäre für jede Hilfe dankbar!

Sven
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.04.2006, 18:02 Uhr
stephanw
localhorst


Ich würde das

C++:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();


vor den Aufruf von glOrtho() machen und aufpassen, dass nach dem Aufruf Deiner Funktion der Matrix-Mode wieder richtig ist wie Du ihn dann brauchst (MODELVIEW ?).


Zitat:

MSDN:
The glOrtho function multiplies the current matrix by an orthographic matrix.


--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.04.2006, 18:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ortho ist eine 2d matrix, d.h


y
^
|
->x


schau dir mal nehe an, dann verstehst du die einzelnen matrix-funktionen evtl besser.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.04.2006, 09:42 Uhr
~SvenK
Gast



C++:
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
             glViewport(0,0,MAX_X,MAX_Y);
    glOrtho(0.0f,(m_Breite/XFact),(m_Hoehe/YFact)*MAX_VH,0.0f,-10000.0f, 10000.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();


So habe ich es auch schon ausprobiert, dargestellt werden meine Bildpunkte einwandfrei. Doch wenn ich mit

C++:
    glRotated(m_drawX, 1.0, 0.0, 0.0);                    
    glRotatef(m_drawY, 0.0, 1.0, 0.0);            


den Blickwinkel ändere, ist der Darstellungsradius zu gross und die Bildpunkte werden aus den darstellbaren Bereich "rausgedreht" beim Aufruf von glRotated. Gibt es eine OpneGL Funktion um meinen Darstellungsbereich zu sagen von da bis da darfst du darstellen, oder besser eine Methode die die BIldpunkte in den Darstellungsbereich zentriert.

Danke Sven
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.04.2006, 11:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, wenn du einen richtigen "3D"-Space willst, darfst du keinen Ortho-Screen benutzen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.04.2006, 16:20 Uhr
stephanw
localhorst


@FloSoft: glOrtho() erstellt eine Projektionsmatrix für Parallelprojektion, eine 4x4-Projektionsmatrix. Wieso kommst Du da auf 2d ? Und was ist ein "richtiger 3d-Space" ?
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.04.2006, 17:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja klar glOrtho ist natürlich auch ein "3D-Space" nur die projektion ist eben nicht perspektivisch, d.h man meint alle objekte seien 2D. wenn man richtige 3D-Objekte o.ä hat, ist eine perspektivische matrix unabdingbar
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.04.2006, 17:54 Uhr
stephanw
localhorst


Man kann doch auch eine Parallelprojektion im 3d haben, deswegen sind doch die Objekte nicht 2d. Sie sind eben nur nicht perspektivisch "verzerrt". Z.B. für technische Zeichnungen oder für 3d-Modeling-Programme eignet sich Perpektive nicht.
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: