前面介绍的都是给图元添加颜色,纹理绑定介绍的是如果把图片绑定到图元,主要步骤如下:(这里这是简单介绍,后续详细说明)
1.生成纹理ID
glGenTextures(1, &texture[0]);
2.创建纹理对象
glBindTexture(GL_TEXTURE_*D, texture[0]);
3.指定纹理内容
glTexImage*D();
4.指定纹理属性
glTexParameteri(…, ......, …)
5.激活纹理功能
glBindTexture(GL_TEXTURE_*D, texture[0]);
6.提供纹理坐标
glTexCoord*()
技巧:纹理贴图以逆时针方式进行:
1.左下(0,0)
2.右下(1,0)
3.左上 (0,1)
4.右上(1,1)
#include "header.h" GLfloat xrot; GLfloat yrot; GLfloat zrot; GLuint texture[1]; AUX_RGBImageRec *LoadBMP(char *Filename) { 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); if (TextureImage[0]=LoadBMP("Data/NeHe.bmp")) { Status=TRUE; glGenTextures(1, &texture[0]); glBindTexture(GL_TEXTURE_2D, texture[0]); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); 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; } void ReSizeGLScene(GLsizei width, GLsizei height) { if (height==0) { height=1; } glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int InitGL(void) { if (!LoadGLTextures()) { return 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; } void DrawGLScene(void) { 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); glRotatef(yrot,0.0f,1.0f,0.0f); glRotatef(zrot,0.0f,0.0f,1.0f); glBindTexture(GL_TEXTURE_2D, texture[0]); glBegin(GL_QUADS); // Front Face 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); // Back Face 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); // Top Face 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); // Bottom Face 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); // Right face 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); // Left Face 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; glFlush(); } void rotate() { xrot+=0.3f; yrot+=0.2f; zrot+=0.4f; glutPostRedisplay(); } void mouse(int button,int state,int x,int y) { switch(button) { case GLUT_LEFT_BUTTON: if(GLUT_DOWN==state) { glutIdleFunc(rotate); } break; case GLUT_RIGHT_BUTTON: if(GLUT_DOWN==state) { //glutIdleFunc(0); } break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(640,480); glutCreateWindow("纹理绑定"); glutReshapeFunc(ReSizeGLScene); glutDisplayFunc(DrawGLScene); glutMouseFunc(mouse); InitGL(); glutMainLoop(); return 0; }
相关推荐
1、OpenGLES3中加载GL_TEXTURE_2D纹理,生成纹理ID; 2、通过EGL构建EGLDisplay虚拟屏幕,并绑定ImageReader提供的Surface; 3、在EGL线程中,渲染GL_TEXTURE_2D对应的纹理图形; 4、在EGL线程中,完成渲染后,通过...
Description(说明):该引擎已设置为处理加载精灵图或单个单元的纹理,并使用精灵进行绑定和显示。 发动机还设计为尽可能简单地执行此操作。 OpenGL的最大困难之一是显示从任何truetype字体文件加载的清晰可读的...
, 本书清晰地讲解了OpenGL的相关功能与技术,包括几何对象顶点的传递、细分,几何着色器中的几何变换,通过片元着色器来操作像素和纹理贴图,以及基于帧缓存对象和计算着色器的先进数据操作技术。, 《OpenGL编程指南...
利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错。你可以试试。 36.放射模糊和渲染到纹理 如何实现放射状的滤镜效果呢,看上去很难,其实很简单。把渲染得图像作为纹理提取出来,...
将Camera数据显示到OpenGL ES渲染的图像中,并通过MediaCodeC 将 OpenGL ES 缓冲数据,硬编码写入到 mp4 视频文件中,完成视频的录制。 文件介绍请见: https://xiaxl.blog.csdn.net/article/details/72530314 ...
a、在OpenGL ES中创建 samplerExternalOES 类型纹理,用于渲染展示视频图像; b、通过 samplerExternalOES 纹理创建一个 SurfaceTexture; c、通过 SurfaceTexture 生成一个 Surface; d、将该 Surface 绑定到 ...
特征OpenGL版本3.3之前的OpenGL命令的原始绑定用于将图像加载到纹理中的Helper函数( gl-helper-load-texture和gl-helper-bind-texture ) 基于的GUI渲染安装要求具有GLArea xwidget功能和模块支持的GNU Emacs。...
利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错。你可以试试。 36.放射模糊和渲染到纹理 如何实现放射状的滤镜效果呢,看上去很难,其实很简单。把渲染得图像作为纹理提取出来,在...
使用纹理阵列将所有纹理图集捆绑到一个纹理对象中。 毫不费力地在着色器中使用任何您喜欢的图集。 将您的转换数据绑定到单个VBO。 将属性分配给您的VBO,以便您可以在着色器中方便地访问它们。 使用实例渲染来...
纹理绑定也会受到影响。 当用户加载图像或添加新的字形时,纹理更新可能会发生。 根据需要添加字形的render()方法的开始和结束。 整个帧的数据在渲染结束时进行缓冲和刷新。 以下代码说明了渲染代码所涉及的OpenGL...
绑定远未完成,但是它们足以使我的简单应用程序正常工作(它们涵盖了基础知识:纹理,着色器,顶点缓冲区和绘制调用)。 UWP不包括OpenGL实现,因此GLUWP将引用为其OpenGL实现。入门SampleApp项目应该是开箱即用的...
要注意纹理单元和纹理的概念,纹理替代绑定纹理单元0 6,影子文件 阴影贴图 两步渲染:1,使用帧长度延伸深度纹理,通过光的角度,取代一遍物体2,画阴影平面,通过光的角度,利用上一次深度纹理,对比平面上点的...
绑定纹理,添加雾化效果,能旋转,设置环境光
纹理单元自动绑定 缓冲区流:孤立,不同步,持久,连贯,+隔离 不变的存储支持 命名缓冲区对象支持 无边界的纹理 持久/相干映射+三重缓冲+显式同步 物料系统 反照率 高光 普通的 发光颜色 发光面罩 混合面膜 粗糙度+...
链接到演示卷轴: : 屏幕截图使用基于图像的照明的示例: G缓冲区结构:产品特点摄影机机芯放大/缩小接触 : 光圈快门速度ISO标准TODO:其他基于物理的相机参数纹理: 随时随地进行初始化/加载/绑定各向异性过滤高...
仅实现stbi_set_flip_vertically_on_load和stb_load因为这是我需要在OpenGL中将图像作为纹理加载的2个功能。 我这样做而不是使用的原因是,据我所知,stb-image没有实现stbi_set_flip_vertically_on_load ,当想要...
gles环境下定了一个简单的脚本,控制固定功能渲染中的diffuse、specular和第一层纹理的参数 自定义了模型网格、骨骼、动画、材质、渲染实体等文件格式,这些文件格式说明放在了fileformats目录下。 渲染实体(Model...
Prime是基于物理的渲染器,基于具有JOGL绑定的纯Java构建,具有: 蒙特卡洛路径跟踪。 光子映射。 可自定义的材质和渲染管道。 将添加以下功能:1.网络分布式渲染。 2.纹理贴图和法线贴图。 怎么跑 确保已经...
创建纹理时,请勿将其绑定到任何特定的纹理单元 当您真正想使用它时就去做 纹理单位索引 GL_TEXTURE0不为0 ,因此您可以这样设置sampler2D setInt ( " texture_sampler " , 2 ); // don't use GL_TEXTURE0
它能做什么LibGdx 的 TexturePacker 在OpenGL中,一个纹理被绑定,一些绘制完成,另一个纹理被绑定,更多的绘制完成等等。绑定纹理的成本相对较高,因此理想的做法是在一个较大的图像上存储许多较小的图像,绑定较大...