2.x最终照着教程,成功使用OpenGL ES 绘制纹理贴图,添加了灰度图
在之前成功绘制变色的几何图形之后,今天利用Openg ES的可编程管线绘制出第一张纹理。
学校时候不知道OpenGL的重要性,怕晦涩的语法。没有跟老师学习OpenGL的环境配置,现在仅仅能利用cocos2dx 2.2.3 配置好的环境学习OpenGL ES。
源码来自《cocos2d-x高级开发教程》,凝视是本人的。
要形成屏幕的像素也是个矩形(或者圆形区域)
所以我们仅仅要记住,MaxS是纹理宽度除以对于的屏幕像素点的宽度,也就是纹理铺放在x轴像素点个数,相应为纹理坐标的x轴
MaxT是纹理高度度除以对于的屏幕像素点高度,也就是<span style="font-family: Arial, Helvetica, sans-serif;">纹理铺放在x轴像素点个数。相应为纹理坐标的y轴
这篇博文的重点再有已有opengl入门的情况下。了解CCTexture2D的參数意思就能够任意绘制纹理了。
void HelloWorld::draw()
{ //opengl世界坐标轴的读取和绘制默认是逆时针顺序
static GLfloat vertext[] = {
0.0f,0.0f,0.0f,
480.0f,0.0f,0.0f,
0.0f,320.0f,0.0f,
480.0f,320.0f,0.0f
}; //可是纹理的读取也是逆时针,仅仅是EG是用三角形作为基础图形去绘制其它图形,方向先绘制下三角,再绘制上三角!。! 之前这里搞错了。希望大家别被我误导了
static GLfloat coord[] = {
0.0f,1.0f,
1.0f,1.0f,
0.0f,0.0f,
1.0f,0.0f
}; static GLfloat colors[] = {
1.0f,1.0f,1.0f,1.0f,
1.0f,1.0f,1.0f,1.0f,
1.0f,1.0f,1.0f,1.0f,
1.0f,1.0f,1.0f,1.0f,
};
<span style="white-space:pre"> </span>
如果换成灰度图的话。float gray = r*0.3+g*0.59+b*0.11;将上诉的1.0f所有换成gray。就是对应的灰度图了
//初始化纹理,即将纹理映射至openGL ES的世界坐标系中
static CCTexture2D * texture2d = CCTextureCache::sharedTextureCache()->addImage("HelloWorld.png");
coord[2] = coord[6] = texture2d->getMaxS();
coord[1] = coord[3] = texture2d->getMaxT();
//设置着色器
//开启着色器,坐标、颜色、纹理
ccGLEnableVertexAttribs(kCCVertexAttribFlag_PosColorTex);
//眼下没看懂详细运行了的use()操作,启用可编程管线??
texture2d->getShaderProgram()->use();
//在2.2.3中setUniformsForBuiltins 替换掉 setUniformForModelViewPorjectionMatrix(),
//设置统一属性。即M模型、V视图、P投影,完毕从Opengl的世界坐标到屏幕坐标的映射
texture2d->getShaderProgram()->setUniformsForBuiltins(); //绑定纹理,texture2d->getName() 纹理在内存或显存中存储的下标(应该是下标,我没看纹理载入,还不了解GPU和CPU的通信)
glBindTexture(GL_TEXTURE_2D,texture2d->getName()); //设置顶点,每一个顶点向量维数为3。数据类型为GL_FLOAT,不归一化(真实物理坐标不能归一化),两个个顶点间的偏移量为0,
glVertexAttribPointer(kCCVertexAttrib_Position,3,GL_FLOAT,GL_FALSE,0,vertext); glVertexAttribPointer(kCCVertexAttrib_TexCoords,2,GL_FLOAT,GL_FALSE,0,coord); glVertexAttribPointer(kCCVertexAttrib_Color,4,GL_FLOAT,GL_FALSE,0,colors); //画图,从下标0開始。有4个顶点
glDrawArrays(GL_TRIANGLE_STRIP,0,4); }
重载void draw (void) 就可以。可能临时停止更新博客,先主要着手于游戏实现,而不是分享。
以下是贴转载内容:http://blog.csdn.net/wusheng520/article/details/8109284
CCTexture2D的成员变量:
m_tContentSize 图片的原始大小
m_uPixelsWide 大于等于原始宽度的最接近原始宽度的2的幂次方
m_uPixelsHeight 大于等于原始高度的最接近原始高度的2的幂次方
m_fMaxS m_tContentSize .x / m_uPixelsWide
m_fMaxT m_tContentSize .y / m_uPixelsHeight
2.x最终照着教程,成功使用OpenGL ES 绘制纹理贴图,添加了灰度图的更多相关文章
- 【Qt for Android】OpenGL ES 绘制彩色立方体
Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- 使用OpenGL ES绘制3D图形
如果应用定义的顶点不在同一个平面上,并且使用三角形把合适的顶点连接起来,就可以绘制出3D图形了. 使用OpenGL ES绘制3D图形的方法与绘制2D图形的步骤大致相同,只是绘制3D图形需要定义更多的 ...
- IOS 中openGL使用教程1(openGL ES 入门篇 | 搭建openGL环境)
OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...
- IOS 中openGL使用教程3(openGL ES 入门篇 | 纹理贴图(texture)使用)
在这篇文章中,我们将学习如何在openGL中使用纹理贴图. penGL中纹理可以分为1D,2D和3D纹理,我们在绑定纹理对象的时候需要指定纹理的种类.由于本文将以一张图片为例,因此我们为我们的纹理对象 ...
- 03: OpenGL ES 基础教程02 使用OpenGL ES 基本步骤
第二章:让硬件为你工作(OpenGL ES 应用实践指南 iOS卷) 前言: 1:使用OpenGL ES 基本步骤 2:绘制三角形 3:效果 正文: 一:使用OpenGL ES 基本步骤 1:生成缓存 ...
- Android OpenGL ES(八)----纹理编程框架
1.把纹理载入进OpenGL中 我们的第一个任务就是把一个图像文件的数据载入到一个OpenGL的纹理中. 作为開始.让我们又一次舍弃第二篇的框架.又一次创建一个程序,新建一个util工具包,在该包下创 ...
- OpenGL ES 压缩纹理
什么是压缩纹理 在实际应用特别是游戏中纹理占用了相当大的包体积,而且GPU无法直接解码目前流行的图片格式,图片必须转换为RGB等类型的格式才能上传到GPU内存,这显然增加了GPU内存的占用.为了处理这 ...
- Opengl ES之纹理贴图
纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...
随机推荐
- 外网访问自己的tomcat
我们平常学习时经常会写一下javaweb程序,我们为了更能逼近现实,就想着自己的javaweb程序发布后,外网的同学能够访问我们的网站,难道我们去买空间,去买域名嘛,其实也没必要,我们只是学习,测试之 ...
- hdu 5124
bc上的题目,很水,有很多方法做吧,题意大概就是给定你票数,然后让你求出票数最多的那个下标...... 之前我用两个for循环分开写,一个是读入,然后是判断,提交就wa,后来网上看了别人的,就是不能分 ...
- hdu 2190
//hdu2190 水题 题意是给一个n*3的教室,用1*1,2*2的砖去铺满,有多少种铺法,一开始没发现这个规律,想了一下,应该是递归. #include <iostream> usi ...
- Linux shell 脚本中”2>&1″的含义解释
脚本是:nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是 ...
- ASP.NET c#学习经验
1.DataGrid自定义字段.<Column <asp:BoundColumn DataField="khbh" HeaderText="客户编号&quo ...
- 武汉科技大学ACM:1003: 看美女
Problem Description “排排站,赏美女……” YJ师兄在今年牡丹江赛区人品爆发,怒摘银奖,心情倍好,现组织大家去黄家湖边站成一排看美女 ^.^ N个人站成一排.不巧,美女们只在队伍的 ...
- js兼容性大全(持续更新)
javascript部分 1. document.form.item 问题 问题: 代码中存在 document.formName.item("itemName") 这样的语句,不 ...
- 前台任意页面调用自定义字段选项 box 单选 多选方法及查询
在模板页增加函数,函数写法比较特殊,但是v9模板引擎nb,能够识别 <? function xbox($field,$na){ $a=p ...
- C++通过OCCI操作Oracle数据库详解
1.安装OCCI 如果oracle数据库默认没有安装OCCI,可以自己从官网上下载与自己数据库版本一致的API,其中包含四个软件包: oracle-instantclient-sqlplus-10.2 ...
- 如何用PowerPoint制作闪烁的星星
在PPT中,PPT动画说是幻灯片PPT中的精华是当之无愧的!ppt文件有了动画,犹如插上翅膀的鸟,让PPT的色彩衍生出了更多的特色.只要你的ppt动画效果制作的对,你的幻灯片将明显与众不同,观众也更容 ...