Seite 1 von 1

OpenGl Anzeigegröße (gelöst)

Verfasst: 21. August 2010 16:01
von J4Yb3
Hallo :)
also ich habe folgendes Problem:
Ich hab ein GLWidget mit der Größe 640x320 erstellt und möchte dieses auch als Anzeige ganz ausnutzen. Was aber passiert ist aber dass das gezeichnete Object immer in der Linken unteren Ecke häng (Bild 01).

Der Quellcode dazu sieht bei mir wie folgt aus:

Steueung.cpp

Code: Alles auswählen

#include "steuerung.h"

Steuerung::Steuerung(QWidget *parent)
{
    this->setGeometry(50,50,660,500);
    dieZeichenflaeche=new GlZeichenflaeche(this);
    dieZeichenflaeche->setGeometry(10,10,640,480);
    dieZeichenflaeche->show();
}

Steuerung::~Steuerung()
{

}
GlZeichenflaeche.cpp

Code: Alles auswählen

#include <QGLWidget>
#include "glzeichenflaeche.h"

GlZeichenflaeche::GlZeichenflaeche(QWidget *parent):QGLWidget(parent)
{
    
}

void GlZeichenflaeche::initializeGL()
{
    qglClearColor(Qt::black);
}
void GlZeichenflaeche::resizeGL(int breite, int hoehe)
{
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluOrtho2D( 0, 640, 0, 480 );
    glMatrixMode( GL_MODELVIEW );
}

void GlZeichenflaeche::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
    int x;
    for(x=0;x<204800;x++)
    {
       char c= qrand()%256;
       double sx= qrand()%640;
       double sy=qrand()%480;
       glColor3ub (c,c,c);
       glVertex2d(sx,sy);
   }
    glEnd();
}

Verfasst: 22. August 2010 00:37
von N&#164;X
Das hat null mit Qt zu tun, aber bitte:

Code: Alles auswählen

void GlZeichenflaeche::resizeGL(int breite, int hoehe)
{
    glViewport(0, 0, breite, hoehe);   //<-- Viewport setzen!
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluOrtho2D( 0, 640, 0, 480 );
    glMatrixMode( GL_MODELVIEW );
}
Mit glViewport gibst du an, in welchen Bereich der Zeichenfläche du zeichnen willst (falls du z.B. nur einen Teil neu zeichnen oder das Gesamtbild aus einzelnen Szenen zusammensetzen willst). ;)

Verfasst: 22. August 2010 08:21
von J4Yb3
Okay alles klar hat geklappt :)
dann entschuldige ich mich für diese idiotische frage :oops:
herzlichen dank das du sie trotzdem beantwortet hast :wink: