2014-01-06 116 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