c++ - OpenGL/SDL - 无法进行线路加载

标签 c++ c opengl sdl glew

我一直在尝试编写一个代码,以便在窗口中出现一条线。我一直在使用c和opengl/sdl。但由于某种原因,代码没有在窗口中画一条线。我不知道我做错了什么:

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


int main(int argc, char* argv[])
{

    SDL_Window* window;


    SDL_Init(SDL_INIT_EVERYTHING);


    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 4);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_DEBUG_FLAG);
    SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);;


    window = SDL_CreateWindow("Breakout!", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 400, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_SHOWN);

    SDL_GLContext context = SDL_GL_CreateContext(window);
    SDL_GL_MakeCurrent(window, context);


    SDL_GL_SetSwapInterval(1);

    glClearColor(1.f, 1.f, 1.f, 1.f);

    glViewport(0, 0, 800, 400);
    
    glShadeModel(GL_SMOOTH);

    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();

    glDisable(GL_DEPTH_TEST);

    

    // Check that the window was successfully created
    if (window == NULL) {
        // In the case window was not made
        printf("Could not create window: %s\n", SDL_GetError());
        return 1;
    }


    SDL_Event windowEvent;

    while (1)
    {
        
        

        // Get the next event
        SDL_Event event;


        if (SDL_PollEvent(&event))
        {
            if (event.type == SDL_QUIT)
            {
                // Break out of the loop on quit
                break;
            }

            
        }



        //Rendering to the screen
        glClear(GL_COLOR_BUFFER_BIT);


        glOrtho(0.0, 800, 400, 0.0, -1, 1);   // setup a 10x10x2 viewing world

        glColor4ub(255, 0, 0, 255);

        glBegin(GL_LINES);

        glVertex2f(0, 0);
        glVertex2f(800, 400);
    
        glEnd();

        //Render
        SDL_GL_SwapWindow(window);

    }

    // Close and destroy the window
    SDL_DestroyWindow(window);
    SDL_GL_DeleteContext(window);


    // Clean up
    SDL_Quit();  
    return 0;
}

最佳答案

glOrtho不只是设置一个矩阵。该函数创建一个正交投影矩阵并将当前矩阵与新矩阵相乘。

如果您在应用程序循环中调用glOrtho,则必须首先使用glLoadIdentity加载单位矩阵。 :

glLoadIdentity();
glOrtho(0.0, 800, 400, 0.0, -1, 1); 

关于c++ - OpenGL/SDL - 无法进行线路加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68566694/

相关文章:

c++ - 内存重新对齐后重新对齐指针

我可以在我的 C 程序中使用 OpenGL 进行图形处理吗?

opengl - Nvidia 驱动程序上出现“out 不能与非变化的”着色器编译错误,Intel 工作正常,AMD 有另一个错误

为 6 字节字符串创建更快的完美哈希函数

c - 文本文件中的单词中相同字母的出现次数

c++ - Qt 和 openGL 的 gluPerspective 等价物

c++ - 在 C++ 中将 std::wstring 转换为 const *char

c++ - 完全专用的模板函数是否与常规函数相同?

c++ - 如何使用 std::conditional 根据模板参数类型设置类型

c++ - 是否有可能在其工作后将线程连接到 'parallel for' 区域?