如何使用glColor4f()和glDrawArrays(GL_LINES, 0,2)绘制彩色线?

How do I draw a colored line with glColor4f() and glDrawArrays(GL_LINES, 0, 2)

本文关键字:绘制 彩色 glColor4f 何使用 glDrawArrays GL LINES      更新时间:2023-10-16

我有以下程序,我不知道为什么glColor4f()调用没有导致glDrawArrays()输出的红线,有人能告诉我我做错了什么吗?由于某种原因,输出了一条白线。glColor4f()在现代版本的GL中不再支持了吗?如果是这样的话,怎样才能正确的给线条上色呢?

我所有的谷歌搜索都让我发现我应该打电话:

glDisable(GL_LIGHTING); 
glDisable(GL_TEXTURE_2D);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);

但是,在添加了这些调用之后,我没有看到任何差异。

#include <vector>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
int main(int argc, char *argv[]) {
    if(!glfwInit()) {
        return EXIT_FAILURE;
    }
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Line Intersection", NULL, NULL);
    if(!window) {
        glfwTerminate();
        return EXIT_FAILURE;
    }
    glfwMakeContextCurrent(window);
    glewExperimental = GL_TRUE;
    if(glewInit() != GLEW_OK) {
        glfwTerminate();
        return EXIT_FAILURE;
    }
    if(!GLEW_VERSION_3_2) {
        glfwTerminate();
        return EXIT_FAILURE;
    }
    static const glm::vec3 arr[] = { 
        glm::vec3(0,0,0), 
        glm::vec3(0,0.8f,0) 
    };
    const glm::vec3* first = arr;
    const glm::vec3* last = arr + sizeof(arr) / sizeof(arr[0]);
    std::vector<glm::vec3> vertexBufferData (first, last);
    static GLuint vertexBufferId;
    glGenBuffers(1, &vertexBufferId);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData[0]) * vertexBufferData.size(), &vertexBufferData[0], GL_STATIC_DRAW);
    GLuint vertexArrayId;
    glGenVertexArrays(1, &vertexArrayId);
    glBindVertexArray(vertexArrayId);
    glDisable(GL_LIGHTING); 
    glDisable(GL_TEXTURE_2D);
    glEnable(GL_COLOR_MATERIAL);
    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    while(!glfwWindowShouldClose(window)){
        glClearColor(0, 0, 0, 1);
        glClear(GL_COLOR_BUFFER_BIT);
        glEnableVertexAttribArray(0);
            glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
            glColor4f(1.0f,0.0f,0.0f,1.0f);
            glDrawArrays(GL_LINES, 0, vertexBufferData.size());
        glDisableVertexAttribArray(0);
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return EXIT_SUCCESS;
}

您已经选择了一个Core配置文件。

Core中没有免费的,你必须提供一个顶点和片段着色器