OPENGL 显示BMP图片+旋转
VS2010/Windows 7/
1. 需包含头文件 stdio.h, glaux.h, glut.h。需要对应的lib,并添加包含路径
2. 窗口显示用glut库的函数
3. bmp图片从本地读取,再用它来生成纹理,首先用auxDIBImageLoad函数将图片数据读到AUX_RGBImageRec结构体当中。
然后
//生成纹理数据
glTexImage2D(GL_TEXTURE_2D, , , TextureImage[]->sizeX, TextureImage[]->sizeY, , GL_RGB, GL_UNSIGNED_BYTE, TextureImage[]->data);
然后用线性滤波函数按自己要求缩放显示
//线性滤波
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
4. 图片旋转显示的时候用
glRotatef(-,0.0f,0.0f,1.0f);
或
//贴图及映射(glTexCoord2f对应纹理坐标, glVertex2f对应矩形坐标,此处已做旋转处理)
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f( 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(-1.0f, -1.0f);
前一种是旋转函数,后一种是直接在坐标映射时改坐标
效果:
附代码:
#include "stdafx.h" #include <stdio.h>
#include <gl/glaux.h>
#include<gl/glut.h> GLfloat xrot;
GLfloat yrot;
GLfloat zrot; GLuint texture[]; //存储一个纹理 //读取bmp文件数据
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[];
memset(TextureImage, , sizeof(void *)*);
if (TextureImage[] = LoadBMP("C:\\2.bmp"))
{
Status = TRUE;
//注册纹理
glGenTextures(, &texture[]);
//绑定纹理名称
glBindTexture(GL_TEXTURE_2D, texture[]);
//生成纹理数据
glTexImage2D(GL_TEXTURE_2D, , , TextureImage[]->sizeX, TextureImage[]->sizeY, , GL_RGB, GL_UNSIGNED_BYTE, TextureImage[]->data);
//线性滤波
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
if (TextureImage[])
{
if (TextureImage[]->data)
{
free(TextureImage[]->data);
}
free(TextureImage[]);
}
return Status;
} //调用入口
int InitGL(GLvoid)
{
if (!LoadGLTextures())
{
return false;
}
glEnable(GL_TEXTURE_2D);
//glShadeModel(GL_SMOOTH);
//设置背景色为黑色
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
return TRUE;
} //贴图绘制
void DrawGLScene(GLvoid)
{
//清除屏幕缓存
glClear(GL_COLOR_BUFFER_BIT);
//重置当前的模型观察矩阵
glLoadIdentity(); /**************************************
* 旋转函数备用 -90表示顺时针绕Z轴旋转90度
***************************************/
//glRotatef(-90,0.0f,0.0f,1.0f); //开始绘制四边形
glBegin(GL_QUADS); //贴图及映射(glTexCoord2f对应纹理坐标, glVertex2f对应矩形坐标,此处已做旋转处理)
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f( 1.0f, 1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(-1.0f, -1.0f); glEnd();
glFlush();
//glutSwapBuffers();
} int main(int argc, char **argv)
{
//初始化glut运行
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA);
glutInitWindowPosition(,);
glutInitWindowSize(, );
glutCreateWindow("hello"); InitGL();
glutDisplayFunc(&DrawGLScene);
glutMainLoop();
return ;
}
(完)
OPENGL 显示BMP图片+旋转的更多相关文章
- MFC对话框显示BMP图片
1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...
- 【秒懂音视频开发】21_显示BMP图片
文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的<播放YUV>做准备. 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来会更 ...
- 嵌入式linux------SDL移植(am335x下显示bmp图片)
#include<stdio.h> #include "/usr/local/ffmpeg_arm/include/SDL/SDL.h" char *bmp_name[ ...
- Linux framebuffer显示bmp图片【转】
本文转载自:http://blog.csdn.net/luxiaoxun/article/details/7622988 framebuffer简介 帧缓冲(framebuffer)是Linux为显示 ...
- MFC CListCtrl 显示bmp图片
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle()| LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES); ...
- winform中让pictureBox 显示的图片旋转
img.RotateFlip(RotateFlipType.Rotate90FlipNone);顺时针旋转90度 RotateFlipType.Rotate90FlipNone 逆时针旋转90度 Ro ...
- VC加载显示bmp图片的函数
void ShowBitmap(HDC hdc,const char *srcpath) { HBITMAP hBitmap = (HBITMAP)::LoadImage(0, srcpath, IM ...
- MFC对话框中显示BMP,JPG图片
//************************************ // 方法说明: 显示JPG和GIF.BMP图片 // 参数说明: CDC * pDC 设 ...
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733 ...
随机推荐
- 转载---WCF、WPF、Silverlight和区别
转自--http://hi.baidu.com/wl5026442/item/6ce62b4d19ff64e61381da9c SilverLight可以看作是WPF的一个简化版本,或者一个轻量版本. ...
- Ubuntu无法找到add-apt-repository问题的解决方法
网上查了一下资料,原来是需要 python-software-properties 于是 apt-get install python-software-properties 除此之外还要安装 s ...
- 使用pycharm发布python程序到ubuntu中运行
前提条件: 1.ubuntu安装了vsftpd,可以参考:https://www.cnblogs.com/xienb/p/9322805.html 2.安装专业版pycharm 步骤: 1.新建一个P ...
- Delphi实现树型结构具体实例
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...
- JavaScript 运行机制:Event事件循环机制
JavaScript Event事件循环机制 JS是单线程的,浏览器只分配一个主线程给JS.一次只能执行一个任务,当前任务执行完后在可以执行下一个任务.任务多时,就会形成任务队列排队等待执行.但是非常 ...
- CockroachDB学习笔记——[译]为什么Go语言是CockroachDB的正确选择
原文链接:https://www.cockroachlabs.com/blog/why-go-was-the-right-choice-for-cockroachdb/ 原作者:Jessica Edw ...
- 使用 Metrics.net + influxdb + grafana 搭建项目自动化监控和预警方案
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_25042791/article/d ...
- manjaro-VM虚拟机vmmon错误
1.安装AUR : vmware-systemd-serverices 2.启动服务: systemctl enable vmware.service systemctl start vmware.s ...
- 【ARM-Linux开发】Linux链接
链接有两种方式:硬链接和软链接. (一)软链接 软链接又叫做符号链接.基本命令为: [plain] view plain copy ln -s sourcePlace newPlace 软链接可以链接 ...
- 【FFMPEG】VS2015编译FFMPEG
系统环境:Windows 10 64位 需要安装的软件和工具: Visual Studio 2015 With Update 3 MSYS2 YASM 一.VS2015 安装VS2015时,选择 ...