QGL_Widget / Update ohne alles neu zu zeichnen?
Verfasst: 29. Juni 2009 14:04
Hallo Gemeinde,
ich habe es geschafft mit qgl_widget eine Szene darzustellen, in der sehr viele einzelne Gerade sind (Teilweise > 1000).
bb
geschrieben habe ich ich die painGL() in etwa folgendes.
Nun zu meinem Problem. Die eigentliche Geometrische Szene ändert sich nur sehr selten, daher Frage ich mich, ob des nicht möglich ist bei einem Mausrad drehen, bei dem jetzt alles neu gezeichnet wird, nur die "Blickposition zu ändern". So würde das wegbewegen der Kamera das Bild verkleinern, würde ich erwarten, ein entsprechendes Verschieben der Kamera der gewünschten Moveeffekt bringen.
Ziel ist es für für also, die Szene einmal zu zeichnen, Sie mir dann per Mausoperationen nur aus anderen Positionen anzuschauen.
1. Geht das
2. Wenn ja, wohin müsste ich die Aufrufe aus der paintGL() verschieben?
Vielen Dank für alle Tipps, werde leider allein nicht fündig.
Alex
P.S.: Der MouseWheel
ich habe es geschafft mit qgl_widget eine Szene darzustellen, in der sehr viele einzelne Gerade sind (Teilweise > 1000).
bb
geschrieben habe ich ich die painGL() in etwa folgendes.
Code: Alles auswählen
float GeometryScale; //Skalierungsfaktor Auflösung -->Szene
QPoint GeometryMiddle; //Mittelpunkt der geometrischen Szene
// Hintergrund weiß
glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT);
// Matrix um Bild einzuzeichnen
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-this->width()/2,this->width()/2,-this->height()/2,this->height()/2,-m_kMax,1);
// Matrix um Bild einzuzeichnen
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(m_Scale,m_Scale,1); //m_Scale wird per Mausraus mit 1.1 dividiert oder multipliziert --> Zoom
glTranslatef(m_qcurrentPosition.x,m_qcurrentPosition.y,0); // kann mehr Maus verschoben werden (Drag & Drop der Geometrischen Szene)
glScalef(1/GeometryScale,1/GeometryScale,1);
glTranslatef(-GeometryMiddle.x,-GeometryMiddle.y,0);
//Ab hier wird einfach gezeichnet, gerade für Gerade etc.
/*
*/
Ziel ist es für für also, die Szene einmal zu zeichnen, Sie mir dann per Mausoperationen nur aus anderen Positionen anzuschauen.
1. Geht das
2. Wenn ja, wohin müsste ich die Aufrufe aus der paintGL() verschieben?
Vielen Dank für alle Tipps, werde leider allein nicht fündig.
Alex
P.S.: Der MouseWheel
Code: Alles auswählen
if(event->delta()<0.0f)
m_Scale*=1.1f;
else
m_Scale/=1.1f;
updateGL();