gpt4 book ai didi

c++ - OpenGL + SDL2 黑屏

转载 作者:行者123 更新时间:2023-11-28 07:25:51 26 4
gpt4 key购买 nike

我目前正在学习 OpenGL 并将其与 SDL2 一起使用,当我尝试运行一个简单的程序时出现黑屏。任何帮助,将不胜感激。我正在使用 OpenGL 2.1 和 vc 编译器。

这是我的代码

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

using namespace std;

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

width = 640;
height = 480;

SDL_Init(SDL_INIT_EVERYTHING);

SDL_Window* win;
win = SDL_CreateWindow("SDL Application", 100, 100, width, height, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);

SDL_GLContext context;
context = SDL_GL_CreateContext(win);

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

height = (height <= 0) ? height = height : height = 1;
glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0f, (GLfloat) width / (GLfloat) height, 0.1f, 100.0f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glShadeModel(GL_SMOOTH);

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

SDL_GL_SwapWindow(win);

glColor3f(1.0f, 1.0f, 1.0f);

glTranslatef(-1.5f, 0.0f, -6.0f);

glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();

glTranslatef(3.0f, 0.0f, 0.0f);

glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glEnd();

SDL_Delay(5000);

SDL_GL_DeleteContext(context);
SDL_DestroyWindow(win);

SDL_Quit();
return 0;
}

最佳答案

顺序错了:

SDL_GLContext context;
context = SDL_GL_CreateContext(win);

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);

必须在创建上下文之前设置 OpenGL 上下文属性(它们是状态变量,控制上下文创建过程)。

这是没有意义的:首先你清除,然后你交换,然后你绘制(进入一个未定义的后台缓冲区,因为后台缓冲区的内容在交换后未定义)然后你不要 交换。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

SDL_GL_SwapWindow(win);

glColor3f(1.0f, 1.0f, 1.0f);

/* this translate will move the triangle out
* of the NDC space i.e. it gets clipped or
* won't be visible at all. */
glTranslatef(-1.5f, 0.0f, -6.0f);

glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 1.0f, 0.0f);

应该是这样的

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0f, 1.0f, 1.0f);

glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glEnd();

glTranslatef(3.0f, 0.0f, 0.0f);

glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glEnd();

SDL_GL_SwapWindow(win);
SDL_Delay(5000);

完全没有任何意义。其余代码仍然存在大量问题,但如果您以这种方式更改它,您至少应该在黑色背景上看到一些白色三角形。

关于c++ - OpenGL + SDL2 黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18753398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com