美文网首页linux
linux下sdl2&opengl绘制四棱锥

linux下sdl2&opengl绘制四棱锥

作者: 岁月静好忄 | 来源:发表于2020-05-09 10:19 被阅读0次

    linux下使用sdl2和opengl简单绘制出四棱椎

    头文件

    #ifndef APPLICATION_H_
    #define APPLICATION_H_
    
    #include <GL/glew.h>
    #include <SDL2/SDL_events.h>
    #include <SDL2/SDL_video.h>
    
    class Application{
    
    public:
        bool quit;
        SDL_Window* window;
        SDL_GLContext glContext;
        SDL_Event sdlEvent;
        GLfloat     rtri;
    
    public:
        Application();
        bool Run();
        void Draw();
    
    };
    
    
    #endif /* APPLICATION_H_ */
    

    cpp文件

    #include "Application.h"
    
    #include <GL/gl.h>
    #include <SDL2/SDL.h>
    #include <SDL2/SDL_error.h>
    #include <SDL2/SDL_timer.h>
    #include <cstdio>
    
    Application::Application()
    {
           quit = false;
           window = NULL;
           glContext = NULL;
           rtri = 0;
    }
    
    
    bool Application::Run()
    {
            //Use OpenGL 3.1 core
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
            SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
            SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
    
            // Initialize video subsystem
            if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
            {
                // Display error message
                printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
                return false;
            }
            else
            {
                // Create window
                window = SDL_CreateWindow("SDL+OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,400,300,SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
                if( window == NULL )
                {
                    // Display error message
                    printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
                    return false;
                }
                else
                {
                    // Create OpenGL context
                    glContext = SDL_GL_CreateContext(window);
    
                    if( glContext == NULL )
                    {
                        // Display error message
                        printf( "OpenGL context could not be created! SDL Error: %s\n", SDL_GetError() );
                        return false;
                    }
                    else
                    {
                        SDL_GL_SetSwapInterval(1);
                        // Initialize glew
                        glewInit();
                    }
                }
            }
    
            // Game loop
            while (!quit)
            {
                while(SDL_PollEvent(&sdlEvent))
                {
                    if(sdlEvent.type == SDL_QUIT)
                    {
                        quit = true;
                    }
                }
                Draw();
                SDL_Delay(16);
            }
    
            //Destroy window
            SDL_DestroyWindow(window);
            window = NULL;
    
            //Quit SDL subsystems
            SDL_Quit();
    
            return true;
    }
    
    void Application::Draw()
    {
    
         rtri++;
         if(rtri==360)
             rtri=0;
         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
         glLoadIdentity();
         glScaled(1.0f/10,1.0f/10,1.0f/10);
         glRotatef(rtri,0.0f,1.0f,0.0f);
         glBegin(GL_TRIANGLES);
         glColor3f(1.0f,0.0f,0.0f);
         glVertex3f( 0.0f, 4.0f, 0.0f);
         glColor3f(0.0f,1.0f,0.0f);
         glVertex3f(-4.0f,-4.0f, 4.0f);
         glColor3f(0.0f,0.0f,1.0f);
         glVertex3f( 4.0f,-4.0f, 4.0f);
         glColor3f(1.0f,0.0f,0.0f);
         glVertex3f( 0.0f, 4.0f, 0.0f);
         glColor3f(0.0f,0.0f,1.0f);
         glVertex3f( 4.0f,-4.0f, 4.0f);
         glColor3f(0.0f,1.0f,0.0f);
         glVertex3f( 4.0f,-4.0f, -4.0f);
         glColor3f(1.0f,0.0f,0.0f);
         glVertex3f( 0.0f, 4.0f, 0.0f);
         glColor3f(0.0f,1.0f,0.0f);
         glVertex3f( 4.0f,-4.0f, -4.0f);
         glColor3f(0.0f,0.0f,1.0f);
         glVertex3f(-4.0f,-4.0f, -4.0f);
         glColor3f(1.0f,0.0f,0.0f);
         glVertex3f( 0.0f, 4.0f, 0.0f);
         glColor3f(0.0f,0.0f,1.0f);
         glVertex3f(-4.0f,-4.0f,-4.0f);
         glColor3f(0.0f,1.0f,0.0f);
         glVertex3f(-4.0f,-4.0f, 4.0f);
         glEnd();
    
         SDL_GL_SwapWindow(window);
    }
    
    

    main函数

    #include "Application.h"
    
    int main(int argc, char *argv[])
    {
        Application* app = new Application();
        app->Run();
        return 0;
    }
    

    运行结果

    图片.png

    相关文章

      网友评论

        本文标题:linux下sdl2&opengl绘制四棱锥

        本文链接:https://www.haomeiwen.com/subject/nvphnhtx.html