OpenGL Chan视频学习-5 Vertex Attributes and Layouts in OpenGL

bilibili视频链接:
【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p=5&vd_source=44b77bde056381262ee55e448b9b1973

一、知识点整理

1.1.OpenGL管线工作流程

  1. 为显卡提供绘制的所有数据,并将数据存储在GPU内存
  2. 使用着色器,即在GPU上执行的一种程序,来读取数据并将其显示在屏幕上
  3. 绘制图形时使用顶点缓存,即GPU一块内存。所以着色器开始读取时,顶点缓存需要知道缓存层,它包含在缓存区,是一大堆浮点数,决定每个顶点的位置。
  4. 还要告诉OpenGL像坐标、纹理、法线等、以及在内存里面有什么,是如何布局的

1.2 Vertex

  1. Vertex不只是顶点
  2. 还可以包含一些定点相关的信息。颜色、纹理、坐标、法线等。

1.3 glVertexAttribPointer

1.3.1 c规范

1.3.2 功能

定义一个通用顶点属性数据数组

1.3.3参数

  • index

指定要修改的通用顶点属性的索引。

  • size

指定每个通用顶点属性的组件数。必须是1、2、3、4。此外,符号常量GL_BGRA 被glVertexAttribPointer接受。初始值是4。

  • type

指定数组中每个组件的数据类型。符号常量GL_BYTEGL_UNSIGNED_BYTEGL_SHORTGL_UNSIGNED_SHORTGL_INTGL_UNSIGNED_INTglVertexAttribPointerglVertexAttribIPointer接受。此外GL_HALF_FLOATGL_FLOATGL_DOUBLEGL_FIXEDGL_INT_2_10_10_10_REVGL_UNSIGNED_INT_2_10_10_10_REVGL_UNSIGNED_INT_10F_11F_11F_REVglVertexAttribPointer接受。GL_DOUBLE也被glVertexAttribLPointer接受,并且是该函数的type参数中唯一被接受的令牌。初始值是GL_FLOAT

  • normalized

对于glVertexAttribPointer,指定当固定点数据值被访问时,是否应该进行归一化 (GL_TRUE) 或直接作为固定点值进行转换 (GL_FALSE)。

  • stride

指定连续的通用顶点属性之间的字节偏移量。如果 stride 为0,则通用顶点属性在数组中被认为是紧密包装的。初始值为0。

步幅。每个顶点之间的字节数量。一个顶点的多个字节被分配给多个属性,如纹理、颜色等。

  • pointer

指定缓冲区中当前绑定到GL_ARRAY_BUFFER目标的数据存储中第一个通用顶点属性数组的第一个组件的偏移量。初始值为0。 

1.3.4示例

glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);

1.4 glEnableVertexAttribArray

1.4.1 c规范

1.4.2 功能

启用或禁用通用顶点属性数组

1.4.3参数

  • vaobj

指定用于glDisableVertexArrayAttribglEnableVertexArrayAttrib函数的顶点数组对象名称。

  • index

指定要启用或禁用的通用顶点属性的索引。

1.4.4示例

glEnableVertexAttribArray(0);

二、代码

2.1 代码

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

#include<iostream>

int main(void)
{
    GLFWwindow* window;

    //初始化glfw
    if (!glfwInit())
        return -1;

    //创建一个窗口模式的窗口并设置OpenGL上下文
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)//如果窗口创建失败,则终止程序
    {
        glfwTerminate();//释放glfw资源
        return -1;
    }

    //设置当前窗口的上下文,之后所有的OpenGL调用都会在这个上下文中进行
    glfwMakeContextCurrent(window);

    //初始化GLEW
    if (glewInit() != GLEW_OK)
        std::cout << "Error!" << std::endl;

    //打印OpenGL版本信息
    std::cout << glGetString(GL_VERSION) << std::endl;

    //准备数据
    float position[6] = {
        0.0f, 0.5f,
        -0.5f, -0.5f,
        0.5f, -0.5f
    };

    unsigned int buffer;
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), position, GL_STATIC_DRAW);

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);

    //渲染循环,直到窗口被关闭
    while (!glfwWindowShouldClose(window))
    {
        //这部分主要:渲染窗口内容
        glClear(GL_COLOR_BUFFER_BIT);


        //刷新缓冲区并交换窗口
        glfwSwapBuffers(window);

        //处理窗口事件,如键盘输入、鼠标移动等
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

2.2运行结果

安装Docker安装插件,可以按照以下步骤进行操作: 1. 首先,安装Docker。可以按照官方文档提供的步骤进行安装,或者使用适合您操作系统的包管理器进行安装。 2. 安装Docker Compose插件。可以使用以下方法安装: 2.1 下载指定版本的docker-compose文件: curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 2.2 赋予docker-compose文件执行权限: chmod +x /usr/local/bin/docker-compose 2.3 验证安装是否成功: docker-compose --version 3. 在安装插件之前,可以测试端口是否已被占用,以避免编排过程中出错。可以使用以下命令安装netstat并查看端口号是否被占用: yum -y install net-tools netstat -npl | grep 3306 现在,您已经安装Docker安装Docker Compose插件,可以继续进行其他操作,例如上传docker-compose.yml文件到服务器,并在服务器上安装MySQL容器。可以参考Docker的官方文档或其他资源来了解如何使用DockerDocker Compose进行容器的安装和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Docker安装docker-compose插件](https://blog.csdn.net/qq_50661854/article/details/124453329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Docker安装MySQL docker安装mysql 完整详细教程](https://blog.csdn.net/qq_40739917/article/details/130891879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值