Opengl 2D纹理实现

步骤如下:

1. 首先启用2D纹理, 不启用会发现纹理区域是黑色的

  glEnable(GL_TEXTURE_2D)

2. 生成纹理

  glGenTextures( 1, &m_nTextureID )

  glBindTexture(1, &m_nTextureID)  

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_nWidth, m_nHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_pData);

  m_pData 像素数据

  还可以开启一些过滤方式,如下

  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

3. 绘制,先绑定下纹理,然后用四边形映射纹理坐标和空间坐标

  glBindTexture(GL_TEXTURE_2D, m_nTextureID);
  glBegin( GL_QUADS);
  glTexCoord2f(0, 0);
  glVertex3f(0, 0, 0.0f);
  glTexCoord2f(1, 0);
  glVertex3f(m_nWidth, 0, 0.0f);
  glTexCoord2f(1, 1);
  glVertex3f(m_nWidth, m_nHeight, 0.0f);
  glTexCoord2f(0, 1);
  glVertex3f(0, m_nHeight, 0.0f);
  glEnd();

4. 完毕,加载png可以用lib.png,bmp可以用glaux

 

时间: 2024-10-14 07:02:54

Opengl 2D纹理实现的相关文章

OpenGL:纹理基础总结

当前光栅位置: 当前光栅位置就是开始绘制下一幅位图/图像的屏幕位置.  //左下角 glRasterPos2f(GLfloat x, GLfloat y); glRasterPos3f(GLfloat x, GLfloat y, GLfloat z); 1.4版本中,glWindowsPos*()作为glRasterPos*()的替代品,它用窗口坐标指定当前光栅位置,不必把它的x和y坐标通过 模型视图和投影矩阵进行变换,也不会被裁剪出视口区域.更容易混合使用2D文本和3D图形,而不必再各种变换状

Opencv 导入图片 Opengl 显示纹理(含用例代码)

本篇主要是讲使用Opencv导入一副图片,然后讲该副图片当成纹理显示在opengl当中. 首先说如何配置Opencv 我的硬件环境是: Windows10+Visual Studio 2015+opencv3.0 先在此网站下载opencv,下载之后,它是长这样的,点击它,会自动解压缩成名字为"opencv"的文件夹 接下来进行环境配置:从控制面板开始,按着这个路径  Control Panel\System and Security\System 来到高级系统设置(advanced

Unity牛逼的2D纹理功能

[Unity牛逼的2D纹理功能] 1.可直接将贴图生成成为Cubemap. 2.自动生成Mipmap. 3.查看纹理被当前场景哪些对象引用.在Project窗口中,右击图像,选择 参考:file:///C:/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/html/en/Manual/class-TextureImporter.html

DirectX11--深入理解与使用2D纹理资源

前言 写教程到现在,我发现有关纹理资源的一些解说和应用都写的太过分散,导致连我自己找起来都不方便.现在决定把这部分的内容整合起来,尽可能做到一篇搞定所有2D纹理相关的内容,其中包括: 2D纹理的一般创建方法 DDSTextureLoader和WICTextureLoader 2D纹理数组的一般创建方法 2D纹理立方体的一般创建方法(未完工) 纹理子资源 纹理资源的完整复制(未完工) 纹理子资源指定区域的复制(未完工) 纹理从GPU映射回CPU进行修改 使用内存初始化纹理 你必须要先了解纹理映射,

从位图图像中读取2D纹理(C ++,OpenGL)

一共有2个.cpp文件和1个.h头文件 步骤: 需要安装GLUT,因为GLUT是第三方库,即它不是OpenGL的一部分.因此,它不是Windows系统API的一部分,因此不属于标准Windows SDK. 下载链接:http://files.transmissionzero.co.uk/software/development/GLUT/freeglut-MSVC.zip 安装方法: 在PC上创建一个可供所有用户读取的文件夹,例如典型Windows系统上的“C:\ Program Files \

Cg入门21:Fragment shader - 2D纹理采样

体纹理:是啥? tex2D 以前只能在Fragment程序中纹理采样 UV坐标系:其实点为左下角,范围为[0,1],U为x轴,V为y轴 Texture.wrapMode 循环模式: TextureWrapMode.Clamp:设置纹理充满拉伸使用 TextureWrapMode.Repeat:纹理重复平铺使用 如果采用Repeat,那么等于U>=1的情况就会用纹理图在右边在平铺一张图 Texture.filterMode 过滤模式: Point:像素过滤(不进行过滤 ) Bilinear:双线性

[OpenGL] 基于纹理绘制的透明精灵

在二维游戏中,我们几乎绕不开精灵绘制这一过程,除了直接在opengl读入图像并绘制外,我们更常使用纹理来完成这一过程,把纹理贴到在xy平面上的面片,做出二维游戏的效果. 这样我们可以很方便的使用opengl提供给我们的一些方法来执行精灵的变换,而不是使用大量的贴图来手工完成变换过程:同时,还可以通过调节深度信息来确定物体的遮挡关系,而不用花心思考虑绘制的先后顺序,因为我们知道,在二维世界里,谁遮挡谁是和绘制顺序相关的. 但是,我们也发现,我们的精灵不总是四四方方的,所以纹理加载进来后会有背景色,

基于OpenGL编写一个简易的2D渲染框架-04 绘制图片

阅读文章前需要了解的知识,纹理:https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/ 过程简述:利用 FreeImage 库加载图像数据,再创建 OpenGL 纹理,通过 Canvas2D 画布绘制,最后又 Renderer 渲染器渲染 本来想用 soil 库加载图像数据的,虽然方便,但是加载有些格式的图像文件时会出现一些问题.最后,改用 FreeImage 库来加载图像了. 添加 FreeImage 库到工

OpenGL蓝宝书第六章代码疑虑:为什么使用了GL_TEXTURE_1D??纹理和顶点间的映射是如何实现?

遇到一个大问题,明明加载纹理绑定的是GL_TEXTURE_2D glUniform1i(locCloudTex, 1); //明明默认为0,参数却不是0. 可是原书中代码确是 glGenTextures(1, &uiTexture); glBindTexture(GL_TEXTURE_1D, uiTexture); // LoadTGATexture("Clouds.tga", GL_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE); glUniform