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

ニア プレーンを 1 つにセットアップしました。

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 に答える