そのため、openGL クラスの SOIL をいじっていましたが、プロジェクトで奇妙な問題が発生しています。それぞれ 3 つのビューポートを含む 2 つのウィンドウを表示し、テクスチャ付きの立方体または楕円体を描画して、奥行きと面のカリングについての理解を示します。形状はすべて正しく描画され、個別にテストすると、期待どおりに見えますが、両方のウィンドウを同時に有効にするとすぐに、ウィンドウ 1 でテクスチャリングが無効になります。以前に同様の質問を投稿したので、明確にするために、ウィンドウ 2 を無効にするか、ウィンドウ 2 でウィンドウ 1 の描画機能を使用すると、テクスチャリングが機能します。問題が発生するのは、両方のウィンドウが同時に表示される場合のみです。レンダリングされた形状の色も変更できましたが、
これは、初期化を伴う私のメイン コードです。 void main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(750, 250);
#pragma region WINDOW ONE INITIALISATION
glutInitWindowPosition(0, 50);
windowID[1] = glutCreateWindow("cubes");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-400, 400, -400, 400, -500, 500);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glutDisplayFunc(DrawWindowOne);
#pragma endregion
#pragma region WINDOW TWO INITIALISATION
glutInitWindowPosition(0, 450);
windowID[1] = glutCreateWindow("ellipsoids");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-60, 60, -60, 60, 60, 200);
gluLookAt(0, 0, 120, 0, 0, 0, 0, 1, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glutDisplayFunc(DrawWindowTwo);
#pragma endregion
LoadTextures(); // Handles the SOIL_load_OGL_Texture() lines. Works 100%
gluQuadricTexture(quad, GL_TRUE);
}
これらは2つのウィンドウ描画関数です
void DrawWindowOne()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#pragma region Viewport One
glViewport(0, 0, 250, 250);
glMatrixMode(GL_MODELVIEW);
DrawCubes();
#pragma endregion
#pragma region Viewport Two
glViewport(250, 0, 250, 250);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_CULL_FACE);
DrawCubes();
glDisable(GL_CULL_FACE);
#pragma endregion
#pragma region Viewport Three
glViewport(500, 0, 250, 250);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
DrawCubes();
glDisable(GL_DEPTH_TEST);
#pragma endregion
glFlush();
glutSwapBuffers();
}
void DrawWindowTwo()
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#pragma region Viewport One
glViewport(0, 0, 250, 250);
glMatrixMode(GL_MODELVIEW);
DrawEllipsoids();
#pragma endregion
#pragma region Viewport Two
glViewport(250, 0, 250, 250);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_CULL_FACE);
DrawEllipsoids();
glDisable(GL_CULL_FACE);
#pragma endregion
#pragma region Viewport Three
glViewport(500, 0, 250, 250);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
DrawEllipsoids();
glDisable(GL_DEPTH_TEST);
#pragma endregion
glFlush();
glutSwapBuffers();
}
これは私のオブジェクト描画コードのほんの一部です。私はそれをかなり取り除いた。立方体の 1 つの面のみを描画します (すべてのビューポートが 1 つの面を描画する場合、同じ問題が発生することを確認しました)。
void DrawCubes()
{
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureID[0]);
glBegin(GL_QUADS);
glNormal3f(0.0, 0.0, -1.0); // front face
glTexCoord2f(0.0, 0.0); glVertex3f(-a,-a,-a);
glTexCoord2f(0.0, 1.0); glVertex3f(-a, a,-a);
glTexCoord2f(1.0, 1.0); glVertex3f( a, a,-a);
glTexCoord2f(1.0, 0.0); glVertex3f( a,-a,-a);
glEnd()
glDisable(GL_TEXTURE_2D);
}