当前位置: 首页 > 知识库问答 >
问题:

OpenGL与GLFW:不绘制多边形

孙泳
2023-03-14

我能够创建一个窗口,并清除到所需的颜色。但无法在左下角绘制正方形。

#include <iostream>

#define GLEW_STATIC

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

const GLint WIDTH = 720;
const GLint HEIGHT = 480;

int main()
{
    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // Attempts to set to opengl 3.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, "Learn OpenGL", nullptr, nullptr);

    int screenWidth, screenHeight;

    glfwGetFramebufferSize(window, &screenWidth, &screenHeight);

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

        return EXIT_FAILURE;
    }

    glfwMakeContextCurrent(window);

    glewExperimental = GL_TRUE;

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

        return EXIT_FAILURE;
    }

    glViewport(0, 0, screenWidth, screenHeight);

    while (!glfwWindowShouldClose(window))
    {
        glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        glColor3f(0.0f, 0.0f, 1.0f);
        glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

        glBegin(GL_POLYGON);
            glVertex3f(0.0, 0.0, 0.0);
            glVertex3f(0.5, 0.0, 0.0);
            glVertex3f(0.5, 0.5, 0.0);
            glVertex3f(0.0, 0.5, 0.0);

        glEnd();
        glFlush();

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();

    return EXIT_SUCCESS;
}

共有1个答案

勾学博
2023-03-14

推荐的固定函数功能(glbegin()等&矩阵堆栈)不能在核心上下文中工作(glfw_opengl_core_profile)。

切换到兼容性上下文:

#include <iostream>

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

const GLint WIDTH = 720;
const GLint HEIGHT = 480;

int main()
{
    glfwInit();

    glfwWindowHint(GLFW_RESIZABLE, GL_TRUE);

    GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "Learn OpenGL", nullptr, nullptr);

    int screenWidth, screenHeight;

    glfwGetFramebufferSize(window, &screenWidth, &screenHeight);

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

        return EXIT_FAILURE;
    }

    glfwMakeContextCurrent(window);

    glewExperimental = GL_TRUE;

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

        return EXIT_FAILURE;
    }

    glViewport(0, 0, screenWidth, screenHeight);

    while (!glfwWindowShouldClose(window))
    {
        glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();
        glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();

        glColor3f(0.0f, 0.0f, 1.0f);
        glBegin(GL_POLYGON);
            glVertex3f(0.0, 0.0, 0.0);
            glVertex3f(0.5, 0.0, 0.0);
            glVertex3f(0.5, 0.5, 0.0);
            glVertex3f(0.0, 0.5, 0.0);
        glEnd();

        glfwSwapBuffers(window);

        glfwPollEvents();
    }

    glfwTerminate();

    return EXIT_SUCCESS;
}

或者提供一些着色器&使用VAO和VBO来上传你的几何图形。

 类似资料:
  • 我试图为OpenGL工作设置一个跨平台代码库,下面的代码在我硬盘的Windows7分区上绘制得很好。然而,在小牛,我只得到一个黑屏,不知道为什么。我已经尝试了指南和相关问题中建议的所有东西,但到目前为止都没有效果!希望我只是遗漏了一些明显的东西,因为我对OpenGL还很陌生。 通过Xcode编译,使用2013年Macbook Mini,Intel HD Graphics 5000。可能还值得注意的

  • 我到处都找过了,我似乎无法让OpenGL绘制一个简单的四边形。窗口在正确的颜色背景下显示得很好,但OpenGL就是不会绘制框。我正在使用OpenGL 4.4.0-构建20.19.15.4463窗口大小为1920x1080 这是我目前拥有的代码: 在Main.java: 在实体框中:

  • 所以,我试图在openGL和GLFW中绘制一个简单的立方体。

  • 问题内容: 我正在尝试绘制这样的多边形: 我希望得到以下输出: 为什么仍然是零?还有另一种方法将填充的多边形绘制到数组吗? 问题答案: 这是一个奇怪的结果。我发现,如果您颠倒了点的顺序,则会绘制出完整的图形。换一种说法: 这是一个测试程序: 例子:

  • 我对glfw有一个小问题。 我的代码非常简单,我只想创建一个空窗口。 } 此代码编译,但当我运行它时,我只有一个白色窗口。窗口的标题是正确的,但里面的一切都是白色的......我尝试像那样使用glClearColor。 但是我的窗户仍然是白色的....我用的是visual studio 2015。 怎么弄个黑窗? 编辑: 忘了补充这个:glfwMakeContextCurrent(window);

  • 假设我有三个锚,来自阿拉片段的命中结果。 锚定=命中结果。createAnchor(); 如何使用Sceneform绘制三角形并应用自定义纹理?