以下是使用LorenzAttractor
绘制SubWindows
的cpp代码。请让我知道为什么代码没有显示任何原语..惊讶为什么甚至坐标轴都没有显示..
请耐心地为我编写.h文件中的函数。
编辑:OpenGLFramework是一个基类,正在由MyFramework类扩展。我设置了参数,然后调用startFramework()
开始在屏幕上渲染数字。
我检查了我使用的每一个OpenGL函数,但无法弄清楚为什么输出是一个blanck屏幕。请建议以及用于调试OpenGL程序的任何工具?调试是图形中令人头痛的事情:(。
代码段:
void startFramework(int argc, char *argv[]) {
setInstance();
// Initialize GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(WINDOW_X_POSITION, WINDOW_Y_POSITION);
glutInitWindowSize(width, height);
mainWindow = glutCreateWindow(instance->title.c_str());
glutSetWindow(mainWindow);
// callbacks for main window
glutDisplayFunc(renderMainWindow);
glutReshapeFunc(changeSizeWrapper);
glutIdleFunc(renderSceneAllWrapper);
//subwindows
int subwindowWidth = (width - numberOfSubWindows * border) / numberOfSubWindows;
int subWindowHeight = height - border;
for(unsigned int i = 0; i < numberOfSubWindows; i++) {
subWindow[i] = glutCreateSubWindow(mainWindow, (i * width / numberOfSubWindows) + (border / 2), border / 2, subwindowWidth, subWindowHeight);
glutSetWindow(subWindow[i]);
glutDisplayFunc(renderWrapper);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
// register callbacks
//glutIgnoreKeyRepeat(1);
glutKeyboardFunc(processNormalKeysWrapper);
glutSpecialFunc(pressKeyWrapper);
glutSpecialUpFunc(releaseKeyWrapper);
glutMouseFunc(mouseButtonWrapper);
}
glutMainLoop();
}
renderWrapper()
会调用draw()
..
void draw() {
if( 1 == getNumberOfSubWindows() ) {
setWindowContext(0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
invokeGlutLookAt();
draw3DCoordinateAxis();
for(unsigned int i = 0; i < numLorenzAttractors; i++) {
lorenzAttractor[i].simulate();
}
glutSwapBuffers();
} else if( getNumberOfSubWindows() == numLorenzAttractors ) {
for(unsigned int i = 0; i < numLorenzAttractors; i++) {
setWindowContext(i);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
invokeGlutLookAt();
draw3DCoordinateAxis();
lorenzAttractor[i].simulate();
glutSwapBuffers();
}
}
}
答案 0 :(得分:1)
好吧,如果你在draw()中设置矩阵,glLoadIdentity()应该在glMatrixMode(GL_MODELVIEW)之后,至少如果你想设置模型视图矩阵,我看不到pojection矩阵。默认情况下,OpenGl在所有3个维度的[0,1]范围内绘制唯一的东西,并使用投影矩阵将其转换为您想要的角度和大小,因此如果您没有设置投影矩阵,您将赢得'什么都看不见。
无论如何,我甚至不明白你的代码是做什么的......