Я создаю 3D-игру с OpenGL, и я хотел бы сделать панель инструментов в верхней части окна. Для этого я попытался использовать SDL, чтобы нарисовать кнопки и OpenGL, чтобы нарисовать реальную игру. Вот соответствующая часть моего кода:Нарисуйте 2D и 3D в том же окне OpenGL
void openMainWindow(){
SDL_Surface *screen;
SDL_Event event;
SDL_Rect position;
SDL_Init(SDL_INIT_VIDEO);
putenv("SDL_VIDEO_CENTERED=center");
SDL_WM_SetCaption("Example",NULL);
SDL_WM_SetIcon(IMG_Load("icon.png"),NULL);
screen = SDL_SetVideoMode(832,487,32,SDL_HWSURFACE | SDL_OPENGL);
glLoadIdentity();
gluPerspective(70,(double)832/487,1,1000);
//Some things to initialize the window
int continue = 1;
while(continue){
SDL_PollEvent(&event);
switch(event.type){
//Events
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
//Draw a square
glEnd();
//Draw more things the same way
glFlush();
SDL_GL_SwapBuffers();
SDL_Surface *button1 = SDL_CreateRGBSurface(SDL_HWSURFACE,50,50,32,0,0,0,0);
SDL_FillRect(button1,NULL,SDL_MapRGB(screen->format,50,50,50);
position.x = 8;
position.y = 8;
SDL_BlitSurface(button1,NULL,screen,&position);
SDL_Flip(screen);
}
SDL_Quit();
}
Проблема в том, что, когда эта функция вызывается, процесс завершается и возвращает 3 (что означает, что есть ошибка). Так что я попытался сделать кнопки с OpenGL, как это:
void openMainWindow(){
//Everything before the while loop is the same as in the other code
int continue = 1;
while(continue){
SDL_PollEvent(&event);
switch(event.type){
//Events
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
//Draw a square
glEnd();
//Draw more things the same way
glDisable(GL_DEPTH_TEST);
glLoadIdentity();
glBegin(GL_QUADS); //Draw the button
glColor3ub(50,50,50);
glVertex2d(-0.5,-0.5);
glVertex2d(-0.5,0.5);
glVertex2d(0.5,0.5);
glVertex2d(0.5,-0.5);
glEnd();
glEnable(GL_DEPTH_TEST);
glFlush();
SDL_GL_SwapBuffers();
}
SDL_Quit();
}
Я знаю, что второй код должен отцентрировать кнопку в окне, но я использую этот код просто чтобы проверить, работает ли он (и это не , вот почему я публикую этот вопрос).
Со вторым кодом 3D-изображения появляются в окне, как должны, но я не вижу ни одной кнопки. Как разместить 2D-кнопки в 3D-окне OpenGL?
Какой тип вы используете? Я бы переключился на орфографию для ui. – BDL
@BDL Я не знаю, что вы имеете в виду с проекцией, так как я новичок в OpenGL, но, вероятно, вы можете увидеть, какой тип проекции я использую в коде. Если нет, вы можете сказать мне, как это выяснить. –
Существует тождественный проектор (перспектива proj была установлена с 'gluPerspective', но затем сразу же отбрасывалась с помощью' glLoadIdentity'). Я не вижу очевидных ошибок во втором коде (первая - это другая история - нет способа работать), но поскольку GL является конечным автоматом, может быть много измененных состояний, которые произошли до выдачи кода и повлияли на его выполнение (как отбрасывание задней поверхности). Я предлагаю опубликовать минимальный полный пример, который иллюстрирует вашу проблему. Лучшее решение будет использовать, например, apitrace для отладки вашей проблемы. – keltar