位置: 编程技术 - 正文

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

  • 房产税会计分录怎么做
  • 上月多计提增值税
  • 银行共管账户现在可以开设吗
  • 计提资本公积的处理
  • 收入比开票多如何处理好
  • 出差怎么订机票
  • 企业所得税季度预缴可以弥补以前年度亏损吗
  • 非货币性资产交换准则
  • 代国外佣金代扣税金账务怎么处理?
  • 出口发票税率开错了怎么办
  • 本月计错多发的工资可以不交个税
  • 公司研发产品
  • 企业自用的厂房计入什么科目
  • 厂家给返点算拿回扣吗
  • 应纳税所得额要减所得税费用吗
  • 中国每年森林火灾造成的损失
  • 一次性劳务费需要交税吗
  • 1697510649
  • 企业其他应付款增加说明什么
  • 企业不得抵扣进项税的情形
  • 不能升级win11的二手电脑值得购买吗
  • 独立费计算
  • 外汇账户怎么做账
  • 收到发票怎么入库
  • 公司资产报废处理请示
  • type3插件
  • 发出商品但货款没到账
  • php中meta
  • vue 右键菜单
  • 龙舌兰 (© Moab Republic/Shutterstock)
  • 房地产预缴所得税怎么算
  • 出口企业要缴纳印花税吗
  • 单目测距精度
  • 支付员工交通费怎么入账
  • phpcms教程
  • 公允价值变动损益借贷方向
  • 手工帐月末结转会计分录
  • 一般纳税人普通发票做账
  • 什么样的资产可以执行
  • php 时间
  • 月末半成品也需要结转生产成本
  • 委托收款的含义
  • 发票校验码被章盖住了
  • 同一控制下收购溢价
  • 丢失增值税发票已报税证明单取消
  • 其他应收款余额在贷方什么意思
  • 企业收入总额是营业额吗
  • 质量赔偿金
  • 收到境外支付的咨询费免税吗
  • 企业跨年度支出怎么计算
  • 把excel表格里的文字复制到word
  • 通过SQL绘制杨辉三角的实现方法介绍
  • linux终端怎么运行
  • solaris route add
  • 直接玩鬼泣4
  • u盘 macbook
  • linux中磁盘分区
  • Ubuntu系统怎么设置IP
  • Linux系统SCSI磁盘扫描机制解析及命令详细介绍
  • nclaunch.exe - nclaunch进程有什么用 是什么意思
  • quick cocos UIListView之isItemInViewRect方法修正
  • opengl数据类型
  • 深入理解javascript特性.pdf
  • EXTJS记事本 当CompositeField遇上RowEditor
  • 那些年的我们什么意思
  • nodejs游戏开发
  • dos测试网络连接
  • python第三方库在哪下载
  • 教你用十行node.js代码读取docx的文本
  • 基于flask的开源项目
  • 下载python教程
  • 深入理解android内核
  • Unity3D中Enabled、Destroy与Active的区别
  • 基于nodejs的项目
  • jquery将文本框设置为只读
  • 基于jQuery和Bootstrap的设计报告的参考文献
  • jquery移动版
  • 个人年收入超过多少不能退税
  • 2008土地管理办法
  • 个体工商户开发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设