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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自定义绘图

發(fā)布時(shí)間:2024/8/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义绘图 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
引擎在CCNode中預(yù)留了自定義繪圖接口,如: 1 void CCNode::draw() 2 { 3 //CCAssert(0); 4 //可以重載此方法 5 //最好僅在這個(gè)方法中繪制自定義的內(nèi)容 6 }

?

draw函數(shù)是一個(gè)每幀都會(huì)調(diào)用的函數(shù),注釋中明確指出,通常情況下只應(yīng)該在這個(gè)函數(shù)內(nèi)編寫自定義繪制效果,不要再這個(gè)函數(shù)以外的任何地方繪圖。這是因?yàn)橐嬖谶@個(gè)函數(shù)調(diào)用的上下文之間進(jìn)行了繪圖環(huán)境的準(zhǔn)備和必要的狀態(tài)設(shè)置。在其他地方添加繪制代碼可能引起不可預(yù)料的錯(cuò)誤。 遮罩層 遮罩效果又稱剪刀效果,允許一切的渲染結(jié)果只在屏幕的一個(gè)指定區(qū)域顯示:開啟遮罩效果后,一切都繪制提交都是正常渲染的,但最終只有屏幕上的指定區(qū)域會(huì)被繪制。 數(shù)據(jù)交流 CCImage和CCTexture2D是引擎提供的描述紋理圖片的類,也是和顯卡進(jìn)行數(shù)據(jù)交換時(shí)主要涉及的數(shù)據(jù)結(jié)構(gòu)。 CCImage: CCImage在“CCImage.h”中定義,表示一張加載到內(nèi)存的紋理圖片。在其內(nèi)部的實(shí)現(xiàn)中,紋理以每個(gè)像素的顏色值保存在內(nèi)存之中。CCImage通常作為文件和顯卡間數(shù)據(jù)交換的一個(gè)工具,因此主要提供了兩個(gè)方面的功能:一方面是文件的加載與保存,另一方面是內(nèi)存緩沖區(qū)的讀寫。 我們可以使用CCImage輕松地讀寫圖片文件,目前,CCImage支持PNG、JPEG、和TIFF三種圖片格式。 以下幾個(gè)方法: 1 bool initWithImageFile(const char* strPath, EImageFormat imageType = kFmtPng); 2 bool initWithImageFileThreadSafe(const char* fullpath, EImageFormat imageType = kFmtPng); 3 bool saveToFile(const char* pszFilePath, bool bIsToRGB = True);

?

CCImage也提供了讀寫內(nèi)存的接口。getData和getDataLen這兩個(gè)方法提供了后去當(dāng)前紋理的緩沖區(qū)的功能,而initWithImageData方法提供了使用像素?cái)?shù)據(jù)初始化圖片的功能。 如下: 1 unsigned char* getData(); 2 int getDataLen(); 3 bool initWithImageData(void* pData, int nDataLen, EImageFormat eFmt = kFmtUnKnown, int nWidth = 0, int nHeight = 0, int nBitsPerComponent = 8); 4

?

CCTexture2D: 它描述了一張紋理,知道如何將自己繪制到屏幕上。通過該類還可以設(shè)置紋理過濾、抗鋸齒等參數(shù)。還提供一個(gè)接口,將字符串創(chuàng)建成紋理。 值得注意的是:該類所包含的紋理大小必須是2的冪次,因此紋理的大小不一定就等于圖片大小;另外,有別于CCImage,這是一張存在于顯存中的紋理,實(shí)際上并不一定存在于內(nèi)存中。 截屏功能: 首先,我們使用OpenGL的一個(gè)底層函數(shù)glReadPixels實(shí)現(xiàn)截圖: void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);

?

//這個(gè)函數(shù)講當(dāng)前屏幕的像素讀取到一個(gè)內(nèi)存塊pixels中,且pixels指針指向的內(nèi)存必須足夠大。

?

轉(zhuǎn)載于:https://www.cnblogs.com/Blogs-young-chan/p/5250391.html

總結(jié)

以上是生活随笔為你收集整理的自定义绘图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。