如何显示opengl的结果



我是OpenGL的新手。我想从蓝皮书(OpenGL超级圣经第6版)中学习它。

当我用Visual Studio 2013编译第一个程序时,一切都很顺利,除了出现一个白色窗口,然后程序退出code 0

程序是:

// Include the "sb6.h" header file
#include "sb6.h"
// Derive my_application from sb6::application
class my_application : public sb6::application
{
public:
    // Our rendering function
    void render(double currentTime)
    {
        // Simply clear the window with red
        static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
        glClearBufferfv(GL_COLOR, 0, red);
    }
};
// Our one and only instance of DECLARE_MAIN
DECLARE_MAIN(my_application);

我认为编译和构建过程都很好,因为result code 0。但是我不明白为什么我没有看到一个红色的输出窗口。

你基本上是在处理一个实时应用程序,这意味着渲染一个帧只需要很少的时间。渲染一帧意味着,OpenGL将使用你用来定义场景的所有命令(几何,缓冲区设置,着色器等),并尽可能快地渲染一帧。一般来说,如果你的应用程序需要实时,它必须能够以每秒30帧以上的速度渲染这个场景。

OpenGL做的基本上是渲染这个帧,然后退出。通常(你不会在你的帖子中说你使用哪个框架来创建你的应用程序,GLUT, GLFW?好吧,你说你使用蓝皮书中的代码,但不确定它使用的是哪个OpenGL库,它显然是对其他东西的包装),但一个典型的OpenGL应用程序会这样做(在伪c/c++代码中,假设一些任意框架来处理键盘/鼠标事件等):
bool run = true;
main() {
    ...
    while (run) {
        event e = get_event(e); // this is a key, or mouse event
        process_event(e);
        render_frame();
    }
    ...
}
void processe_event(event e)
{
    if (e.type == KEYBOARD_EVENT && e.value == ESC) { run = false; return; }
    ...
}

这个想法是你在一个无限循环中运行渲染函数。所以每次程序在循环中迭代时,它都会将openGL场景的内容渲染到屏幕上。当然,由于它是一个无限循环,窗口一直留在屏幕上,直到您决定终止程序(或者实现一些机制,当使用某些特定的键时,通常是转义键,您可以在其中逃脱循环)。

让它工作的最基本的方法是使用一个无限循环:

while (1) {
    render_frame();
}

并执行ctrl+c或中断/终止程序。这样你就不需要处理键了,你至少可以看到你的程序是做什么的,然后继续学习如何使用键。

我也不确定你的代码会做任何事情。首先,如果您使用双缓冲区(目前通常是默认的),您将需要切换缓冲区,以查看即使是clear函数也在执行某些操作。其次,你将需要添加一些几何到你的场景。然而,请注意,如果你使用OpenGL4为例,你将需要声明和使用着色器来查看任何东西,这是不容易让它第一次工作。

请注意,也许无限循环是嵌入宏DECLARE_MAIN,但这是使用代码/框架的问题,就像你在例子中显示的那样,你不知道代码中其他地方发生了什么,以及如何编码。例如,缓冲区交换可能发生在宏DECLARE_MAIN中。一般来说,我理解为什么他们使用这样的宏来教人们(因为它向你隐藏了如何让OpenGL应用程序工作的所有复杂性),但缺点是它阻止了你真正理解事物如何工作的原理。我个人认为这不是教图形的最好方法,尤其是OpenGL。

蓝皮书很棒,但我也建议你在网上找一些例子,它展示了如何在GL中渲染一个简单的三角形,例如:

http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

它们在网上相当多,它们很简单,解释很好,等等。

首先你需要选择你的框架。如果可以的话,我推荐GLFW。

此外,虽然关于OpenGL的课程还没有为此编写,但我建议您将来查看www.scratchapixel.com。它将解释OpenGL是如何工作的,并指导你一步一步地获得一个简单的应用程序运行。

如果你有更多的问题,请在评论中添加。

最新更新