c++ - OpenGL/SDL - 无法进行线路加载
问题描述
我一直在尝试编写代码,以便在窗口中出现一行。我一直在使用 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);
推荐阅读
- android - HILT lateinit 属性 chatFragment 尚未初始化
- reactjs - 无法在反应中将数据从表单发送到firestore数据库
- c - Swift:尝试在我的 swift 应用程序中运行 c 函数给我链接器错误
- php - Google App Engine:拒绝访问网站/拒绝反向链接
- c# - 如何在 switch 语句中将两个案例与参数合并
- android - 在哪里可以找到 JobScheduler 调试文档
- .net-5 - 简化的参数空验证不起作用
- python - 如何获取半线性索引列表的切片索引
- kubernetes - 在 k8s podd 中获取环境变量
- javascript - 反应:事件回调中的道具值未更新