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

代码运行时的OpenGL白窗口glew/glfw3

赵兴朝
2023-03-14

所以我试着画两个三角形,但最后我得到的是没有任何三角形的白色窗口。我已经正确地设置了库,但我相信代码中可能有错误,因为我是一个新手,所以我无法理解它。代码不符合任何错误或警告,但结果不是我所期望的窗口是白色的,并且窗口中没有显示任何图形。

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


#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600

int main(void)
{
    GLFWwindow* window;
    // initialize the library
    if (!glfwInit())
    {
        return -1;
    }
    // Create a window and its context
    window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "kk", NULL, NULL);

    int screenWidth, screenHeight;
    glfwGetFramebufferSize(window, &screenWidth, &screenHeight);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    // make the window's context current
    glfwMakeContextCurrent(window);

    glViewport(0, 0, screenWidth, screenHeight); //specifies part of the window OpenGL can draw on
    glMatrixMode(GL_PROJECTION); //controls the camera
    glLoadIdentity(); //put us at (0, 0, 0)
    glOrtho(0, SCREEN_WIDTH, 0, SCREEN_HEIGHT, 0, 600); //cordinate system
    glMatrixMode(GL_MODELVIEW); //defines how objects are trasformed
    glLoadIdentity(); //put us at (0, 0, 0)

    GLfloat first_triangle[] = {
        0, 0, 0,
        0,300,0,
        200,300,0,
    };

    GLfloat second_triangle[] = {
        200,300,0,
        400,300,0,
        400,600,0,
    };
    GLfloat color[] =
    {
        255,0,0,
        0,255,0,
        0,0,255
    };
    // Loop until the window is closed by the user
    while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);
        //OpenGL rendering
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_COLOR_ARRAY);

        glVertexPointer(3, GL_FLOAT, 0, first_triangle); // points to the vertices to be used
        glColorPointer(3, GL_FLOAT, 0, color); // color to be used
        glDrawArrays(GL_TRIANGLES, 0, 3); // draw the vetices
        glVertexPointer(3, GL_FLOAT, 0, second_triangle); // points to the vertices to be used
        glColorPointer(3, GL_FLOAT, 0, color); // color to be used
        glDrawArrays(GL_TRIANGLES, 0, 3);

        glDisableClientState(GL_COLOR_ARRAY);
        glDisableClientState(GL_VERTEX_ARRAY);
    };
    
}

共有1个答案

杨起运
2023-03-14

您必须在应用程序循环结束时调用glfwSwapBuffersglfwPollEvents

while (!glfwWindowShouldClose(window))
{
    // [...]

    glfwSwapBuffers(window);
    glfwPollEvents();
}
 类似资料:
  • 我正在使用Linux并试图学习OpenGL。我参考了learnopengl.com网站,并在这里编译了第一个可用的程序。 我似乎在编译程序时没有遇到命令问题 但是当我运行程序时,它会从后面显示东西,而不是像这样的空白窗口 但是请注意,此窗口不透明,因为如果我移动窗口,背景是相同的。但是,如果我最小化并重新打开窗口,则背景是新创建的。专用和集成 GPU 都会发生这种情况。 我需要做什么才能使它正常工

  • 问题内容: 当用户关闭浏览器窗口或刷新页面时,是否可以运行最终的JavaScript代码? 我在想类似于onload但更像onclose的东西吗?谢谢。 我不喜欢onbeforeunload方法,该方法总是会弹出一个确认框(让页面保留/保留在mozilla上)或(重新加载/不重新加载chrome)。有没有办法安静地执行代码? 问题答案: 好的,我找到了一个可行的解决方案,包括使用事件,然后使处理程

  • 我通过GLX在Linux中编写了一个OpenGL应用程序。它使用双缓冲与glXSwapBuffers和同步到VBlank设置通过NVIDIA X服务器设置设置。我正在使用Compiz,并且可以平滑地移动窗口并且没有撕裂(在Compiz设置中启用了同步到VBlank)。但当我 > 尝试移动 OpenGL 窗口或调整其大小,或 通过OpenGL窗口占用的区域移动其他窗口 系统断断续续,停顿3-4秒。将

  • 我要讲的是第二章http://www.open.gl遇到了一个我搞不懂的绘图问题。 顶点着色器: 片段着色器: 编译时 我没有收到任何警告,但程序运行时会出现一个空白屏幕。我检查了他链接的示例代码以及示例源代码的github副本。不幸的是,他使用的是SFML,而我使用的是GLFW,所以我试图弥补这个差异。 我尽了最大努力模仿他的示例代码(事物的排序等),并在的最后几行中添加了主循环(在教程中没有提

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

  • 我有一个程序,在你点击一个动作按钮后,它会运行一个很长的过程。当进程正在运行时,根窗口会说它没有响应,即使我知道程序正在后台运行。这个程序将发布给我的几个同事,我想确保他们看到这个时不会惊慌失措并关闭窗口。我的解决办法是坐在树根上。正在运行的进程的循环中进行更新,但我不确定这是否是最佳修复方法。 使用Python3.3 这是一个代码的示例,所以你可以了解我在做什么,这是从主循环中调用的: