给物体贴上图片,图片宽高要为2的幂次

代码如下 (有的编译器不自带glaux,可以百度搜索进行配置,如有问题可进QQ群 116920287 咨询)

#include <gl/glut.h>
#include <gl/glaux.h>
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glut32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glut.lib")
#pragma comment(lib, "glaux.lib")UINT g_bmp[1];//贴图编号
GLUquadricObj *g_text;//贴图指针void Box(float x, float y, float z) //长方体
{glPushMatrix();glScalef(x, y, z);glEnable(GL_TEXTURE_2D); //贴图有效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();glDisable(GL_TEXTURE_2D);//取消贴图glPopMatrix();
}bool LoadT8(char *filename, GLuint &texture)
{AUX_RGBImageRec *pImage = NULL;pImage = auxDIBImageLoadA(filename); //装入位图if (pImage == NULL)return false;glGenTextures(1, &texture); //生成贴图glBindTexture(GL_TEXTURE_2D, g_bmp[0]); //贴图生效gluBuild2DMipmaps(GL_TEXTURE_2D, 4, pImage->sizeX, pImage->sizeY,GL_RGB, GL_UNSIGNED_BYTE, pImage->data); //贴图数据free(pImage->data);//释放位图内存free(pImage);return true;
}void renderScene(void)
{static float i = 0;i += 0.01f;if (i > 360) i = 0;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0, 0, -1.5);glRotatef(i, 1, 1, 1);Box(0.3f, 0.3f, 0.3f);glutSwapBuffers();
}
void changeSize(int w, int h)
{if (h == 0) h = 1;float ratio = 1.0* w / h;glMatrixMode(GL_PROJECTION);// 单位化投影矩阵。glLoadIdentity();glViewport(0, 0, w, h);// 设置视口大小为整个窗口大小gluPerspective(45, ratio, 1, 1000);// 设置正确的投影矩阵glMatrixMode(GL_MODELVIEW);//下面是设置模型视图矩阵glLoadIdentity();gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, -1.0, 0.0f, 1.0f, 0.0f);//设置观测点
}
int main(int argc, char * argv[])
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);glutInitWindowPosition(100, 100);glutInitWindowSize(320, 320);glutCreateWindow("Hello OpenGL");glutDisplayFunc(renderScene);glutIdleFunc(renderScene); //指定程序空闲时调用函数glutReshapeFunc(changeSize); //指定窗口形状变化时的回调函数glEnable(GL_DEPTH_TEST);g_text = gluNewQuadric(); //申请贴图缓存LoadT8("1.bmp", g_bmp[0]);glutMainLoop();return 0;
}

图片如下 1.bmp

转载于:https://www.cnblogs.com/xyyh/p/3980266.html

OpenGL之路(六)贴图相关推荐

  1. OpenGL(十六)——Qt OpenGL融合(将两张图片叠合成一张图片)

    OpenGL(十六)--Qt OpenGL融合(将两张图片叠合成一张图片) 一.场景 在常用的项目场景中,我们经常会遇到将两个图片合在一起变成一张图片,这时候就会有前后之分,特别是两个物体合在一起的时 ...

  2. 现代OpenGL教程(六):鼠标和键盘(imgui+OpenGL3.3)

    前言:该系列教程主要参考自网站www.opengl-tutorial.org,基于开源GUI框架imgui v1.61实现,imgui自带的例子里面直接集成了glfw+gl3w环境,本系列教程将gl3 ...

  3. Qt OpenGL(三十六)——Qt OpenGL 核心模式-绘制雷达坐标系

    提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(三十六)--Qt OpenGL 核心模式-绘制雷达坐标系 一.场景 ...

  4. OpenGL shadow mapping 阴影贴图的实例

    OpenGL shadow mapping 阴影贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #i ...

  5. OpenGL shader normals法线贴图的实例

    OpenGL shader normals法线贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #in ...

  6. OpenGL Cube Map立方体贴图的实例

    OpenGL Shadow Mapping阴影贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include "vermilion.h" ...

  7. OpenGL Shadow Mapping阴影贴图的实例

    OpenGL Shadow Mapping阴影贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include "vapp.h" #inc ...

  8. OpenGL equirectangular等矩形环境图的实例

    OpenGL equirectangular等矩形环境图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <vmath.h> #inc ...

  9. 【数据结构总结】第六章 图(非线性结构)

    第六章 图(非线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和浏览,加 ...

  10. 【Java数据结构与算法】第十六章 图

    第十六章 图 文章目录 第十六章 图 一.图 1.介绍 2.基本术语 3.邻接矩阵 4.邻接表和逆邻接表 5.十字链表 二.深度优先遍历 三.广度优先遍历 四.代码实现 一.图 1.介绍 图相较于前面 ...

最新文章

  1. ApkTool反编译出错brut.common.brutexception及java.io.filenotfoundexception 之一
  2. One order datatype 命名规范
  3. C++为什么空格无法输出_OOP 面向对象编程:由 C 到 C++
  4. ros之TF坐标转换
  5. Zookeeper概念介绍
  6. 【小技巧】如何将PPT的图保持高分辨率导入到Word中
  7. 英尺、英寸、厘米的转化:C语言
  8. 5G 核心网 Quality of Service Model (QoS Model)
  9. 程序员博客html模板,程序员技术博客WordPress主题
  10. python中 and 和 or 操作的返回值。
  11. MATLAB——求系统的零状态响应
  12. 数据库SQL注入漏洞
  13. GSM Communication on EBox4300--(1)
  14. 无法连接上 127.0.0.1:XXXX (127.0.0.1)。 - connect (111: 拒绝连接)
  15. 可视化例子(10)——HighCharts三维堆叠柱状图
  16. DTLN网络模型学习
  17. SAAS软件的成熟度模型总结
  18. 2020web前端学习路线(附全套前端视频教程+教学大纲)
  19. 滴滴SQL面试题之打车业务问题如何分析
  20. (附源码)计算机毕业设计ssm-茶叶产品质量安全可追溯系统

热门文章

  1. Python——腾讯在线编程题(2018)
  2. Python中的字符串特性(索引、切片、重复、连接、成员操作符号)
  3. Mac Big Sur如何关闭开机提示音效
  4. python 打印皮卡丘_Python干掉了97%的办公软件?
  5. Selenium UI自动化测试(六)WebDriver常用操作方法
  6. Tensorflow Data Adapter Error: ValueError: Failed to find data adapter that can handle input
  7. SAP License:HANA在线日志被误删后如何恢复?
  8. SAP License:20个公司绝对不会告诉你的潜规则
  9. SAP License:新总账的表结构
  10. 用户数据销售额分析动态大屏看板+大屏数据可视化图表组件(折线图+圆柱图+散点图+饼图+漏斗图+雷达图+水位图)+智能web端高保真大数据动态可视化大屏看板+中国动态地图+智慧电商实时动态数据大屏看板