透视投影

  三维空间物体显示近大远小。

透视投影区域是个棱锥体:

透视投影显示效果:

opengl透视投影函数:

 void APIENTRY gluPerspective (GLdouble fovy,  GLdouble aspect, GLdouble zNear, GLdouble zFar);

代码实例:


/*
* 透视投影
*/#define GLEW_STATIC
#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>#include <math.h>#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )  //这行是取消显示控制台char szTitle[64] = "opengl view";// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;static void error_callback(int error, const char* description) {fputs(description, stderr);
}static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)glfwSetWindowShouldClose(window, GL_TRUE);
}//顶点数据
struct Vertex {float x, y, z;
};
// 绘制
static void render(GLFWwindow * window) {glClearColor(0, 0, 0, 1);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// 这里坐标数据是三维空间中的// 屏幕左边为-1 右边为1 上面为1 下面为-1Vertex  arVert[]    ={{0.5f, 0.1, -0.5},{0.2f, 0.3, -.5},{0.8f, 0.3, -.5},};glEnableClientState(GL_VERTEX_ARRAY);glVertexPointer(3, GL_FLOAT, sizeof(Vertex), arVert);glDrawArrays(GL_TRIANGLES, 0, 3);glfwSwapBuffers(window);glfwPollEvents();
}int main(void) {GLFWwindow * window;glfwSetErrorCallback(error_callback);if(!glfwInit()) return -1;window = glfwCreateWindow(WIDTH, HEIGHT, szTitle, NULL, NULL);if(!window) {glfwTerminate();exit(EXIT_FAILURE);}glfwMakeContextCurrent(window);glfwSetKeyCallback(window, key_callback);glewExperimental = GL_TRUE;glewInit();glViewport(0, 0, WIDTH, HEIGHT); //设置opengl视口 即看到的显示区域glMatrixMode(GL_PROJECTION); //设置当前操作的是投影矩阵队列glLoadIdentity(); //将队列最上层的一个投影矩阵清空成单位矩阵//gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);//fovy 角度 视角//aspect 宽高比//zNear 近裁剪面//zFar  远裁剪面gluPerspective(60, double(WIDTH) / double(HEIGHT), 0.1, 1000);//产生一个新的投影矩阵并和上面的投影矩阵队列最上面单位矩阵相乘,实际上就是产生一个投影矩阵并放到投影矩阵队列的最上面 while(!glfwWindowShouldClose(window)) {render(window);}glfwDestroyWindow(window);glfwTerminate();return 0;
}

运行结果:

openGL学习笔记十四: 透视投影相关推荐

  1. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  2. Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理

    Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...

  3. OpenGL学习笔记(四)-光照-材质-光照贴图

    参考网址:LearnOpenGL 中文版 哔哩哔哩教程 第二章 光照 2.1 颜色 现实生活中人眼看到某一物体的颜色,是它所反射的颜色.如将白光照在红色的玩具上,玩具会吸收白光中除了红色以外的所有子颜 ...

  4. 【神经网络】学习笔记十四——Seq2Seq模型

    本文简要介绍seq2seq,即序列到序列的基本知识,是深度学习和NLP中一个重要的知识. 从三部分来说,seq2seq基本简介,应用场景和原理解析. 一.什么是Seq2Seq 所谓Seq2Seq(Se ...

  5. 重新认识错过(通向财富自由之路学习笔记十四)

    本周学习<通向财富自由之路>专栏重新认识错过的文章,在文章中作者介绍了自己是如何错过一次升级的.对于这种错过,非常有同感.比如在中学时候,需要学习生物.历史.地理等学科,而这些学科不需要计 ...

  6. 【theano-windows】学习笔记十四——堆叠去噪自编码器

    前言 前面已经学习了softmax,多层感知器,CNN,AE,dAE,接下来可以仿照多层感知器的方法去堆叠自编码器 国际惯例,参考文献: Stacked Denoising Autoencoders ...

  7. Mr.J-- jQuery学习笔记(十四)--动画显示隐藏

    eq()函数 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其他元素/选择器一起使用,来选 ...

  8. linux学习笔记十四:安装SAMBA(Server Message Block)

    NFS:仅用于Linux之间 CIFS:仅用于Windows之间 SAMBA:可用于Linux与Windows之间,基于NetBIOS协议(用于LAN内部,不能跨路由),没有IP地址的概念,根据 Ne ...

  9. 好记性不如烂笔杆-android学习笔记十四 EditText 画行,解决光标压线问题

    这个问题我在网上看来很多方法,有些看得似懂非懂的,后来自己采用一种比较投机的方法,居然可行,呵呵,拿出来跟大家分享一下. 其实就是把画的线向下偏移一定高度,当然针对不同分辨率,这个值也就不同: (因为 ...

最新文章

  1. C#学习笔记——MDI窗体(多文档界面)
  2. 【学习笔记】SAP OData服务简介
  3. c malloc 头文件_C语言提高篇_malloc,realloc和calloc的区别
  4. Taro+react开发(88):大写px 控制样式
  5. lodash和debounce
  6. Android Studio插件安装
  7. 第九讲 博弈论在机制设计中的应用练习题
  8. 同济大学计算机保研名单,同济大学2021届保研率27.8%,主要保研本校、复交清国...
  9. java报错: 类重复: newemission.calculate_java当中的继承(一)
  10. IDEA/Android Studio中替换(replace)快捷键
  11. 在服务器上如何打开mdf文件,在没sql server数据库状况下怎么打开.mdf文件
  12. mysql1026_PAT Basic 1026(示例代码)
  13. 照片查看器找不见的解决办法
  14. 第一行代码-第二版(郭霖著)笔记十一(Material Design)
  15. BUUCTF NewStarCTF一些新知识记录
  16. 2019FME博客大赛——【零编码】利用FME实现城市高德路况抓取及增量更新——以深圳为例
  17. pass在c语言中的作用,Python语句中pass语句有什么作用?浅谈pass语句的用法
  18. 无名大地之始,有名万物之母
  19. Argo CD系列视频图文版之安装 argocd 并运行示例
  20. 智能机器人的核心技术和技术指标总结

热门文章

  1. Java程序员春招三面蚂蚁金服,开源掌机玩java
  2. 企业级应用开发(SSM) Spring
  3. [C++程序设计](入门级题解) 校门外的树
  4. 【PPT模板】动态时间轴(含资源下载)
  5. 磁盘 - 使用LVM进行磁盘扩容(fdisk, LVM, pvcreate, lvcreate, parted)
  6. Matrix.postScale
  7. 魅族18Pro和一加9Pro参数对比买哪个 魅族18Pro和一加9Pro配置区别
  8. 从头到尾把事做成,要有多难?
  9. C语言字符付应整数值,全国二级C语言复习资料3.doc
  10. Java开发相关书籍(PDF)-下载