2014-01-06 154 views
1

我正在关注YouTube上的一个教程,但问题是本教程的制作人员正在使用SDL 1.2和Im,使用2.00,所以我不得不根据SDL迁移指南稍微更改代码。然而,我的代码并没有按照它应该绘制三角形的方式去做。就那么简单。我得到的只是一个白色屏幕。SDL OpenGL问题

======主============

#include "stdafx.h" 


void init() 
{ 
    glClearColor(0.0, 0.0, 0.0, 1.0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45, 640.0/480.0, 1.0, 500.0); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 
    glBegin(GL_TRIANGLES); 
    glVertex3f(0.0, 2.0, -5.0); 
    glVertex3f(-2.0, -2.0, -5.0); 
    glVertex3f(2.0, -2.0, -5.0); 
    glEnd(); 
} 

int main(int argc, char* argv[]){ 
SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_Window * window; 
    window = SDL_CreateWindow("OpenGLTest", 300, 300, 640, 480, SDL_WINDOW_SHOWN |  SDL_WINDOW_OPENGL); 
    init(); 
    SDL_Event * mainEvent; 
    mainEvent = new SDL_Event; 

    while (true){ 
     SDL_PollEvent(mainEvent); 
     display(); 
     SDL_GL_SwapWindow(window); 

     if (mainEvent->type == SDL_QUIT){ 
      break; 
     } 
    } 

return 0; 
} 

===== stdafx =========

#pragma once 

#include <iostream> 
#include <SDL.h> 
#include <Windows.h> 
#include <gl/GL.h> 
#include <gl/GLU.h> 

#define PI 3.14159265 

using namespace std; 

任何想法我做错了什么?

+0

尝试设置与glColor3f或glColor4f –

+0

但不应该画一个白色三角形在黑色背景的颜色?由于背景用黑色清除,默认的绘制颜色是白色的? – user3161752

+0

我试过了。它没有工作 – user3161752

回答

2

SDL_WINDOW_OPENGL单独是必要的,但并不足够。

SDL_GL_CreateContext()创建一个GL上下文,并使其成为当前通过SDL_GL_MakeCurrent()

#include <GL/glew.h> 
#include <SDL/SDL.h> 

int main(int argc, char *argv[]) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    SDL_Window * window = SDL_CreateWindow 
     (
     "OpenGLTest", 
     300, 300, 
     640, 480, 
     SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL 
     ); 
    SDL_GLContext context = SDL_GL_CreateContext(window); 
    SDL_GL_MakeCurrent(window, context); 

    glewInit(); 

    bool running = true; 
    while(running) 
    { 
     SDL_Event ev; 
     while(SDL_PollEvent(&ev)) 
     { 
      if (ev.type == SDL_QUIT) 
       running = false; 
     } 

     glClearColor(0.0, 0.0, 0.0, 1.0); 
     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); 

     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     gluPerspective(45, 640.0/480.0, 1.0, 500.0); 

     glMatrixMode(GL_MODELVIEW); 
     glLoadIdentity(); 

     glBegin(GL_TRIANGLES); 
     glVertex3f(0.0, 2.0, -5.0); 
     glVertex3f(-2.0, -2.0, -5.0); 
     glVertex3f(2.0, -2.0, -5.0); 
     glEnd(); 

     SDL_GL_SwapWindow(window); 
    } 

    SDL_GL_DeleteContext(context); 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 

    return 0; 
} 
+0

感谢他的工作。我不了解情况。 – user3161752

+1

@ user3161752:如果这解决了您的问题,那么up-vote/accept就是堆栈溢出的正确操作方法。 Q&A仅适用于问Q的人接受A;) –

+0

对不起,我还没有完成因为我没有足够的声誉,但我选择了你的答案 – user3161752