QGLWidget alt sınıfını ve OpenGL ile yaptığım 3B nesneler üzerinde QPainter kullanarak bir 2B katmanını boyamak istediğim gibi paintGL yerine resim kodunu boyam.Qt & OpenGL - QGLWidget & QPainter: derinlik arabelleği
Derinlemesine arabelleğe alma, bindirme olmadığında iyi çalışıyor. Eğer bindirme boyanırsa, derinlik tamponum AWOL'dur: Ön taraftaki nesneler tarafından gizlenmesi gereken nesneleri görebilirim.
qglClearColor(Qt::black);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
şöyle benim paintEvent kod yapısı şöyledir::
makeCurrent();
...openGLStuff...
if (I need my overlay)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
QPainter painter(this);
... do QPainter stuff ...
glPushAttrib(GL_ALL_ATTRIB_BITS);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
swapBuffers();
, aynı sahne yolunda görünüyorsa (kapalı yer paylaşımı) bağlı ya da yanlış (
initializeGL şuna benzer yer paylaşımı). Garip derinlik tampon probleminden ayrı olarak, gayet iyi çalışıyor.
Benim (doğal) tahminim, QPainter uygulamasının derinlik arabelleğini devre dışı bırakmasıdır. Herhangi bir ipucu çok takdir edilecektir. Geri dönüş bir çözümün bindirmeyi bir dokuya dönüştürmesi ve OpenGL'yi harmanlaması gerekir.
glEnable (GL_DEPTH_TEST) ekledim; üstte ve glDisable (GL_DEPTH_TEST); OpenGL ve QPainter şeyler arasında - ve yikes, işe yarıyor! Çok teşekkürler. – user816098