0

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

这是我使用 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矩形..

4

2 回答 2

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 ))

于 2012-08-13T22:31:59.163 回答
0

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

于 2013-06-24T09:14:38.710 回答