#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创建纹理,内容如对您有帮助,希望把文章链接给更多的朋友!
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导