位置: 编程技术 - 正文

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

  • 预交所得税分录怎么写
  • 设计合同服务期限怎么写
  • 计税价格是什么税
  • 投资利税率包括所得税吗
  • 一般纳税人购买二手车可以抵扣嘛
  • 固定资产清理的账务处理
  • 公司基本户里的钱有利息吗
  • 会议服务费免税吗
  • 航空公司开具的个人抬头的发票可以税前扣除吗
  • 政府补贴在企业怎么申请
  • 房地产可抵扣的税有哪些
  • 收到其他与筹资活动有关的现金计算公式
  • 自产货物用于本企业在建工程交增值税不
  • 库存现金和银行存款的区别
  • 代开的增值税专用发票应怎样填写?
  • 不动产初始登记流程
  • 库存商品过期报废需要什么附件
  • 只有利息费用的财务费用如何结转?
  • 租赁公司扣押金
  • 深圳制造业税收
  • 防暑降温需要缴什么费用
  • 工程结算收入和应收账款的区别
  • 留抵税额怎么计算
  • 中小企业货币资金内部控制案例
  • 事业单位购入车辆如何做账
  • 抵扣联和发票联算一张发票吗
  • 无法收回的款项摘要怎么写
  • w10关闭
  • 关联交易认定标准税务
  • u启动怎么装机
  • linux查关键字
  • 品质扣款单
  • 其他应收款未收回会计分录
  • 非货币性资产交换的记忆口诀
  • ntfs文件夹权限高于文件权限
  • msmpeng.exe 是什么
  • 【已解决】VUE3+webpack >5报错问题
  • laravel phpstudy
  • php面向对象和面向过程
  • 年终奖并入综合所得
  • nerf新手入门
  • 中国传统节日大概有多少
  • 建立分公司流程
  • 织梦怎么新建页面
  • mongodb在windows上的安装
  • 电子发票开出后如何查看
  • 资产负债所有者权益借贷方向
  • 财务负责人需要工商登记吗
  • 普通发票开具的管理是?
  • 建行e信通贴现高不高
  • 员工缴纳工伤保险怎么赔偿
  • 年底本年利润结转错了怎么调
  • 工会经费滞纳金怎么算
  • 企业购车购置税怎么算
  • 民非企业怎么给员工交五险
  • 利息专用发票可以抵扣吗
  • 32位的win7和64位的win7要选择哪个呢?它们有什么区别?
  • WIN10系统优化技巧
  • Ubuntu Update-rc.d命令详细介绍
  • win10系统如何查看激活状态
  • 微软停止对xp的操作
  • win10预览版和正式版
  • linux查看硬件信息的命令
  • load its core dll
  • window7系统中的桌面指什么
  • win8.1无法安装net framework 3.5
  • linux命令文件移动并改名
  • js自动输入
  • jquery滑动触发事件
  • js生成d.ts
  • promise实例方法
  • 设计一个windows
  • windows安装pycharm
  • javascript数据类型有哪些
  • python cx_Oracle模块的安装和使用详细介绍
  • python图片验证码输入错误不能点登陆
  • 税务局税收分类编码
  • 国家税务总局山东省电子税务局
  • 深圳全电子发票开具流程
  • 软件销售税率13还是6还是9
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设