Seite 1 von 1

renderText funktioniert nicht in QGLFramebufferObject

Verfasst: 16. Mai 2013 20:32
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

Re: renderText funktioniert nicht in QGLFramebufferObject

Verfasst: 16. Mai 2013 22:13
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