位置: 编程技术 - 正文

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

  • 销项税减去进项税
  • 购买车位的税费是多少钱
  • 公司股东变更需要本人到场吗
  • 收到以前年度退所得税分录
  • 机票和发票是一样的吗
  • 年报资金数额要怎样填
  • 所得税补缴怎么回事
  • 上年其他应付款本年度付了怎么做账
  • 增值税期末留抵退税政策实施力度
  • 对公账户如何转到法人账户
  • 折旧方法改变属于会计政策变更还是估计变更
  • 一般纳税人怎么转小规模
  • 往来核算会计的岗位职责和工作内容
  • 公司网站建设费入什么明细科目里
  • 营改增建筑业税率是多少
  • 增值税计税依据包含消费税吗
  • 金蝶软件怎么设置会计科目
  • 一般纳税人核定征收增值税
  • 现在地税发票还要交税吗
  • 新疆税收扶持丝路古镇喀什重放异彩
  • 长期股权投资撤股怎么处理
  • 收取技术服务费
  • 咨询费如何入账
  • linux wget命令详解
  • ppt文件打不开了怎么办
  • 营业外收入账户贷方登记企业发生的各项营业外收入
  • 哪些企业需进行预算管理
  • 企业规模扩大后更易于管理吗
  • 外商投资合伙企业有哪些
  • php的ajax
  • 房屋租赁发票怎么入账
  • 外汇申报是什么意思
  • 销售过程会计核算视频
  • Midjourney之外21款免费的AI Image画图网站集合
  • vue中动态添加表格
  • 季度是指
  • 企业内部研究开发项目开发阶段的支出
  • 电商每天利润表怎么做
  • 现金折扣什么时候冲减收入
  • 织梦怎么改网站主页
  • 织梦内容页模板修改
  • 税盘清卡清不了怎么办
  • sql2005sp4
  • 实收资本一定要到账吗
  • 进项税转出怎么交税
  • 发票未到货已入库会计分录 原材料
  • 没有收到款项签认债有用吗
  • 融资租赁与经营租赁的区别主要是
  • 国际快递能发吗
  • 期间费用包括哪三种
  • 简易计税项目可以抵扣进项税吗?
  • 会计做账工作总结
  • 建立明细账科目怎么排顺序
  • mysql缩进快捷键
  • sql server高级编程
  • 极速一键装机
  • wfxctl32.exe - wfxctl32是什么进程
  • centosfind命令
  • macbook2020款改硬盘
  • 查找临时文件的命令
  • win7蓝屏怎么办
  • hyper v安装系统
  • 怎么快速更换苹果手机壁纸
  • 自由选择工具快捷键
  • cocos2dx-js
  • 如何除掉
  • javascript中的判断语句
  • unity火球特效
  • 由浅入深易,由深入浅难
  • python的argparse用法
  • javascript怎么写
  • unity gpu优化
  • js实现点击按钮移动滑块到另一个按钮的方法
  • Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
  • 江苏电子税务局电话
  • 宁波鄞州区行政区划代码
  • 对税务稽查工作的意见和建议
  • 网上申报纳税小程序下载
  • 应纳税额减征额账务处理
  • 柬埔寨现在的领导
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设