IOS OpenGLES2.0 入门03 绘制彩色三角形
来源:互联网 发布:淘宝助理6.0 官方 编辑:程序博客网 时间:2024/05/21 16:13
接上一篇
上一篇的三角形是红色, 红色的代码是固定死在代码里面的, 如果要蓝色, 白色, 或者是彩色的, 这样就行不通了
那么如何绘制一个彩色的三角形呢
绘制红色的三角形的Fragment Shader的代码是这样的
void main(void) { gl_FragColor = vec4(1, 0, 0, 1);}
之前说了gl_FragColor是该顶点的输出颜色, 正常我们不会把代码写死, 而应该是传递一个变量给它, 想要什么颜色可以通过这个变量来改.
Vertex Shader可以给Fragment Shader传递参数, 使用的就是varying关键字
我们将之前的Vertex Shader和Fragment Shader源码改动一下
Vertex Shader
attribute vec4 position; attribute vec4 inputColor; varying vec4 fragmentColor; void main(void) { fragmentColor = inputColor; gl_Position = position; }
Fragment Shader
varying lowp vec4 fragmentColor; void main(void) { gl_FragColor = fragmentColor; }
这样我们就要传递两个参数给Vertex Shader, 一个position, 一个inputColor.
我们定义Color的数据
static int colorCount = 3;static GLfloat colorData[] = { //RGB格式 1, 0, 0, 0, 1, 0, 0, 0, 1};
然后使用跟顶点数据一样的方式将数据传递给OpenGL
_positionPtr = glGetAttribLocation(_program, "position");_colorPtr = glGetAttribLocation(_program, "inputColor");
glGenBuffers(1, &_colorBuffer);glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer);glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW);
因为颜色和顶点数据都是使用GL_ARRAY_BUFFER这个标志, 所以我们将数据绑定给OpenGL并且告诉它如何使用的时候, 必须马上将数据绘制出来, 不然会被后面的数据覆盖, 或者再重新绑定一次
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
后面的glDrawArrays都是针对_vertexBuffer来操作.
然后在
glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer);
后面的glDrawArrays都是针对_colorBuffer来操作.
这边不在多次绑定, 直接draw出来
所以创建和绘制顶点和颜色的函数改成这样
- (void) setupVertexAndColorData { //顶点数据 glGenBuffers(1, &_vertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW); glEnableVertexAttribArray(_positionPtr); glVertexAttribPointer(_positionPtr, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, NULL); glDrawArrays(GL_TRIANGLES, 0, vertexCount); //颜色数据 glGenBuffers(1, &_colorBuffer); glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW); glEnableVertexAttribArray(_colorPtr); glVertexAttribPointer(_colorPtr, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL); glDrawArrays(GL_TRIANGLES, 0, colorCount);}
其他的还是给上一篇一样
修改完后的代码
- IOS OpenGLES2.0 入门03 绘制彩色三角形
- IOS OpenGLES2.0 入门02 绘制三角形
- Android OpenGLES2.0(二)——绘制一个三角形
- 绘制彩色三角形
- IOS OpenGLES2.0 入门04 加载纹理
- Android OpenGLES2.0(三)——等腰直角三角形和彩色的三角形
- Opengles2.0入门
- IOS OpenGLES2.0 入门01 清空屏幕
- OpenglES2.0 for Android:来画个三角形吧
- opengles2.0绘制多边形plane算法
- ios 绘制三角形
- Opengles2.0 for android入门笔记(一)
- 用OpenGL ES绘制一个彩色的三角形
- iOS绘制图形(三角形)
- Android OpenGLES2.0(五)——绘制立方体
- OpenGLES2.0绘制2D图片详解(附完整demo)
- XNA2.0框架之跟着范例入门(一)彩色三角形
- OpenGL入门(三):绘制一个三角形
- 当系统崩溃,业务停摆,谁才是真正的大英雄?
- ActiveMQ启动时报锁定数据库的问题解决
- Mongodb语句
- Windows Server 2016版本特性比较及新功能
- 在Ubuntu(1404)下安装cuda7.5的安装流程
- IOS OpenGLES2.0 入门03 绘制彩色三角形
- web性能测试基本性能指标
- 框架-目录结构
- [Contests]2016 ACM/ICPC Asia Regional Dalian Online(1006/7/8/9)
- Hibernate QueryException:Not all named parameters have been set:
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- C#值类型和引用类型_160928
- Win7中的软链接详解(mklink命令)
- Python学习笔记1