VS2010/Windows 7/

1. 需包含头文件 stdio.h, glaux.h, glut.h。需要对应的lib,并添加包含路径

2. 窗口显示用glut库的函数

3. bmp图片从本地读取,再用它来生成纹理,首先用auxDIBImageLoad函数将图片数据读到AUX_RGBImageRec结构体当中。

然后

  1. //生成纹理数据
  2. glTexImage2D(GL_TEXTURE_2D, , , TextureImage[]->sizeX, TextureImage[]->sizeY, , GL_RGB, GL_UNSIGNED_BYTE, TextureImage[]->data);

然后用线性滤波函数按自己要求缩放显示

  1. //线性滤波
  2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  3. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

4. 图片旋转显示的时候用

  1. glRotatef(-,0.0f,0.0f,1.0f);

  1. //贴图及映射(glTexCoord2f对应纹理坐标, glVertex2f对应矩形坐标,此处已做旋转处理)
  2. glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, 1.0f);
  3. glTexCoord2f(0.0f, 1.0f); glVertex2f( 1.0f, 1.0f);
  4. glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, -1.0f);
  5. glTexCoord2f(1.0f, 0.0f); glVertex2f(-1.0f, -1.0f);

前一种是旋转函数,后一种是直接在坐标映射时改坐标

效果:

附代码:

  1. #include "stdafx.h"
  2.  
  3. #include <stdio.h>
  4. #include <gl/glaux.h>
  5. #include<gl/glut.h>
  6.  
  7. GLfloat xrot;
  8. GLfloat yrot;
  9. GLfloat zrot;
  10.  
  11. GLuint texture[]; //存储一个纹理
  12.  
  13. //读取bmp文件数据
  14. AUX_RGBImageRec *LoadBMP(char * Filename)
  15. {
  16. FILE *File = NULL;
  17. if (!Filename)
  18. return NULL;
  19. File = fopen(Filename, "r");
  20. if (File)
  21. {
  22. fclose(File);
  23. return auxDIBImageLoad(Filename);
  24. }
  25. return NULL;
  26. }
  27.  
  28. //生成纹理
  29. int LoadGLTextures()
  30. {
  31. int Status = FALSE;
  32. AUX_RGBImageRec *TextureImage[];
  33. memset(TextureImage, , sizeof(void *)*);
  34. if (TextureImage[] = LoadBMP("C:\\2.bmp"))
  35. {
  36. Status = TRUE;
  37. //注册纹理
  38. glGenTextures(, &texture[]);
  39. //绑定纹理名称
  40. glBindTexture(GL_TEXTURE_2D, texture[]);
  41. //生成纹理数据
  42. glTexImage2D(GL_TEXTURE_2D, , , TextureImage[]->sizeX, TextureImage[]->sizeY, , GL_RGB, GL_UNSIGNED_BYTE, TextureImage[]->data);
  43. //线性滤波
  44. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  45. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  46. }
  47. if (TextureImage[])
  48. {
  49. if (TextureImage[]->data)
  50. {
  51. free(TextureImage[]->data);
  52. }
  53. free(TextureImage[]);
  54. }
  55. return Status;
  56. }
  57.  
  58. //调用入口
  59. int InitGL(GLvoid)
  60. {
  61. if (!LoadGLTextures())
  62. {
  63. return false;
  64. }
  65. glEnable(GL_TEXTURE_2D);
  66. //glShadeModel(GL_SMOOTH);
  67. //设置背景色为黑色
  68. glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  69. return TRUE;
  70. }
  71.  
  72. //贴图绘制
  73. void DrawGLScene(GLvoid)
  74. {
  75. //清除屏幕缓存
  76. glClear(GL_COLOR_BUFFER_BIT);
  77. //重置当前的模型观察矩阵
  78. glLoadIdentity();
  79.  
  80. /**************************************
  81. * 旋转函数备用 -90表示顺时针绕Z轴旋转90度
  82. ***************************************/
  83. //glRotatef(-90,0.0f,0.0f,1.0f);
  84.  
  85. //开始绘制四边形
  86. glBegin(GL_QUADS);
  87.  
  88. //贴图及映射(glTexCoord2f对应纹理坐标, glVertex2f对应矩形坐标,此处已做旋转处理)
  89. glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, 1.0f);
  90. glTexCoord2f(0.0f, 1.0f); glVertex2f( 1.0f, 1.0f);
  91. glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, -1.0f);
  92. glTexCoord2f(1.0f, 0.0f); glVertex2f(-1.0f, -1.0f);
  93.  
  94. glEnd();
  95. glFlush();
  96. //glutSwapBuffers();
  97. }
  98.  
  99. int main(int argc, char **argv)
  100. {
  101. //初始化glut运行
  102. glutInit(&argc,argv);
  103. glutInitDisplayMode(GLUT_DEPTH|GLUT_SINGLE|GLUT_RGBA);
  104. glutInitWindowPosition(,);
  105. glutInitWindowSize(, );
  106. glutCreateWindow("hello");
  107.  
  108. InitGL();
  109. glutDisplayFunc(&DrawGLScene);
  110. glutMainLoop();
  111. return ;
  112. }

(完)

OPENGL 显示BMP图片+旋转的更多相关文章

  1. MFC对话框显示BMP图片

    1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...

  2. 【秒懂音视频开发】21_显示BMP图片

    文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的<播放YUV>做准备. 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来会更 ...

  3. 嵌入式linux------SDL移植(am335x下显示bmp图片)

    #include<stdio.h> #include "/usr/local/ffmpeg_arm/include/SDL/SDL.h" char *bmp_name[ ...

  4. Linux framebuffer显示bmp图片【转】

    本文转载自:http://blog.csdn.net/luxiaoxun/article/details/7622988 framebuffer简介 帧缓冲(framebuffer)是Linux为显示 ...

  5. MFC CListCtrl 显示bmp图片

    m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle()| LVS_EX_SUBITEMIMAGES | LVS_EX_GRIDLINES); ...

  6. winform中让pictureBox 显示的图片旋转

    img.RotateFlip(RotateFlipType.Rotate90FlipNone);顺时针旋转90度 RotateFlipType.Rotate90FlipNone 逆时针旋转90度 Ro ...

  7. VC加载显示bmp图片的函数

    void ShowBitmap(HDC hdc,const char *srcpath) { HBITMAP hBitmap = (HBITMAP)::LoadImage(0, srcpath, IM ...

  8. MFC对话框中显示BMP,JPG图片

    //************************************ // 方法说明:    显示JPG和GIF.BMP图片 // 参数说明:    CDC * pDC           设 ...

  9. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733   ...

随机推荐

  1. react hook的todolist

    感觉好长时间没写博客一样,app.js代码 import React from 'react'; import { useState } from 'react'; function App() { ...

  2. iTerm 2打造ssh完美连接Linux服务器快捷方法

    iTerm 2打造ssh完美连接Linux服务器快捷方法 2019年05月02日 10:40:19 Mars0908 阅读数 213更多 个人分类: Mac下开发   版权声明:本文为博主原创文章,遵 ...

  3. smarty建的mvc环境

    ================================搭建MVC结构================================基于MVC,解耦合 (高内聚,低耦合),优点:易维护.易扩 ...

  4. SpringBoot之HandlerInterceptor拦截器的使用 ——(一)

    HandlerInterceptor简介拦截器我想大家都并不陌生,最常用的登录拦截.或是权限校验.或是防重复提交.或是根据业务像12306去校验购票时间,总之可以去做很多的事情.我仔细想了想这里我分三 ...

  5. 关于CAShapeLayer的一些基本操作

    设置圆形进度条: 实现效果如下: 实现代码如下:(注释很详细啦!!!) UIView *circleView = [[UIView alloc]initWithFrame:CGRectMake(, , ...

  6. mongodb中对数组的操作命令

    mongodb中对数组的操作命令有$push.$ne.$addtoset.$pop.$pull ###addtoset会碰到的问题addtoset解释: 往数组里面加入数据,如果数组里已经存在,则不会 ...

  7. 【AMAD】django-crispy-forms -- 不要再重复编写Django Form了!

    动机 简介 个人评分 动机 这个APP提供了一个template tag和一个template filter,让你可以在模版中快速渲染表单. 简介 django-crispy-forms1可以看作是d ...

  8. shell中变量的测试与替换

    在某些时刻我们经常需要判断某个变量是否存在,若变量存在则使用既有的设置,若变量不存在则给予一个常用的设置. (1) 变量未被设置或者内容为空,则替换为新的内容. new_var=${old_var-c ...

  9. docker安装mongodb和redis

    一.安装mongodb docker pull mongo docker run -p 27017:27017 -d --name mongodb01 mongo docker run -p 2701 ...

  10. 使用Dockerfile创建ssh服务的镜像02

    使用Dockerfile创建ssh服务的镜像02 1:创建工作目录---一个镜像的所有文件都放这个目录下 ubuntu@ubuntu:~$ mkdir sshd_ubuntu ubuntu@ubunt ...