位图绘制

先来段代码吧;

#include <iostream>  

#include <gl/glut.h>  

using namespace std;
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glut32.lib")
#pragma comment(lib,"glu32.lib") GLubyte rasters[]={
0xc0,0x00,0xc0,0x00,0xc0,0x00,0xc0,0x00,
0xc0,0x00,0xff,0x00,0xff,0x00,0xc0,0x00,
0xc0,0x00,0xc0,0x00,0xff,0xc0,0xff,0xc0
};
void init()
{ glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
glPixelStorei(GL_UNPACK_ALIGNMENT,); } void display()
{
glClear(GL_COLOR_BUFFER_BIT);
GLfloat colors[]={1.0,1.0,0.0};
glColor3fv(colors);
glRasterPos2i(,);
glBitmap(,,0.0,0.0,11.0,0.0,rasters);
glBitmap(,,0.0,0.0,11.0,0.0,rasters);
glBitmap(,,0.0,0.0,11.0,0.0,rasters); glFlush(); } void reshape(int w,int h)
{ glViewport(,,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,(GLdouble)w,0.0,(GLdouble)h);//left right,buttom,up (left,buttom),(right,up)
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
} int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowSize(,);
glutInitWindowPosition(,);
glutCreateWindow(argv[]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return ; }

显示结果:

位图的绘制就是上面的代码。是不是很简单。。

代码分析:

书上那些理论确实是很熟,比如gluOthor2d函数是干什么用的,大家肯定都知道,不知道,网上一查什么都清楚了,但是在具体编程中如何才能合适的用他们呢?这才是关键,我一直卡在这一步了,通过这段代码的编写,我终于搞清楚了这几天的疑惑????下面我来介绍一下。。
上面那段代码有1个关键的函数:gluOthor2d,你如果去掉这行也是可以的,3个F照样显示出来,如:
怎么会变成这样呢?在没调用gluOthor2d函数之前,窗口的中心坐标为(0,0);调用了这个函数之后窗口的中心坐标不再是(0,0)了,窗口的左下角才是(0,0)。
然后来看看gluOthor2d函数的参数,我们实际上是用(0,0)到(w,h)的这个范围来裁剪我们的视野,也就是说只有在这个视野范围之内的东西,我们才能在窗口中看到它。假如我们来改变一下光栅位置(glRasterPos2i函数指定):(-1,0),不出所料,你什么都看不到了。。
 
屏幕坐标和屏幕像素的转换:
   一个单位的屏幕坐标就是width/2的像素。。能理解吧。
Over...加油,共同进步。。
 

OpenGL之位图的绘制和gluOrtho2D等函数详解的更多相关文章

  1. # OpenGL常用函数详解(持续更新)

    OpenGL常用函数详解(持续更新) 初始化 void glutInit(int* argc,char** argv)初始化GULT库,对应main函数的两个参数 void gultInitWindo ...

  2. OpenGL ES一些函数详解(一)

    glLoadIdentity和glMultMatrix   glLoadIdentity的作用是将当前模型视图矩阵转换为单位矩阵(行数和列数相同的矩阵,并且矩阵的左上角至右下角的连线上的元素都为1,其 ...

  3. OpenGL的glPushMatrix和glPopMatrix矩阵栈顶操作函数详解

    OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的.opengl中的变换一般包括视图变换.模型变换.投影变换等,在每次变换后,opengl将会呈 ...

  4. OpenGL一些函数详解(二)

    OpenGL ES顶点数据绘制技巧 在OpenGL中,绘制一个长方体,需要将每个顶点的坐标放在一个数组中.保存坐标时有一些技巧(由于字母下标不好表示,因此将下标表示为单引号,如A1将在后文中表示为A' ...

  5. OpenGL的glOrtho平行投影函数详解[转]

    glortho函数可以将当前的可视空间设置为正投影空间.基参数的意义如图,如果绘制的图空间本身就是二维的,可以使gluOrtho2D.他的使用类似于glOrtho 原型是: void glOrtho( ...

  6. 【OpenGL】glFinish()和glFlush()函数详解-[转]

    通常情况下,OpenGL指令不是立即执行的.它们首先被送到指令缓冲区,然后才被送到硬件执行.glFinish和glFlush都是强制将命令缓冲区的内容提交给硬件执行. 一.glFinish()函数   ...

  7. Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

    View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

  8. (转)OpenGL中位图的操作(glReadPixels,glDrawPixels和glCopyPixels应用举例)

    (一)BMP文件格式简单介绍 BMP文件是一种像素文件,它保存了一幅图象中所有的像素.这种文件格式可以保存单色位图.16色或256色索引模式像素图.24位真彩色图象,每种模式种单一像素的大小分别为1/ ...

  9. OpenGL中位图的操作(glReadPixels,glDrawPixels等)

    OpenGL中位图的操作 OpenGL中位图的操作(glReadPixels,glDrawPixels和glCopyPixels应用举例). 1. BMP文件格式简单介绍 BMP文件是一种像素文件,它 ...

随机推荐

  1. golang rpc 简单范例

    RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 它的工作流程如下图:   go ...

  2. C#语言总结1

    C#C#定义: C#是一门面向对象.面向组件的一门语言,是.NET的一部分. 程序结构: 命名空间 类{ 属性 方法 main函数入口 } 数据类型: C#的数据类型分为:值类型(Value type ...

  3. bootstrap学习笔记细化(表格)

    主要属性: 全屏宽度带水平线的表格 .table 带边框的表格 .table-bordered 条纹状表格 .table-striped 悬停变色表格 .table-hover 紧凑风格表格 .tab ...

  4. CSS使用小技巧

    对于元素position 属性中的 relative absolute 页面居中问题 /* relative */div{ position:relative; margin: 0 auto}​/* ...

  5. html基础概念

    一.HyperText Markup Language   内容,html是弱代码语言,代码编写不严谨 1.超链接  <a href="#">超级链接(anchor)& ...

  6. oracle删除归档日志

    查看归档模式: SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive ...

  7. 微服务架构之spring cloud eureka

    Spring Cloud Eureka是spring cloud的核心组件,负责服务治理功能,起到中心枢纽作用,其它组件都依赖eureka来获取服务,然后再根据项目需求实现自己的业务,eureka在整 ...

  8. Maximum Depth of Binary Tree 二叉树的深度

    Given a binary tree,find its maximum depth. The maximum depth is the number of nodes along the longe ...

  9. 基于Vue的WebApp项目开发(五)

    实现图片分享列表 步骤一:新增图片列表文件photolist.vue <template> <div id="tml"> 图片分享页面 </div&g ...

  10. 一、ionic 图片轮播问题

    使用ion-slide可以实现图片轮播,但是如果在html中仅仅增加ion-slide是远远不够的,会出现两个问题:图片加载不出来和图片轮播至最后一个不轮播的问题 1.如何解决图片加载不出来的问题 i ...