【问题标题】:OpenGL without shaders没有着色器的OpenGL
【发布时间】:2018-03-12 22:38:09
【问题描述】:

我已经阅读了一些编写以下代码的教程。 唯一的区别是原始教程使用 SDL 而不是 GLEW。

我不明白这段代码有什么问题。它编译但我没有看到三角形。 (本教程也没有使用着色器)

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

GLFWwindow* window;

int main(int argc, const char * argv[])
{
    if (!glfwInit())
    {
        return -1;
    }
    glfwWindowHint(GLFW_SAMPLES, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    window = glfwCreateWindow(640, 480, "Test", NULL, NULL);
    if (window==NULL)
    {
        return -1;
    }
    glfwMakeContextCurrent(window);

    glewExperimental = true;
    if (glewInit() != GLEW_OK)
    {
        return -1;
    }

    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
    glClearColor(0.0f, 1.0f, 1.0f, 1.0f);

    do
    {
        glfwPollEvents();

        float vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};
        glClear(GL_COLOR_BUFFER_BIT);
        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
        glEnableVertexAttribArray(0);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glDisableVertexAttribArray(0);

        glfwSwapBuffers(window);
    }
    while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && glfwWindowShouldClose(window) == 0 );

    glfwTerminate();

    return 0;
}

【问题讨论】:

标签: c++ opengl glfw


【解决方案1】:

如果您使用的是固定功能管道,则不能使用像glVertexAttribPointer 这样的通用顶点属性。

然而,NVIDIA 的实现在通用属性和非通用属性之间进行了非法别名。这可能就是本教程的最初作者在他们的机器上侥幸成功的原因。

如果你想用跨平台的方式写这个,你必须使用glVertexPointerglEnableClientState

glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);

【讨论】:

  • 谢谢。 OpenGL 中是否有一些“预先构建的”着色器?
  • @Bob5421:不,这就是固定功能管道。为什么你对使用着色器这么感兴趣?
  • 因为我想先写一个非常基础的程序。我也想做现代的opengl
  • @Bob5421:“现代 OpenGL”意味着使用着色器。这是使它“现代”的部分原因。同样,“现代 OpenGL”意味着使用缓冲区对象来存储您的顶点数据。还有其他事情。因此,您可以拥有“非常基本的程序”或“现代 opengl”;你不能同时拥有。尽管就个人而言,我没有看到任何关于着色器或缓冲区对象的特别非“基本”的东西。
猜你喜欢
  • 2012-06-20
  • 1970-01-01
  • 2011-04-19
  • 2013-10-05
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多