OpenGL之路(六)贴图
给物体贴上图片,图片宽高要为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之路(六)贴图相关推荐
- OpenGL(十六)——Qt OpenGL融合(将两张图片叠合成一张图片)
OpenGL(十六)--Qt OpenGL融合(将两张图片叠合成一张图片) 一.场景 在常用的项目场景中,我们经常会遇到将两个图片合在一起变成一张图片,这时候就会有前后之分,特别是两个物体合在一起的时 ...
- 现代OpenGL教程(六):鼠标和键盘(imgui+OpenGL3.3)
前言:该系列教程主要参考自网站www.opengl-tutorial.org,基于开源GUI框架imgui v1.61实现,imgui自带的例子里面直接集成了glfw+gl3w环境,本系列教程将gl3 ...
- Qt OpenGL(三十六)——Qt OpenGL 核心模式-绘制雷达坐标系
提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 Qt OpenGL(三十六)--Qt OpenGL 核心模式-绘制雷达坐标系 一.场景 ...
- OpenGL shadow mapping 阴影贴图的实例
OpenGL shadow mapping 阴影贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #i ...
- OpenGL shader normals法线贴图的实例
OpenGL shader normals法线贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> #in ...
- OpenGL Cube Map立方体贴图的实例
OpenGL Shadow Mapping阴影贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include "vermilion.h" ...
- OpenGL Shadow Mapping阴影贴图的实例
OpenGL Shadow Mapping阴影贴图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include "vapp.h" #inc ...
- OpenGL equirectangular等矩形环境图的实例
OpenGL equirectangular等矩形环境图 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <vmath.h> #inc ...
- 【数据结构总结】第六章 图(非线性结构)
第六章 图(非线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅读和浏览,加 ...
- 【Java数据结构与算法】第十六章 图
第十六章 图 文章目录 第十六章 图 一.图 1.介绍 2.基本术语 3.邻接矩阵 4.邻接表和逆邻接表 5.十字链表 二.深度优先遍历 三.广度优先遍历 四.代码实现 一.图 1.介绍 图相较于前面 ...
最新文章
- ApkTool反编译出错brut.common.brutexception及java.io.filenotfoundexception 之一
- One order datatype 命名规范
- C++为什么空格无法输出_OOP 面向对象编程:由 C 到 C++
- ros之TF坐标转换
- Zookeeper概念介绍
- 【小技巧】如何将PPT的图保持高分辨率导入到Word中
- 英尺、英寸、厘米的转化:C语言
- 5G 核心网 Quality of Service Model (QoS Model)
- 程序员博客html模板,程序员技术博客WordPress主题
- python中 and 和 or 操作的返回值。
- MATLAB——求系统的零状态响应
- 数据库SQL注入漏洞
- GSM Communication on EBox4300--(1)
- 无法连接上 127.0.0.1:XXXX (127.0.0.1)。 - connect (111: 拒绝连接)
- 可视化例子(10)——HighCharts三维堆叠柱状图
- DTLN网络模型学习
- SAAS软件的成熟度模型总结
- 2020web前端学习路线(附全套前端视频教程+教学大纲)
- 滴滴SQL面试题之打车业务问题如何分析
- (附源码)计算机毕业设计ssm-茶叶产品质量安全可追溯系统
热门文章
- Python——腾讯在线编程题(2018)
- Python中的字符串特性(索引、切片、重复、连接、成员操作符号)
- Mac Big Sur如何关闭开机提示音效
- python 打印皮卡丘_Python干掉了97%的办公软件?
- Selenium UI自动化测试(六)WebDriver常用操作方法
- Tensorflow Data Adapter Error: ValueError: Failed to find data adapter that can handle input
- SAP License:HANA在线日志被误删后如何恢复?
- SAP License:20个公司绝对不会告诉你的潜规则
- SAP License:新总账的表结构
- 用户数据销售额分析动态大屏看板+大屏数据可视化图表组件(折线图+圆柱图+散点图+饼图+漏斗图+雷达图+水位图)+智能web端高保真大数据动态可视化大屏看板+中国动态地图+智慧电商实时动态数据大屏看板