位置: 编程技术 - 正文

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

  • 累计折旧科目一直有余额吗
  • 交易性金融资产属于什么科目
  • 印花税按什么金额吗
  • 年报中的工会经费是什么
  • 非增值税应税项目可以抵扣进项税吗
  • 收到的印花税退税怎么会计处理
  • 个人取得哪项收入需要缴纳个人所得税
  • 向境外分配股息
  • 大家怎么看恒大品牌
  • 以前年度的负债没挂账怎么办
  • 部分退货退款剩下的钱什么时候给卖家
  • 税务顾问费怎么做账务处理?
  • 代办会议费是否允许差额纳税
  • 审计费用需要计什么科目
  • 本月计错多发的工资可以不交个税
  • 小规模9万是含税吗
  • 单位统一为员工办的银行卡属于对公账户吗
  • 主营业务收入包含消费税吗
  • 代销商品
  • 同业清算互联前置 骗局
  • 企业更换银行卡意味着什么
  • 公司参展费取得发票怎样做账?
  • 资产负债表中的预付款项目应根据什么填列
  • 安置房账务处理
  • 苗木公司经营理念
  • 广告业的其他应收款包括哪些?
  • 申报个税是按哪个月的工资表
  • 福利费的进项税怎么做账
  • 购进商品是什么会计科目
  • vmware11安装win10
  • linux怎么自己写命令
  • 公司向股东还款的会计分录
  • 发票认证了,但是没有入账
  • php最好的编程语言
  • php中分页功能的实现
  • 软件企业职工培训费税前扣除标准
  • 公司为员工缴纳社保的法律规定
  • 若依框架使用教程
  • 对标是啥
  • 面试官问:mysql 的自增 id 用完了,怎么办?
  • 日期按钮
  • 一般贸易和进料加工退税的区别
  • 企业的工会经费可以用于什么地方
  • 员工宿舍的物业费能否抵扣
  • 公司账户收款退回怎么查
  • 政府向企业发放用工补贴政策
  • 工商年报股东实缴出资金额能写0吗
  • 医疗机构销售药品是否征收增值税
  • 企业间借款利息可以开专票吗
  • 员工辞退补偿金计算
  • 股权转让母子关系是否缴纳个人所得税
  • 买一赠一怎么做账
  • 现金流量的构成内容
  • 股份有限责任公司是什么意思
  • 员工的探亲费应由谁支付
  • 本年利润是负数怎么写凭证
  • 流动资产合计怎么算
  • 分析sql语句性能实现
  • sql server使用教程(图文)
  • 清除coms密码
  • win7系统隐藏文件夹怎么取消隐藏
  • mac系统如何安装双系统
  • win7系统玩英雄联盟黑屏怎么办
  • Win10 Mobile build 14393.189安装与上手体验视频
  • mac wife
  • hpzts04.exe是什么进程 有什么作用 hpzts04进程查询
  • win10系统无法打开百度网盘
  • css div高度填满父容器剩余空间
  • perl中的use strict
  • 深入理解新发展理念,推进供给侧结构性改革
  • python怎么设置行号
  • 你知道的,是我的兄弟 我要把天赋
  • android客户端与服务器通信
  • android入门教程
  • won10安装
  • 电子税务局校验码
  • ca锁使用
  • 什么是联保发票呢
  • 武汉市国税局局长黄英简历
  • 收缴和缴纳的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设