zoukankan      html  css  js  c++  java
  • 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   





  • 相关阅读:
    p标签中的文字垂直居中
    前端调试F12
    python之hashlib
    python之__new__()
    python深浅拷贝与赋值
    【Python3之socket编程】
    5月26号 JAVA基础语法 基本运算符
    5月25号 JAVA基础语法 变量 常量 作用域
    5月22号 JAVA基础语法 数据类型
    5月22号 JAVA基础语法 标识符和关键字
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5254498.html
Copyright © 2011-2022 走看看