博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从顶点数据中传入顶点位置和顶点颜色
阅读量:6649 次
发布时间:2019-06-25

本文共 1063 字,大约阅读时间需要 3 分钟。

一、目的:不需要在着色器中指定图形的颜色,直接在顶点数据中指定颜色

//画三角形的顶点数组

float vertices[] = {
  //位置      //颜色
  -0.5f, -0.5f, 0.0f,1.0f,0.0f,0.0f,
  0.5f, -0.5f,0.0f,0.0f,1.0f,0.0f,
  0.0f,0.5f,0.0f,0.0f,0.0f,1.0f
};

二、

由于现在有更多的数据要发送到顶点着色器,我们有必要去调整一下顶点着色器,使它能够接收颜色值作为一个顶点属性输入。需要注意的是我们用layout标识符来把aColor属性的位置值设置为1:

顶点着色器:

1 #version 330 core 2 layout (location = 0) in vec3 aPos;   // 位置变量的属性位置值为 0  3 layout (location = 1) in vec3 aColor; // 颜色变量的属性位置值为 1 4  5 out vec3 ourColor; // 向片段着色器输出一个颜色 6  7 void main() 8 { 9     gl_Position = vec4(aPos, 1.0);10     ourColor = aColor; // 将ourColor设置为我们从顶点数据那里得到的输入颜色11 }

片元着色器:

#version 330 coreout vec4 FragColor;  in vec3 ourColor;void main(){    FragColor = vec4(ourColor, 1.0);}

三、

因为我们添加了另一个顶点属性,并且更新了VBO的内存,我们就必须重新配置顶点属性指针。

1 // 位置属性2 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);3 glEnableVertexAttribArray(0);4 // 颜色属性5 glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3* sizeof(float)));6 glEnableVertexAttribArray(1);

达到的效果:

 

转载于:https://www.cnblogs.com/keguniang/p/9901757.html

你可能感兴趣的文章
redis学习及实践3---Jedis、JedisPool、Jedis分布式实例介绍
查看>>
mobiscroll的例子
查看>>
浏览器存储页面
查看>>
WebApi接口返回值不困惑:返回值类型详解
查看>>
Windows终端屏幕显示库Public Domain Curses(PDCurses)使用
查看>>
【建站经验】 一个成熟的大型网站系统架构演化之路
查看>>
【RAID】raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘
查看>>
oracle excute immediate 单引号转义
查看>>
数组相关知识
查看>>
1设计模式---工厂模式。
查看>>
HDU-1573 X问题(中国剩余定理)
查看>>
UNIX环境高级编程——IPC总结
查看>>
UNIX网络编程——处理服务器中大量的TIME_WAIT
查看>>
添物不花钱学计算机及编程(预备篇) - 软件工程
查看>>
带状态论文粗读(三)[引用openstate的相关论文阅读]
查看>>
pcDuino无显示器刷机与使用
查看>>
程序员出路在何方
查看>>
linux-alias基本用法
查看>>
compose函数
查看>>
Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services
查看>>