gpt4 book ai didi

c++ - 为什么 OpenGL GLFW 渲染形状不起作用?

转载 作者:行者123 更新时间:2023-12-05 02:25:56 24 4
gpt4 key购买 nike

我正在尝试在 C++ 中开始使用 openGL 和 GLFW。我的期望是下面的代码将简单地在屏幕上呈现一个正方形,但我只是得到一个黑屏。

虽然实际设置有效,因为如果我添加 glClearColor(0.1f, 0.4f, 0.8f, 1.0f);,我确实会出现蓝屏。但是我使用 GL_QUADS 有什么问题呢?

#include <iostream>

// GLEW
#define GLEW_STATIC
#include <GL/glew.h>

//GLFW
#include <GLFW/glfw3.h>

const GLint WIDTH = 800, HEIGHT = 600;

int main() {
glfwInit();
glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint( GLFW_RESIZABLE, GL_TRUE);

GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "Isosurface Stuffing", nullptr, nullptr);

int screenWidth, screenHeight;
glfwGetFramebufferSize(window, &screenWidth, &screenHeight);

if (window == nullptr) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();

return -1;
}

glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;

if (GLEW_OK != glewInit()) {
std::cout << "Failed to create GLEW" << std::endl;

return -1;
}


while (!glfwWindowShouldClose(window)) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glViewport(0, 0, screenWidth, screenHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, screenWidth, 0.0f, screenHeight, 0.0f, 1.0f);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();


glfwPollEvents();

glColor3f(0.5f, 0.5f, 0.5f);
glBegin(GL_QUADS);

glVertex2f(100, 100);
glVertex2f(200, 100);
glVertex2f(200, 200);
glVertex2f(100, 200);
glEnd();

glfwSwapBuffers(window);
}

glfwTerminate();
return 0;
}

最佳答案

您不能使用传统的固定功能流水线指令(glBeginglEndglVertex2fglMatrixModeglLoadIdentity, glOrtho) 在核心配置文件 OpenGL 上下文中 (GLFW_OPENGL_CORE_PROFILE)。您必须使用兼容性配置文件 OpenGL Context :

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);

如果您的系统不允许您创建兼容性配置文件上下文(例如 Mac),您必须使用 OpenGL 2.0 上下文或带有着色器和顶点数组对象的现代 OpenGL。一个很好的教程是 LearnOpenGL

关于c++ - 为什么 OpenGL GLFW 渲染形状不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74169281/

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