SDL openGL问题,没有看到openGL绘图

时间:2012-08-13 22:24:20

标签: opengl sdl

我正在使用cygwin SDL 1.2.15使用最新的cygwin

这是我使用SDL和openGL的代码

#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <iostream>

size_t sx=600, sy=600, bpp=32;

void render(void) {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();                                       // set location in front of camera
  //glTranslated(0, 0, -10);

    glBegin(GL_QUADS);                                      // draw a square
       glColor3d(1, 0, 0);
       glVertex3d(-2,  2,  0);
       glVertex3d( 2,  2,  0);
       glVertex3d( 2, -2,  0);
       glVertex3d(-2, -2,  0);
   glEnd();

   glFlush();
   SDL_GL_SwapBuffers();
   GLenum e;
   while ((e =glGetError()) != GL_NO_ERROR)
          std::cout<<"Error "<< e << std::endl;
}

int input(void) {
    SDL_Event event;
    while (SDL_PollEvent(&event))
        if (event.type == SDL_QUIT || (event.type == SDL_KEYUP &&        event.key.keysym.sym     == SDLK_ESCAPE)) return 0;
   return 1; 
}

这是我的主要功能

int main(int argc, char *argv[]) {
    SDL_Surface *surf;

    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) return 0;
    if (!(surf = SDL_SetVideoMode(sx, sy, bpp, SDL_OPENGL))) return 0;

    glViewport(0, 0, sx, sy);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0, (float)sx / (float)sy, 1.0, 100.0);
    glMatrixMode(GL_MODELVIEW);

    glClearColor(0, 0, 0, 1);
    glClearDepth(1.0);
    glEnable(GL_DEPTH_TEST);
    GLenum e;
    while ((e =glGetError()) != GL_NO_ERROR)
          std::cout<<"Error "<< e << std::endl;

    for (;;) {
        if (!input()) break;
        render();
        SDL_Delay(10);
    }

    SDL_FreeSurface(surf);
    SDL_Quit();
    return 0;
}

它编译没有错误,但是当我运行它时,只显示窗口,现在是openGL矩形..

2 个答案:

答案 0 :(得分:0)

你已经设置了一个近平面:

gluPerspective(45.0, (float)sx / (float)sy, 1.0/*near plane*/, 100.0);  

靠近相机的所有东西都被剪掉了。

你的四边形位于z = 0的平面上。尝试向后移动它。

glBegin(GL_QUADS);                                      // draw a square
   glColor3d(1, 0, 0);
   glVertex3d(-2,  2,  5);
   glVertex3d( 2,  2,  5);
   glVertex3d( 2, -2,  5);
   glVertex3d(-2, -2,  5);
glEnd();

我不记得Z是否面向相机,因此您可能需要负Z值。

你还需要注意面部剔除。最好将其停用以确保(glDisable( GL_CULL_FACE )

答案 1 :(得分:0)

尝试更改SDL窗口的黑色。有时候它会用黑色渲染图画......这可能会有所帮助!