位置: 编程技术 - 正文

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

  • 税收国家和地方的比例
  • 所得税预缴怎么做分录
  • 原始凭证分割单样本
  • 去年的费用票会计分录
  • 成本会计实训要求
  • 企业应交所得税怎么算
  • 税务机关如何防范关联企业涉税风险问题
  • 物业公司需要向哪个部门缴费
  • 如何理解出口退税政策
  • 公司领导培训费怎么入账
  • 砂石的资源税怎么算
  • 公司购入汽车应交什么税
  • 记账凭证广告费
  • 10个点的发票税点开6个点专票
  • 小规模纳税人所得税优惠政策2023
  • 建筑业预缴增值税税率
  • 公司帮员工买的保险
  • 房屋抵债如何确定契税计税依据?
  • 包装物押金如何确定销售额?
  • 公司法人如何从公司提钱
  • 简易计税开票开成了一般计税的税率会比对不通过吗
  • 英雄联盟登录失败7502013
  • 预缴企业所得税怎么做账务处理
  • 业务招待费扣除基数的收入包括哪些
  • 公司资产报废处理请示
  • 心绞痛的早期症状表现有哪些
  • 鸿蒙系统怎么设置屏幕不休眠
  • 哪些行业可以简易征收增值税
  • 医疗保险在外地交了老家还要交吗
  • 发票是否可以作为收款依据
  • php处理大量数据
  • ElementUI中<el-form>标签中 ref、:model、:rules 的作用
  • 其他业务收入负数坐在贷方
  • anaconda卸载干净
  • php+web
  • 解决什么情况
  • vuejs echarts
  • 发票章没有盖好
  • 公司借调员工
  • 用于研发的材料后期销售了应该怎么账务处理
  • 预存电费余额怎么突然多了
  • 汇算清缴费用调整怎么做账
  • 本期数值与去年同期数值之差称为什么
  • 利润分配怎么分配比例
  • 月初没报完税可以开发票吗
  • 小规模纳税人的条件
  • 开具发票的原则有哪些呢?
  • 非广告公司可以开广告费发票吗?
  • 科技专项资金的考核指标确需调整
  • 农产品怎么自产自销
  • 什么叫做差旅费
  • 公司企业名称变更流程
  • 报销单扣除金额什么意思
  • 金税盘里显示有报税资料怎么处理
  • windows7wifi密码
  • 如何屏蔽网络?
  • ubuntu gnome3
  • macbook安装ghost win10
  • solaris删除文件夹命令
  • 360 sesvc.exe
  • ubuntu20.04升级20.10
  • m0b0player播放器
  • win10相机桌面快捷方式
  • macbook的dock栏怎么不见了
  • win10 mobile 1709
  • win10通讯
  • win7本地连接ipv4属性闪退
  • 原生js怎么获取input值
  • android开发环境是什么
  • iframe 自适应宽度和高度
  • 如何正确使用标准电池和检流计
  • unity3d从入门到精通
  • jquery使用教程
  • python递归查找
  • js校验姓名
  • jquery中加载文档的方法
  • 江苏省地方税务局网上办税
  • 城市配套费需要什么资料
  • 发票代码如何查询公司
  • 2020年军人自主择业条件
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设