代码从此处下载

1 运行如下代码,可以看到如下效果,我们利用opengl画出一个三角形。

void renderScene(void)
{/*glClear清除缓冲区*/glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/*将当前的用户坐标系的原点移到了屏幕中心:类似于一个复位操作1.X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。2.OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。3.中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是负值,移出屏幕则是正值。*/glLoadIdentity();/*画出三个顶点,根据这三个顶点链接成一个凸包*/glBegin(GL_TRIANGLES);//GL_TRIANGLES三角形glVertex3f(-1.0, -1.0, 0.0);glVertex3f(1.0, 0.0, 0.0);glVertex3f(0.0, 1.0, 0.0);glEnd();/*双缓冲模式与 glutInitDisplayMode(GLUT_RGBA) 对应*/glutSwapBuffers();
}

这个代码中需要解释的是glLoadIdentity(),假如这个函数去掉,当我们窗口大小变化的时候,窗口中的所有东西都会消失。

这个小小的细节涉及到opengl的渲染机制,opengl有个变化矩阵堆栈,opengl中的每个定义好的将要渲染的矩阵呈现之前都要先乘以栈顶的矩阵。glLoadIdentity()将栈顶的矩阵设置为固定不变的单位矩阵,所以当窗口大小变化需要重绘窗口的时候,就可以就可以保持不变了。

其他情况类似的情况如下:

glTranslatef:将T(x,y,z)右乘与堆栈的栈顶变换矩阵。右乘的解释,假设目前栈顶变换矩阵为M,那么就相当于把M修改为M*T.
glRotatef :将R(x,y,z,s)右乘与堆栈的栈顶变换矩阵。
glLoadIdentity:将堆栈的栈顶变换矩阵设置成单位矩阵。
glPushMatrix:将堆栈的栈顶变换矩阵复制一份,然后Push到堆栈中。所谓Push,就像塞子弹一样把一个矩阵压入到堆栈中,此时,栈顶就是这个新的矩阵了,注意定义的向量都是和栈顶变换矩阵作用的。

glPopMatrix:将堆栈的栈顶变换矩阵Pop出来。

更多细节参考  http://wenku.baidu.com/view/a4f5748fcc22bcd126ff0c1a.html

2 关于视图显示 glViewport();glOrtho();

void renderScene_1(void)
{glClearColor(0.0, 0.0, 0.0, 0.0);glClear(GL_COLOR_BUFFER_BIT);/* 画笔的颜色*/glColor3f(1.0, 1.0, 0.0);glLoadIdentity();/* http://hi.baidu.com/xun1573/item/a872977f9fbbbd366cc37c6f http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html glOrtho获取截屏procedure glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:GLSizei);拉伸之后放在glViewPort上,根据glViewPort(x, y, width, height)放在总的窗口上的(x, y)坐标上*/glViewport(50, 50, 300, 300);glOrtho(0.25, 0.25, 0.75, 0.75, -0.0, 0.5);/* 画一个正方形*/glBegin(GL_POLYGON);{glVertex3f(0.25, 0.25, 0.0);glVertex3f(0.75, 0.25, 0.0);glVertex3f(0.75, 0.75, 0.0);glVertex3f(0.25, 0.75, 0.0);}glEnd();/* 双缓冲渲染*/glutSwapBuffers();
}

http://hi.baidu.com/xun1573/item/a872977f9fbbbd366cc37c6f

http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html

转载于:https://www.cnblogs.com/zhxfl/p/3320246.html

opengl (1) 基本API的熟悉相关推荐

  1. OpenGL纹理 常用API简介

    #原始图像数据与内存包装 图像的存储空间= 图像的宽度 * 图像的高度 * 每个像素的字节数(系统决定) 内存对齐: 字长32位的计算机上,如果数据在内存中按照32位的边界对齐(地址为4字节的倍数), ...

  2. android device monitor命令行窗口在哪里_Vulkan在Android使用Compute shader

    oeip 相关功能只能运行在window平台,想移植到android平台,暂时选择vulkan做为图像处理,主要一是里面有单独的计算管线且支持好,二是熟悉下最新的渲染技术思路. 这个 demo(git ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之环境配置

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/index.html 引言 Android framework层为创建绚丽的功能性U ...

  4. 使用Android OpenGL ES 2.0绘图之一:搭建一个OpenGL ES环境

    传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/levera ...

  5. OpenGl文章 Android OpenGL ES 简明开发教程

    Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...

  6. 基于OpenGL的Android系统视频转换功能实现

          第1章OpenGL ES 3D图形编程首先OpenGL.OpenGL的英文全称是OpenGL Graphics Library,中午名称是开发式图形库.OpenGL为程序开发人员定义了一个 ...

  7. OpenGL 开始学习指南

    近期需要做一个涌潮的预报与仿真模拟,为了使模型更具有真实感,且逼真,使用起来更灵活.感觉还是得从基础的OpenGL学习.鉴于Direct3D技术存在的众多不确定性,且评论不太好的原因,决定用OpenG ...

  8. OpenGL/C++实战——C++实现太阳系行星系统

    注:本教程版权归实验楼所有,有兴趣的同学也可点进官网蓝桥网课:C++实现太阳系行星系统学习(免费课程) 文章目录 框架设计 认识 OpenGL 和 GLUT 类设计 stars.hpp solarsy ...

  9. 常用图形渲染API简介

    目前比较常用的图形渲染API有如下几种: Direct3D OpenGL Vulkan Metal 下面会详细的介绍各种API的特点 Direct3D Direct3D(简称:D3D)是微软公司在Mi ...

  10. C++ API 设计 06 第一章 简介

    第一章 简介 1.1 应用程序编程接口是什么? 应用程序编程接口(API)提供对问题的一个抽象,并说明客户端如何与实现这个问题的解决方案的软件组件来进行交互. 这些组件本身通常作为一个软件库发布,允许 ...

最新文章

  1. numpy数组切片:一维/二维/数组
  2. python 序列化函数_python – 如何序列化sympy lambdified函数?
  3. android service 学习(上)
  4. 高数之差分方程---定义
  5. 高退出低留存:六年百万数据透析,想颠覆传统教育的MOOC怎么了?
  6. Windows下使用Java API操作HDFS的常用方法
  7. 改变select元素原来的事件属性,并加快捷键
  8. st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
  9. 院内适配层新版框架开发文档
  10. 人教版三年级下册计算机课教案,人教版三年级下册19课教案
  11. 【雷达通信】基于Matlab GUI中重频PD雷达仿真系统【含Matlab源码 1055期】
  12. flex 引入html,在Flex中嵌入完整HTML页面
  13. Java将html转换PDF文件
  14. 洛谷 P1069 细胞分裂
  15. C# 五步完成Bmp文件流到AVI的转换
  16. Windows 10错误在打开特定路径时导致BSOD崩溃
  17. 带你了解2021世界人工智能大会上的AI新趋势
  18. 办理广东林业调查规划设计资质最新申报标准
  19. 2:什么是反射与反射的应用及调用方法(by-朝夕)
  20. 游戏性能优化指南:如何将HTML5性能发挥到极致

热门文章

  1. maximum call stack size exceeded ajax,Maximum call stack size exceeded error
  2. android 自定义tabhost,安卓选项卡的实现方法(TabActivity),自定义TabHost容器
  3. php 删除判断是否存在,PHP – 判断utf-8编码是否存在BOM并自动删除
  4. redis 如何查看某个库的key_如何发现 Redis 热点 Key ,解决方案有哪些?
  5. java世博会_世博会申请由xcode修改
  6. mysql 主从 日志_mysql主从复制基于日志复制
  7. python-学生管理系统--6 搜索功能模块
  8. Java教程_软件开发基础
  9. Bash基础——快捷键
  10. Ionic3与Angular4新特性