日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2.x最终照着教程,成功使用OpenGL ES 绘制纹理贴图,添加了灰度图

發布時間:2023/11/30 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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???





轉載于:https://www.cnblogs.com/zfyouxi/p/5254498.html

總結

以上是生活随笔為你收集整理的2.x最终照着教程,成功使用OpenGL ES 绘制纹理贴图,添加了灰度图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。