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 ...
随机推荐
- react hook的todolist
感觉好长时间没写博客一样,app.js代码 import React from 'react'; import { useState } from 'react'; function App() { ...
- iTerm 2打造ssh完美连接Linux服务器快捷方法
iTerm 2打造ssh完美连接Linux服务器快捷方法 2019年05月02日 10:40:19 Mars0908 阅读数 213更多 个人分类: Mac下开发 版权声明:本文为博主原创文章,遵 ...
- smarty建的mvc环境
================================搭建MVC结构================================基于MVC,解耦合 (高内聚,低耦合),优点:易维护.易扩 ...
- SpringBoot之HandlerInterceptor拦截器的使用 ——(一)
HandlerInterceptor简介拦截器我想大家都并不陌生,最常用的登录拦截.或是权限校验.或是防重复提交.或是根据业务像12306去校验购票时间,总之可以去做很多的事情.我仔细想了想这里我分三 ...
- 关于CAShapeLayer的一些基本操作
设置圆形进度条: 实现效果如下: 实现代码如下:(注释很详细啦!!!) UIView *circleView = [[UIView alloc]initWithFrame:CGRectMake(, , ...
- mongodb中对数组的操作命令
mongodb中对数组的操作命令有$push.$ne.$addtoset.$pop.$pull ###addtoset会碰到的问题addtoset解释: 往数组里面加入数据,如果数组里已经存在,则不会 ...
- 【AMAD】django-crispy-forms -- 不要再重复编写Django Form了!
动机 简介 个人评分 动机 这个APP提供了一个template tag和一个template filter,让你可以在模版中快速渲染表单. 简介 django-crispy-forms1可以看作是d ...
- shell中变量的测试与替换
在某些时刻我们经常需要判断某个变量是否存在,若变量存在则使用既有的设置,若变量不存在则给予一个常用的设置. (1) 变量未被设置或者内容为空,则替换为新的内容. new_var=${old_var-c ...
- docker安装mongodb和redis
一.安装mongodb docker pull mongo docker run -p 27017:27017 -d --name mongodb01 mongo docker run -p 2701 ...
- 使用Dockerfile创建ssh服务的镜像02
使用Dockerfile创建ssh服务的镜像02 1:创建工作目录---一个镜像的所有文件都放这个目录下 ubuntu@ubuntu:~$ mkdir sshd_ubuntu ubuntu@ubunt ...