位置: 编程技术 - 正文

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文件)

  • 航天金税盘使用说明
  • 餐饮个体户如何开票
  • 固定资产处置损益怎么算
  • 企业所得税的纳税人有哪些简答题
  • 加油站的成品油是石油公司配送吗
  • 电子税务局怎么登录
  • 劳务费属于印花税范围吗
  • 进项税发票留抵
  • 计提存货跌价准备怎么计算
  • 坏账已核销
  • 销售人员的提成属于什么工资
  • 企业发生的装修费可以几年摊销
  • 一次性奖金可以分2次发吗
  • 收购发票盖章盖谁的
  • 红字记账的四种登记方式
  • 有效期起止时间段与已有备案有效期有交集
  • 优先股份转让权
  • 投资税收抵免
  • 分期付款买车的人多吗
  • 个人股权转让印花税在哪里申报
  • 小规模自开专票税率是1%还是3%
  • 申报个税按计提工资还是实际发放
  • 物流公司油卡怎么抵税的
  • 个税手续费返还要交增值税吗
  • 代开专票名称没有填写可以报销吗
  • 水利基金返还分录怎么写
  • 报考中级会计的工作证明
  • php精确的统计在哪里找
  • springboot上传文件大小设置
  • 财政应返还额度年末有余额吗?
  • 房产证和不动产权证都要办理吗
  • 塞巴斯蒂安电影 豆瓣
  • 布拉格下雪
  • 企业和银行未达账项
  • 服务费开票税收分类
  • 租入商铺
  • 当月开的增值税发票当月能抵扣吗
  • 一般纳税人只有销项没有进项
  • python.mat
  • python文档怎么查看
  • 节能控制模块
  • 发票已经做账但要退款账不平咋办
  • 企业法人个人贷款哪里好贷
  • 在excel中怎么制作
  • 一般纳税人销售自己使用过的物品
  • sql共享
  • 顺流交易为什么也要减
  • 企业转移地点剩余房产
  • 以货换货如何做账
  • 材料暂估入库的账务处理
  • 公司租赁办公场所,没发票怎么办
  • 企业银行存款的流动性强于存货
  • 返聘的退休人员需不需要缴纳社保
  • 签合同前的协议叫什么
  • 企业的经济补偿包括哪些
  • 收到没有填税号的信息
  • sql的数据操作
  • mysql中的触发器
  • win7系统如何打开
  • 磁盘清理后文件还在吗?
  • 通过修改注册表修改edge主页
  • 苹果电脑使用u盾怎么用
  • centos5.8服务器
  • centos7如何设置固定ip
  • 怎么从win8装回win7
  • win10笔记本键盘失灵按什么键恢复
  • win8.1连不上wifi
  • 微软企业官网
  • windows升级node版本
  • python里的set
  • jQuery基于ajax操作json数据简单示例
  • python获取本地路径
  • webservice规范
  • mac上安装破解软件会怎样
  • javascript要怎么学
  • 请问各位专家金线吊乌龟有什么功效
  • 什么是增值税一般纳税人证明
  • 发票校验码不清楚
  • 水资源税征收标准2023
  • 上海税务怎么样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设