我正试图在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;
}
1条答案
按热度按时间mepcadol1#
您无法在Core配置文件OpenGL上下文(
GLFW_OPENGL_CORE_PROFILE
)中使用传统固定功能管道指令(glBegin
、glEnd
、glVertex2f
、glMatrixMode
、glLoadIdentity
、glOrtho
)。您必须使用兼容性配置文件OpenGL Context:glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
如果您的系统不允许您创建兼容性配置文件上下文(例如Mac),您必须使用OpenGL 2.0上下文或带有着色器和顶点阵列对象的现代OpenGL。一个很好的教程是LearnOpenGL