Opengl学习程序之顶点颜色和位置设置
来源:互联网 发布:成都云计算公司排名 编辑:程序博客网 时间:2024/04/30 19:41
gouraud.vert
#version 330 corelayout(location = 0) in vec4 vPosition;layout(location = 1) in vec4 vColor;out vec4 color;void main(){ color =vColor; gl_Position = vPosition;}
gouraud.frag
#version 330 corein vec4 color;out vec4 fColor;void main(){ fColor = color;}
实现程序:
#include "stdafx.h"#include<iostream>using namespace std;#include "vgl.h"#include "LoadShaders.h"enum VAO_IDs{Triangles,NumVAOs};enum Buffer_IDs{ArrayBuffer,NumBuffers};enum Attrib_IDs{vPosition = 0,vColor = 1};GLuint VAOs[NumVAOs];GLuint Buffers[NumBuffers];const GLuint NumVertices = 6;void init(void){ glGenVertexArrays(NumVAOs, VAOs); glBindVertexArray(VAOs[Triangles]); struct VertexData{ GLubyte color[4]; GLfloat position[4]; }; VertexData vertices[NumVertices] = { { { 255, 0, 0, 255 }, {-0.90,-0.90} }, //三角形1 { { 0, 255, 0, 255 }, {0.85,-0.90} }, { { 0, 0, 255, 255 }, {-0.90,0.85} }, { { 10, 10, 10, 255 }, { 0.90, -0.85 } }, //三角形2 { { 100, 100, 100, 255 }, { 0.90, 0.85 } }, { { 255, 255, 255, 255 }, {-0.85,0.90} } }; glGenBuffers(NumBuffers, Buffers); glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); ShaderInfo shaders[] = { { GL_VERTEX_SHADER, "gouraud.vert" }, { GL_FRAGMENT_SHADER, "gouraud.frag" }, {GL_NONE,NULL} }; GLuint program = LoadShaders(shaders); glUseProgram(program); glVertexAttribPointer(vColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexData), BUFFER_OFFSET(0)); glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, sizeof(VertexData), BUFFER_OFFSET(sizeof(vertices[0].color))); glEnableVertexAttribArray(vColor); glEnableVertexAttribArray(vPosition);}void display(void){ glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(VAOs[Triangles]); glDrawArrays(GL_TRIANGLES, 0, NumVertices); glFlush();}int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); glutInitContextVersion(3, 3); glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow(argv[0]); glewExperimental = GL_TRUE; if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(EXIT_FAILURE); } init(); glutDisplayFunc(display); glutMainLoop();}
就是画了2个三角形!很简单的代码。
关于渐变颜色的解释:
光栅化:
OpenGL的管线中,顶点着色阶段(顶点、细分、和几何着色)以及片元着色阶段之间的过程称作光栅化,它的主要职责是判断屏幕空间的哪个部分被几何体(点,线、三角形)所覆盖。如果知道这些区域,再与输入的顶点数据相结合,那么光栅化阶段就可以对片元着色器中的每个变量数值进行线性差值计算,然后将结果输入到片元着色器当中。如果我们对颜色数据执行这一线性差值的过程,那么它在计算机图形学中有一个特殊的名字:Gouraud着色。颜色,表面法线,纹理映射过程中需要用到的纹理坐标等都是需要在几何图元之间进行插值的数值。
0 0
- Opengl学习程序之顶点颜色和位置设置
- OpenGL 学习笔记-顶点数组(颜色)
- OpenGL ES学习之顶点和着色器的定义
- 【解答】OpenGL 定义顶点和顶点颜色时为什么都用0x10000这个值
- openGL学习--顶点数组
- OpenGL 之顶点vertex
- openGl学习之添加颜色
- 《高效学习OpenGL》 之 控制光源的位置和方向
- OpenGL状态管理和绘制几何物体之顶点数组
- OpenGL学习笔记:顶点数组
- OpenGL学习七:顶点数组
- opengl 顶点数组 学习笔记
- OpenGL中的颜色设置
- Opengl学习程序之三角形
- Opengl学习程序之uniform
- Opengl学习程序之纹理
- DX9如果需要设置顶点alpha和颜色,需要如下设置
- OpenGL(十八) 顶点数组和抗锯齿(反走样)设置
- RFC译注
- 详解log4j2(上) - 从基础到实战
- 分区工具diskgenius如何使用 新电脑新硬盘如何分区
- 2016 腾讯软件开发面试题(不定项选择题第二部)
- javascript 设计模式-工厂模式
- Opengl学习程序之顶点颜色和位置设置
- elasticsearch 及elasticsearch-head插件安装
- Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
- react-native-sww-activity-indicator
- Linux环境进程间通信(二): 信号(上)
- Javascript模块化编程(一):模块的写法
- php,js端获取sessionid的方法
- PHP使用session完成注册登录后跳转到登录前一页码
- 1108. Finding Average (20) 字符处理