Qt opengl更多属性:把颜色数据加进顶点数据中

(1)顶点数据:位置+颜色
左半部分是位置数据 右半部分是颜色数据

float vertices[] = { // 位置positions // 颜色colors
                     0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f,	// top right    红色
                     0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,	// bottom right 绿色
                     -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 	// bottom left  蓝色
                     -0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f,	// top left
                   };

(2)顶点着色器代码:传出颜色
gl_Position内置变量主要和顶点相关,出现的位置是顶点着色器语言的main函数中。gl_Position内置变量表示最终传入片元着色器片元化要使用的顶点位置坐标。 vec4(x,y,z,1.0),前三个参数表示顶点的xyz坐标值第四个参数是浮点数1.0

#version 330 core
layout(location = 0) in vec3 aPos;  //顶点着色器 索引为0入口  位置
layout(location = 1) in vec3 aColor;//索引为1 aColor需要送出去
out vec3 ourColor;            //定义一个vec3对象把aColor传到ourColor
void main(){
    gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0f);
    ourColor=aColor;
}

(3)片段着色器:接收到颜色

#version 330 core
out vec4 FragColor;
in vec3 ourColor;//流水线下游收到颜色
void main(){
    FragColor = vec4(ourColor, 1.0f);//接收到的颜色放到FragColor
}

(4)顶点和片段着色器属性
对应的代码部分需要增加颜色部分
在这里插入图片描述
增加的颜色代码部分 注意索引为1 偏移量是从第12个字节开始(3个float)

    glEnableVertexAttribArray(0);
    //告知显卡如何解析缓冲里的属性值 GL_FALSE不需要标准化 步长为6个float(24字节) 偏移量为3个字节
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3*sizeof(float)));
    //开启VAO管理的第二个属性值
    glEnableVertexAttribArray(1);

(5)增加颜色属性后的最后效果
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

守静向光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值