位置: 编程技术 - 正文

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绘制

  • 金税盘锁死日期是16号,16号能清卡吗
  • 预收三年租金 房产税怎么算
  • 基本税种有哪些税种
  • 预缴增值税需要预缴附加税吗
  • 更改开票信息需要多久
  • 分公司预缴企业所得税怎么算
  • 小型微利企业年应纳税所得额不超过100万元的部分
  • 自己打印raz
  • 固定资产投资会计处理
  • 非营利组织需要纳税吗
  • 房地产企业没有退还的履约保证金税务
  • 行政单位预算资金拨付流程
  • 购入生产产品用的机器设备一台
  • 营改增计算举例
  • 转账支票遗失能挂失吗
  • 别人借用我的pos刷卡套现谁承担
  • 购买股权支付的相关税费怎么处理
  • 企业出售房屋交什么税
  • 税务未抄报
  • 怎么通过合并弥补亏损,使得利益最大化?
  • 材料报废的会计处理(一般纳税人)
  • 公司注销固定资产怎么处理税怎么交
  • 转售水电收入
  • 上个月个税申报能作废重报吗
  • 供应商的账怎么记
  • 小规模普通发票可以抵扣吗
  • 广播影视服务需要交文化事业建设费吗
  • 享受小型微利企业税收优惠的条件
  • 房产公司增值税怎么交
  • 员工给公司代垫的款项分录
  • 委托加工物资成本计入
  • 内存坏了电脑会黑屏吗
  • 苹果系统怎么修复
  • 虚增成本调增还会被处罚吗
  • 代理进口货物账务怎么处理
  • mac怎么彻底删除一个软件
  • 房地产企业如何结转成本
  • frameworkservic.exe是什么进程 有什么作用 frameworkservic进程查询
  • 内退人员
  • uniapp打开系统设置
  • 应收账款在贷方如何平账
  • vue3.0启动命令
  • 前端es2020
  • 计提坏账准备需要确认递延所得税吗
  • 工会经费计提比例是2%还是0.8%
  • 金税盘插电脑上没反应是怎么回事
  • mongodb局域网访问
  • 小微企业材料
  • 为什么社保明细导不出来
  • db2使用教程
  • Windows下MySQL 5.6安装及配置详细图解(大图版)
  • 经营范围变更银行变更需要什么资料
  • 信用证保证金账户属于什么账户性质
  • 怎么判断其他债权债务
  • 企业购买商场的资本金要求是多少
  • 免抵退的定义
  • 错账查找方法主要有
  • 零余额账户年终余额清零的规定
  • sql语句实现查询示例
  • php mysql连接
  • centos6安装yum源
  • bios中英文对照表图新版
  • explorer.exe进程出错
  • xp系统如何找到bitlocker
  • windowsxpwifi
  • 防止linux断电系统崩溃
  • linux命令使用例子
  • [置顶] clauvio,Twitter小老鼠
  • js中script标签的作用
  • cocos2d schedule
  • python在web上的应用
  • node.js javascript
  • json基本语法
  • bootstrap js插件
  • js控制浏览器返回按钮
  • python代码规范化
  • 上海附加税税率2023
  • 增值税报表进项税和销项税都不填可以吗
  • 武汉税务局官网查询系统
  • 国企残疾职工安置
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设