新闻中心

EEPW首页>嵌入式系统>设计应用> WinCE OpenGL绘制立方体和纹理贴图

WinCE OpenGL绘制立方体和纹理贴图

作者: 时间:2016-10-08 来源:网络 收藏

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;

// 创建纹理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;}

以下实现了一个文件加载类,用以将外部图片资源转化成绘制纹理时所需的位图数据。参考代码如下:

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

purpose: 文件加载类,将外部图片资源转化成绘制纹理时所需的位图数据图片格式支持bmp、png、jpg. *********************************************************************/ #pragma once

class CImgLoader { public:CImgLoader(void);~CImgLoader(void);public:// 加载图片资源BOOL Load(LPCTSTR lpFileName);// 获取位图数据unsigned char* GetBmpImage(void);// 释放图片资源void Free();// 获取图像宽度int Width();// 获取图像高度int Height();private:int m_Width; // 图像宽度int m_Height; // 图像高度unsigned char *m_pImage; // 指向图像数据的指针};

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

purpose: 文件加载类,将外部图片资源转化成绘制纹理时所需的位图数据图片格式支持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位图实际值的地址指针// 若为Bottom-Up(从下到上)的位图,则指向buffer的结尾// 若为Top-Down(从上到下)的位图,则指向buffer的开头// int nBytesPP = nBPP >> 3; // 左移三位即除以8,获取图像每像素字节数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;}

// 获取图片数据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 下一页

关键词:

评论


相关推荐

技术专区

关闭