位置: 编程技术 - 正文

Opengl 添加纹理(opengl oes纹理)

编辑:rootadmin
#include <stdio.h>#include <windows.h> // Header File For Windows#include <glgl.h> // Header File For The OpenGL Library#include <glglu.h> // Header File For The GLu Library#include <glglut.h>// Header File For The Glaux Library#include<glGLAUX.H>#include <WinGDI.h>GLfloat xrot;GLfloat yrot;GLfloat zrot;GLuint texture[1];AUX_RGBImageRec *LoadBMP(char *Filename)//放在ResizeGLScene()之前 用来加载位图{FILE *File = NULL;if(!Filename){return NULL;}File = fopen(Filename , "r");if(File){fclose(File);return auxDIBImageLoad(Filename);}return NULL;}int LoadGLTextures()// 载入位图(调用上面的代码)并转换成纹理{int Status = false;//状态指示器AUX_RGBImageRec *TextureImage[1];//创建纹理的存储空间memset(TextureImage, 0, sizeof(void *)*1);//将指针设为NULLif(TextureImage[0] = LoadBMP("Data/Nehe.bmp")){Status = TRUE;//glGenTextures(1, &texture[0]) 告诉OpenGL我们想生成一个纹理名字(如果您想载入多个纹理,加大数字)。glGenTextures(1, &texture[0]);//创建纹理glBindTexture(GL_TEXTURE_2D, texture[0]);//使用来自位图数据生成的典型纹理glBindTexture(GL_TEXTURE_2D, texture[0]);/*参数“0”代表图像的详细程度,通常就由它为零去了。参数三是数据的成分数。因为图像是由红色数据,绿色数据,蓝色数据三种组分组成。 TextureImage[0]->sizeX 是纹理的宽度。如果您知道宽度,您可以在这里填入,但计算机可以很容易的为您指出此&#;。 TextureImage[0]->sizey 是纹理的高度。参数零是边框的&#;,一般就是“0”。 GL_RGB 告诉OpenGL图像数据由红、绿、蓝三色数据组成。GL_UNSIGNED_BYTE 意味着组成图像的数据是无符号字节类型的。最后... TextureImage[0]->data 告诉OpenGL纹理数据的来源。此例中指向存放在 TextureImage[0] 记录中的数据。*/glTexImage2D(GL_TEXTURE_2D, 0 ,3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data );//创建纹理/*下面的两行告诉OpenGL在显示图像时,当它比放大得原始的纹理大 ( GL_TEXTURE_MAG_FILTER )或缩小得比原始得纹理小( GL_TEXTURE_MIN_FILTER )时OpenGL采用的滤波方式。通常这两种情况下我都采用 GL_LINEAR 。这使得纹理从很远处到离屏幕很近时都平滑显示。使用 GL_LINEAR 需要CPU和显卡做更多的运算。如果您的机器很慢,您也许应该采用 GL_NEAREST 。过滤的纹理在放大的时候,看起来斑驳的很『译者注:马赛克啦』。您也可以结合这两种滤波方式。在近处时使用 GL_LINEAR ,远处时 GL_NEAREST 。*/glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);}if(TextureImage[0]){if(TextureImage[0]->data){free(TextureImage[0]->data);}free(TextureImage[0]);}return status;}int InitGL(GLvoid) // 此处开始对OpenGL进行所有设置{if (!LoadGLTextures())// 调用纹理载入子例程{return FALSE; // 如果未能载入,返回FALSE}glEnable(GL_TEXTURE_2D);// 启用纹理映射glShadeModel(GL_SMOOTH);// 启用阴影平滑glClearColor(0.0f, 0.0f, 0.0f, 0.5f);// 黑色背景glClearDepth(1.0f);// 设置深度缓存glEnable(GL_DEPTH_TEST);// 启用深度测试glDepthFunc(GL_LEQUAL);// 所作深度测试的类型glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// 真正精细的透视修正return TRUE; // 初始化 OK}int DraeGLScene(GLvoid){glCLear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f, 0.0f, -5.0f);glRotatef(xrot,1.0f,0.0f,0.0f);// 绕X轴旋转glRotatef(yrot,0.0f,1.0f,0.0f);// 绕Y轴旋转glRotatef(zrot,0.0f,0.0f,1.0f);/*下一行代码选择我们使用的纹理。如果您在您的场景中使用多个纹理,您应该使用来 glBindTexture(GL_TEXTURE_2D, texture[ 所使用纹理对应的数字 ]) 选择要绑定的纹理。当您想改变纹理时,应该绑定新的纹理。有一点&#;得指出的是,您不能在 glBegin() 和 glEnd() 之间绑定纹理,必须在 glBegin() 之前或 glEnd() 之后绑定。注意我们在后面是如何使用 glBindTexture 来指定和绑定纹理的。*/glBindTexture(GL_TEXTURE_2D, texture[0]);/*为了将纹理正确的映射到四边形上,您必须将纹理的右上角映射到四边形的右上角,纹理的左上角映射到四边形的左上角,纹理的右下角映射到四边形的右下角,纹理的左下角映射到四边形的左下角。如果映射错误的话,图像显示时可能上下颠倒,侧向一边或者什么都不是。 glTexCoord2f 的第一个参数是X坐标。 0.0f 是纹理的左侧。 0.5f 是纹理的中点, 1.0f 是纹理的右侧。 glTexCoord2f 的第二个参数是Y坐标。 0.0f 是纹理的底部。 0.5f 是纹理的中点, 1.0f 是纹理的顶部。所以纹理的左上坐标是 X:0.0f,Y:1.0f ,四边形的左上顶点是 X: -1.0f,Y:1.0f 。其余三点依此类推。试着玩玩 glTexCoord2f 的X,Y坐标参数。把 1.0f 改为 0.5f 将只显示纹理的左半部分,把 0.0f 改为 0.5f 将只显示纹理的右半部分。*/glBegin(GL_QUADS);// 前面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);// 纹理和四边形的左下// 顶面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(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, 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);// 纹理和四边形的左上glEnd();xrot&#;=0.3f;yrot&#;=0.2f;zrot&#;=0.4f;return TRUE;}>.obj : error LNK: 无法解析的外部符号 _auxDIBImageLoadA@4,该符号在函数 "struct _AUX_RGBImageRec * __cdecl LoadBMP(char *)" (?LoadBMP@@YAPAU_AUX_RGBImageRec@@PAD@Z) 中被引用

推荐整理分享Opengl 添加纹理(opengl oes纹理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl纹理最大尺寸,opengles纹理,opengl添加纹理图片图片被放大,opengl创建纹理,opengl添加纹理图片图片被放大,opengl创建纹理,opengl纹理贴图实例,opengl创建纹理,内容如对您有帮助,希望把文章链接给更多的朋友!

Opengl 添加纹理(opengl oes纹理)

1>d:userslenovodocumentsvisual studio Projects2Debug2.exe : fatal error LNK: 1 个无法解析的外部命令

解决方法:

cocos2dx吸蓝效果实现opengl绘制 cocos2dx想做一些比较炫的效果,单纯依靠引擎封装提供的一些东西毕竟有限,最近项目是用opengl绘制一些效果出来,代码如下:封装类效果类GoodDropEffects

错误error LNK: 无法解析的外部符号 _auxDIBImageLoadW@4 OpenGL编程时VS编译器报错:错误1errorLNK:无法解析的外部符号_auxDIBImageLoadW@4,该符号在函数p0解决办法:在cpp头部加入如下代码:#includeglaux.h#pragmacomment(li

传奇绘图更换笔记:ZenGL 一些需要注意的事情 ZenGL的颜色位序为文档中说明为TEX_RGBA但实际在Delphi为ABGR这或许是因为Opengl的端序和Delphi下不太一致。fx_setColor这个函数却不是使用ABGR而是实在的RGBA导

标签: opengl oes纹理

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

上一篇:opengl 绘制实心圆柱体(opengl画实体)

下一篇:cocos2dx吸蓝效果实现opengl绘制

  • 增值税发票税控开票软件怎么下载
  • 建筑业增值税税率2022
  • 汇算清缴职工教育费填在
  • 人员处于银行代扣报盘期间什么意思
  • 营改增对房地产行业的影响
  • 补发工资如何计提
  • 研发费用加计扣除条件
  • 转让无形资产专利权的账务处理
  • 非在职员工是什么意思
  • 进口缴纳关税
  • 支付宝手续费由谁承担
  • 房地产开发企业预缴增值税
  • 一般纳税人首次领票能领多少
  • 个人建筑安装如何交税
  • 没有外管证就开具了发票
  • 建安业一般纳税人企业所得税率是多少
  • 普通发票收款方账号信息错了可以正常报销吗
  • 汇总记账凭证账务处理程序的优点包括
  • 福利费计提包括奖金吗
  • js app框架
  • mac u盘
  • dgservice.exe是什么文件
  • qqexternal.exe是什么进程如何删除(CPU的使用率在90%)
  • 委托代销委托方的账务处理
  • 货款形式返还
  • 个人之间股权转让印花税怎么交
  • 营改增后租金如何交税
  • 金融负债的范围
  • 金融商品转让属于什么服务
  • 商业会计做账
  • php实现上传图片功能
  • 移动列表格
  • 应收账款的定义和特点
  • php 正则
  • 中小企业应交税费
  • 微信公众号服务平台
  • 微信支付php开发流程
  • 国税系统怎么认证发票
  • println参数
  • mfc中format
  • 收汇和结汇都有什么
  • 小规模纳税人的企业所得税怎么算
  • 残疾基金出什么科目
  • 如何解决安装包解析错误
  • 帝国cms模型
  • vue整合electron
  • 年终奖怎么计算个税
  • 发票清单用什么纸打印出来
  • 加速折旧法是指在固定资产使用的早期少提折旧
  • 小规模企业增值税税收优惠政策2023
  • 公司注销时退还实收资本要交个税吗
  • 商贸公司经营范围可以写烟酒吗
  • 资产减值损失怎么计提
  • 固定资产清理属于什么科目
  • 公司对公账户没钱了辞退员工
  • 信用卡什么情况下会被冻结
  • 生产成本是直接成本吗
  • 微软股票
  • 开启win7
  • red hat linux怎么用
  • WFXMOD32.EXE - WFXMOD32是什么进程
  • ddriver进程
  • linux-swap
  • win7远程桌面连接命令
  • Win10 Mobile Build 10586.29更新内容大全:修复多项问题
  • 怎么给异地的人订外卖
  • msn无法登录
  • linux小技巧
  • jquery实现表单验证
  • unity加密代码
  • python 内置函数什么用来返回序列中的最大元素
  • 用python过滤列大于0的值
  • win7怎么装python3.8
  • js自适应布局
  • 税务咨询电话是什么
  • 破产重整期间的税收
  • 北京国税网上办税服务大厅
  • 广告发布合同属于什么合同
  • 审计报告非标准意见
  • 收到假发票,被公司辞退
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设