renderText funktioniert nicht in QGLFramebufferObject

Alles rund um die Programmierung mit Qt
Antworten
iphenion
Beiträge: 17
Registriert: 4. Januar 2008 15:40
Wohnort: Wetter
Kontaktdaten:

renderText funktioniert nicht in QGLFramebufferObject

Beitrag von iphenion »

Hallo liebe Experten,

ich frage mich, ob ich mit der QGLWidget Funktion renderText auch in ein QGLFrameBufferObject rendern kann.
Meine Versuche diesbezüglich schlugen fehl. Der Text wird in das QGLWidget ausgegeben.
Ich versuchte das ungefähr so:

Code: Alles auswählen

void GlWidget::initializeGL()
{
	fboObject = new QGLFramebufferObject(fbo_xsize,fbo_ysize,QGLFramebufferObject::Depth);
}

void GlWidget::paintGL()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-1.0, 1.0, -1.0, 1.0, -10.0, 10.0);
    // ...usw. der übliche openGL Kram

    fboObject->bind();
    // ab hier wird ins QGLFrameBufferObject gerendert
    // Zeichnen vorbereiten und aktuellen openGL Status sichern
    glPushAttrib(GL_ALL_ATTRIB_BITS);
    glPushMatrix();		// Modelview Matrix sichern
    glViewport(0,0,fbo_xsize,fbo_ysize);

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();		// Proj. Matrix sichern;
    glLoadIdentity();
    // Clipping Volume setzen
    glOrtho(0,fbo_xsize,0,fbo_ysize,-30,30);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Dieser Codeblock wird wie gewünscht ins Framebufferobjekt gerendert
	int z = 0;
	int w = 512;
	int h = 512;
	glColor4f(0.0f, 0.0f, 1.0f, 0.7f);
	glBegin(GL_QUADS);
	glVertex3i(0,0,z);
	glVertex3i(0,w,z);
	glVertex3i(h,w,z);
	glVertex3i(h,0,z);
	glEnd();

    // Jetzt Text rendern -> wird NICHT in die FramebufferObject Texture gerendert
    renderText(50,50,50,"Test text");

    fboOject->release();

    // Jetzt die Texture aus dem FBO in Scene rendern
   glEnable(GL_TEXTURE_2D);
   glBindTexture(GL_TEXTURE_2D,fbo->texture());
   // glBindTexture(GL_TEXTURE_2D,picTexture);

   glColor4f(1.0f,1.0f,1.0f,1.0f);
   GLfloat z = 0.6;

   glBegin(GL_QUADS);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.5, -0.5, z);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(0.5, -0.5, z);
   glTexCoord2f(1.0f, 1.0f); glVertex3f(0.5, 0.5, z);
   glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.5, 0.5, z);
   glEnd();
   glDisable(GL_TEXTURE_2D);
   glBindTexture(GL_TEXTURE_2D, 0);
}
  
Bisher hatte ich die selbe Funktionalität durch Benutzung der ftgl Bibliothek erreicht, aber ich wollte die Abhängigkeit von dieser Bibliothek loswerden.

Die Frage, die sich mir stellt, ist allgemein:
Wie kann ich Text in ein QGLFrameBufferObject rendern?

Gruß,

Peter
iphenion
Beiträge: 17
Registriert: 4. Januar 2008 15:40
Wohnort: Wetter
Kontaktdaten:

Re: renderText funktioniert nicht in QGLFramebufferObject

Beitrag von iphenion »

Ok, ich habe noch ein wenig geforscht.

Beim Durchstöbern der Quelltexte von Qt sah es so aus, als würde die renderText() Funktion
einen QPainter auf dem QGLWidget aufmachen.
Damit ist die Funktion wohl unbrauchbar für QGLPixelBuffer und QGLFramebufferObject.

Weiß jemand eine Lösung auf ähnliche Art Text zu rendern?

Peter
Antworten