新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > WinCE OpenGL繪制立方體和紋理貼圖

        WinCE OpenGL繪制立方體和紋理貼圖

        作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

        glDisableClientState(GL_TEXTURE_COORD_ARRAY);glDisableClientState(GL_VERTEX_ARRAY);

        eglSwapBuffers(glesDisplay, glesSurface);}

        void Clean()

        { if(glesDisplay)

        { eglMakeCurrent(glesDisplay, NULL, NULL, NULL);if(glesContext) eglDestroyContext(glesDisplay, glesContext);if(glesSurface) eglDestroySurface(glesDisplay, glesSurface);eglTerminate(glesDisplay);}

        BOOL LoadTexture(LPCTSTR lpFileName,GLuint *id)

        { if(!g_Image.Load(lpFileName))

        return FALSE;

        // 創(chuàng)建紋理glGenTextures(1, id);// 綁定紋理glBindTexture(GL_TEXTURE_2D, *id);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, g_Image.Width(), g_Image.Height(), 0, GL_RGB, GL_UNSIGNED_BYTE, g_Image.GetBmpImage());

        g_Image.Free();

        return TRUE;}

        以下實(shí)現(xiàn)了一個(gè)文件加載類,用以將外部圖片資源轉(zhuǎn)化成繪制紋理時(shí)所需的位圖數(shù)據(jù)。參考代碼如下:

        view plain /******************************************************************** filename: CImgLoader.h created: 2011-01-05 author: firehood

        purpose: 文件加載類,將外部圖片資源轉(zhuǎn)化成繪制紋理時(shí)所需的位圖數(shù)據(jù)圖片格式支持bmp、png、jpg. *********************************************************************/ #pragma once

        class CImgLoader { public:CImgLoader(void);~CImgLoader(void);public:// 加載圖片資源BOOL Load(LPCTSTR lpFileName);// 獲取位圖數(shù)據(jù)unsigned char* GetBmpImage(void);// 釋放圖片資源void Free();// 獲取圖像寬度int Width();// 獲取圖像高度int Height();private:int m_Width; // 圖像寬度int m_Height; // 圖像高度unsigned char *m_pImage; // 指向圖像數(shù)據(jù)的指針};

        view plain /******************************************************************** filename: CImgLoader.cpp created: 2011-01-05 author: firehood

        purpose: 文件加載類,將外部圖片資源轉(zhuǎn)化成繪制紋理時(shí)所需的位圖數(shù)據(jù)圖片格式支持bmp、png、jpg. *********************************************************************/

        #include StdAfx.h #include ImgLoader.h // IImage Includer #include #include #include // IImage lib #pragma comment(lib, Imaging.lib)

        CImgLoader::CImgLoader(void)

        { m_pImage = NULL;m_Width = 0;m_Height = 0;}

        CImgLoader::~CImgLoader(void)

        { }

        // 加載圖片資源BOOL CImgLoader::Load(LPCTSTR lpFileName)

        { IImagingFactory *pImgFactory = NULL;IImage *pImage = NULL;IBitmapImage *pBmpImg = NULL;// CoInitializeEx(NULL, COINIT_MULTITHREADED);if (!SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void **) pImgFactory)))

        return FALSE;if (!SUCCEEDED(pImgFactory->CreateImageFromFile(lpFileName, pImage)))

        return FALSE;// 獲取圖像大小信息ImageInfo ImgInfo;pImage->GetImageInfo(ImgInfo);

        m_Width = ImgInfo.Width;m_Height = ImgInfo.Height;

        if (FAILED(pImgFactory->CreateBitmapFromImage(pImage,m_Width,m_Height,PixelFormat24bppRGB,InterpolationHintDefault,pBmpImg)))

        { return FALSE;} RECT rect = {0,0,m_Width,m_Height};BitmapData *BmpData = new BitmapData;

        if (FAILED(pBmpImg->LockBits(rect,ImageLockModeRead|ImageLockModeWrite,PixelFormat24bppRGB,BmpData)))

        { return FALSE;} int line = BmpData->Stride;LPBYTE lpData, lpLine, lpCurPixel;lpData = lpLine = (LPBYTE)BmpData->Scan0; // 獲取BMP位圖實(shí)際值的地址指針// 若為Bottom-Up(從下到上)的位圖,則指向buffer的結(jié)尾// 若為Top-Down(從上到下)的位圖,則指向buffer的開頭// int nBytesPP = nBPP >> 3; // 左移三位即除以8,獲取圖像每像素字節(jié)數(shù)m_pImage = new unsigned char[m_Width * m_Height * 3];memset(m_pImage, 0, m_Width * m_Height * 3);if(m_pImage == NULL)

        return FALSE;if (line>0)

        { int pos = m_Width * m_Height * 3-1;for(int i = 0; i

        { return FALSE;} delete BmpData;pBmpImg = NULL;pImage->Release();pImgFactory->Release();return TRUE;}

        // 獲取圖片數(shù)據(jù)unsigned char* CImgLoader::GetBmpImage(void)

        { return m_pImage;}

        // 獲取圖像寬度int CImgLoader::Width()

        { return m_Width;}

        // 獲取圖像高度int CImgLoader::Height()

        { return m_Height;}

        // 釋放圖片資源void CImgLoader::Free()

        { if(m_pImage)

        { delete []m_pImage;m_pImage = NULL;}


        上一頁 1 2 3 下一頁

        關(guān)鍵詞:

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 峡江县| 江山市| 松桃| 崇仁县| 望奎县| 固阳县| 白水县| 辽源市| 英德市| 屏东县| 北辰区| 芜湖市| 东丰县| 忻州市| 响水县| 白山市| 五原县| 于都县| 乌审旗| 河北省| 高陵县| 上蔡县| 祁门县| 新乐市| 金平| 平果县| 响水县| 阳原县| 孟村| 平塘县| 嘉善县| 兴海县| 龙口市| 泸水县| 盐山县| 肥城市| 武冈市| 贵南县| 库伦旗| 容城县| 武义县|