位置: 编程技术 - 正文

OpenGL在MFC对话框上进行立方体贴图(opengl cullface)

编辑:rootadmin
&#;&#;

推荐整理分享OpenGL在MFC对话框上进行立方体贴图(opengl cullface),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl vc,winform opengl,opengl vc,opengl cullface,opengl mfc,opengl context for format,opengl mfc,opengl怎么在vs上运行,内容如对您有帮助,希望把文章链接给更多的朋友!

我用了五天时间才搞成功这个东西,网上虽有很多立方体贴图源码,但是都是以Windows Application编写。而以MFC对话框去做这个立方体贴图我却找不到一个。

所以我把源码贴出来让需要的人学习学习。我用的是VC&#;&#;6.0。如果您用的是VS可能需要稍稍修改。希望大家对OpenGL的热情越来越高,也希望各位关注我的博客。//////////////////////////////////////////////////////////////////////

头文件就是那几个,glut.h,glaux.h,stdio.h和iostream.h#define MAXTEXTURE 3 GLuint texture[MAXTEXTURE]; // 存储纹理

GLfloat angle_Y; // 用来绕y轴旋转物体

COpenGL::COpenGL(void){}

COpenGL::~COpenGL(void){ wglMakeCurrent(hDC,NULL); wglDeleteContext(hRC);}AUX_RGBImageRec *LoadImage(char *Filename) // 加载一个图片{ FILE *File = NULL; // 文件句柄

if (!Filename) // 确保文件名已经提供 { return NULL; // 如果没有则返回NULL }

File = fopen(Filename,"r"); // 检查文件是否存在

if (File) // 文件存在吗? { fclose(File); // 关闭File文件句柄 return auxDIBImageLoad(Filename); // 载入图片并返回其指针 }

return NULL; // 如果加载错误则返回NULL}

void COpenGL::DrawCube(void) { // 在此处添加代码进行绘制: glScalef(0.5,0.5,0.5); glRotatef(,1.0,1.0,0.0); glRotatef(angle_Y, 1.0f, 1.0f, 1.0f);

glBindTexture(GL_TEXTURE_2D,texture[0]); glBegin(GL_QUADS); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的左上 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的左下 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 纹理和四边形的右上 glEnd();

glBindTexture(GL_TEXTURE_2D,texture[1]); glBegin(GL_QUADS); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的左上 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 纹理和四边形的左下 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的右下 glEnd();

OpenGL在MFC对话框上进行立方体贴图(opengl cullface)

glBindTexture(GL_TEXTURE_2D,texture[2]); glBegin(GL_QUADS); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 纹理和四边形的左上 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的左下 glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的左下 glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的左上

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的左下 glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的左上

glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 纹理和四边形的左上 glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 纹理和四边形的左下

glEnd(); angle_Y &#;= 2.0f;

glFlush(); }

void COpenGL::Init(int width,int height){ glClearColor(0.0, 0.0, 1.0,0.0);

glCullFace(GL_BACK); glEnable(GL_CULL_FACE); glClearDepth(1.0f); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); if (!LoadTextureGL()) // 调用LoadTextureGL()函数 { // 如果纹理加载错误则返回FALSE } glEnable(GL_TEXTURE_2D);}

//设置像素&#;式bool COpenGL::SetupPixelFormat(HDC hDC0){ int nPixelFormat; hDC=hDC0; PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd结构的大小 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | // 支持OpenGL PFD_DOUBLEBUFFER, // 双缓存模式 PFD_TYPE_RGBA, , // 位颜色深度 0, 0, 0, 0, 0, 0, // 忽略颜色位 0, 0, 0, 0, 0, 0, 0, , // 位深度缓存 0, // 无模板缓存 0, // 无辅助缓存 PFD_MAIN_PLANE, // 主层 0, // 保留 0, 0, 0 // 忽略层,可见性和损毁掩模 }; if (!(nPixelFormat = ChoosePixelFormat(hDC, &pfd))) { MessageBox(NULL,_T("can not find proper mode"),_T("Error"),MB_OK|MB_ICONEXCLAMATION); return FALSE; } SetPixelFormat(hDC,nPixelFormat,&pfd); hRC = wglCreateContext(hDC); wglMakeCurrent(hDC, hRC); return TRUE;}

void COpenGL::Reshap(int w,int h){

glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //变为单位矩阵 gluPerspective(, (GLfloat)w / h, 0, ); //设置投影矩阵 glMatrixMode(GL_MODELVIEW); //设置矩阵模式为视图矩阵(模型) glLoadIdentity(); }

void COpenGL::Render(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // glutWireCube(1.0); //绘制线框立方体

DrawCube();

glColor3f(1.0, 1.0, 1.0); SwapBuffers(hDC); }

BOOL COpenGL::LoadTextureGL(){ BOOL State = FALSE; // 状态指示 AUX_RGBImageRec *TextureImage[MAXTEXTURE]; // 为纹理开辟存储空间

memset(TextureImage, 0, sizeof(void *) * MAXTEXTURE); // 清除图像记录,确保其内容为空并使指针指向NULL if ((TextureImage[0]=LoadImage("Data/1.bmp")) &&(TextureImage[1]=LoadImage("Data/2.bmp")) &&(TextureImage[2]=LoadImage("Data/3.bmp"))) { State=TRUE; // 设置状态变量为TRUE glGenTextures(MAXTEXTURE, &texture[0]); // 返回唯一的纹理名字来标识纹理,保存在texture中

for (int loop=0; loop<MAXTEXTURE; &#;&#;loop) // 循环处理MAXTEXTURE张纹理 { // 使用来自位图数据生成的典型纹理 glBindTexture(GL_TEXTURE_2D, texture[loop]); // 生成纹理 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data); // glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 线形滤波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 线形滤波 } } for (int loop=0; loop<MAXTEXTURE; &#;&#;loop) { if (TextureImage[loop]) // 纹理是否存在 { if (TextureImage[loop]->data) // 纹理图像是否存在 { free(TextureImage[loop]->data); // 释放纹理存储空间 } free(TextureImage[loop]); // 释放图像结构 } } return State;}

PLY文件读取与显示 用OpenGL写了一份读取PLY文件并显示的代码,支持以下关键字:ply/format/elementvertex/property/elementface/end_header以及数据类型:char(int8)/uchar(uint8)/short(int)/ushor

opengl坐标系 坐标系作为3D图形编程的基础,从它开始学习opengl是一个很好的切入点。在具体讨论之前,请允许我先向各位看官灌输一些概念或者术语。这是很有必要

openGL函数说明 函数原型:voidglBegin(GLenummode)voidglEnd(void)参数说明:mode:创建图元的类型。可以是以下数GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,

标签: opengl cullface

本文链接地址:https://www.jiuchutong.com/biancheng/369553.html 转载请保留说明!

上一篇:OpenGL键盘事件处理(opengl 输入框)

下一篇:PLY文件读取与显示(pcl读取ply文件)

  • 增值税科目及会计处理
  • 由旅行社开具的电子普票代订机票能抵扣税吗?
  • 增值税发票跨年抵扣新政策
  • 上期有留抵进项税额,本期如何转,如何做账
  • 会计凭证审核的主要内容
  • 建筑企业利润率低的原因
  • 委外加工半成品入库的会计分录
  • 把公司的设备弄坏了怎么办
  • 旅游费开票内容
  • 零税率购房发票
  • 工会经费有关的增值税能否抵扣?
  • 上年的增值税专票,下年还能抵扣认证吗
  • 如何选一般纳税人还是小规模纳税人合作?
  • 收入确认的
  • 一般纳税人销售自己使用过的物品
  • 调整期初数怎么做会计分录
  • 房屋装修费是否分摊到地下车位成本
  • 固定资产处置流程
  • 从租计征的房产税需要缴纳土地使用税吗
  • 递延所得税资产对应的会计科目
  • 怎么查询个体还是公司
  • 房地产企业收到的首付款要交税吗
  • 国库年终总结
  • 车辆维修费可以抵扣进项吗
  • 期末未抵扣数
  • 预缴税款是否计入成本
  • vue print nb 教程
  • coolmark是病毒吗
  • vue的iframe
  • php测试mysql 数据库连接
  • 搬迁收入增值税
  • 福利包括什么
  • 前端上传文件夹怎么操作
  • vue权限控制设计
  • thinkphp6多语言
  • 企业以前年度亏损不可以用什么弥补
  • wordpress标签tag文章
  • 入库税款异常怎么处理好
  • 固定资产折旧如何进行会计处理
  • 三代手续费的税率
  • strippped
  • sql语句字符串比较大小
  • SQLite3中的日期时间函数使用小结
  • 织梦生成出现500
  • 公司聘用临时工需要买社保吗
  • 金税四期主要核查什么?
  • 企业无形资产要摊销吗
  • 个人经营所得税怎么申报
  • 车船税应计入税金及附加吗
  • 公司冲账发票做账流程
  • 已提过5个月折旧要进行固定资产一次性扣除吗?
  • 发票开的是推广服务费计入什么费用?
  • 内部债权债务的抵消分录
  • 投资性房地产租金税率是多少
  • 公司员工还款会计分录
  • 企业接受捐赠的固定资产,应增加营业外收入
  • 应收账款折率
  • 库存现金过多的隐患
  • 企业如何建账做账
  • 数据库语言主要有哪几种
  • 如何关闭win10自带杀毒软件
  • explore.exe进程的作用
  • win10系统的优化
  • centos7.2安装
  • 网卡破解
  • win10 64位系统提示0x80070643错误代码的解决方法
  • jquery怎么获取
  • 好用的shell终端
  • 批处理文件是将需要连续使用的可多次重复使用的
  • javascriptz
  • ECLIPSE编辑器
  • jquery 字符串
  • Android使用opencv处理图片灰度
  • androidx混淆
  • javascript教程
  • 群租房怎么举报电话
  • 历年房产税
  • 加油河南app怎么注销
  • 城建税教育费附加怎么做分录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设