OpenTK学习笔记
OpenGL定义
OpenGL被定义为”图形硬件的一种软件接口”.实质上是3D图形和模型库,具有高度可移植性,具有非常快的速度。
OpenGL架构
术语pipeline常用于阐述彼此紧密联系的一系列事件
管线(pipeline)是一个过程,可能涉及两个或多个独特的阶段或步骤。应用程序进行OpenGL函数调用时,这些命令被放置在一个命令缓冲区,该缓冲区最终填满了命令,定点数据,纹理等东西,缓冲区被刷新时,命令和数据就传递给下一个阶段
OpenGL Application(应用程序): Geometry (几何),texture(纹理)
↓
Vertex data (顶点数据):lighting(光照),transform(变换),scale(缩放)
↓
Geometry(几何):Rasterization(光栅),clipping(剪裁)
↓
Fragment(段):frog(雾) ,texture(纹理)
↓
Framebuffer(帧缓冲区):Stencil(蒙版),alpha(透明度),z-tests(深度测试),blending(混合)
↓
Eyeballs(眼球)
OpenGL坐标
屏幕坐标系:横轴是X轴,纵轴是Y轴,分别向右是正方向,向下是正方向,原点在左上角。
数学坐标系:原点在左下方,向上是X轴的正方向
OpenGL3D坐标系: 与数学坐标系相似,左下角是原点,向右和向上是正值。添加第三个量Z轴。z轴方向从屏幕内部指向屏幕外部。
OpenGL空间位置变换
视图矩阵
表示观察者或者是相机的位置以及朝向。架设相机的过程
Matrix4 mx4 = Matrix4.LookAt(0f, 0f, 5f, 0f, 0f, 0f, 0f, 1f, 0f);
前三个参数表示相机的位置,接下来的三个参数表示目标观察点的位置(两点确定了视线的方向),最后三个参数表示了相机的方 向。
模型矩阵变换
描述物体的位置
模型视图变换
相机和物体是相对运动。所以一般用模型视图矩阵类表示相机与物体的相对位置。投影矩阵变换
摄像机的视角以及视觉范围。类似对角的操作
通过定义平截头体(视景体)视口矩阵变换
视口矩阵变换是一种伪变换,是将规范化的设备坐标进行缩放到视口的变换。类型冲印胶片的操作
简单的OpenGL 操作顺序
/// 1.控件OnCreate方法中
// 设置清屏色
GL.ClearColor(Color.SkyBlue); // 设置清屏色
/// 2. Resize方法中
// 1. 设置视口
GL.Viewport(0, 0, c.ClientSize.Width, c.ClientSize.Height);
// 2. 操纵投影矩阵,设置平截头体(比例通常和视口比例相同,否则输出画面会走样)
//矩阵模式,投影矩阵,openGL基于状态机
GL.MatrixMode(MatrixMode.Projection);
// 加载单位矩阵,重置矩阵的状态
GL.LoadIdentity();
// 设置平截头体(视景体)
GL.Frustum(-aspect_ratio, aspect_ratio, -1.0f, 1.0f, 3.0f, 7.0f); // 创建平截头体
// 另外一种方法
//Matrix4 perpective = Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4,aspect_ratio,1.0f,100.0f);
//GL.LoadMatrix(ref perpective);
/// 3. Paint或者DrawFrame()方法中
// 清除颜色缓冲区
GL.Clear(ClearBufferMask.ColorBufferBit);
// 操纵模型视图矩阵,设置眼球参数
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
// 设置观察者参数
Matrix4 mx4 = Matrix4.LookAt(0f, 0f, 5f, 0f, 0f, 0f, 0f, 1f, 0f);
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadMatrix(ref mx4);
// 绘制图形
GL.Begin(BeginMode.Polygon);
GL.Vertex3(-1.0f, -1.0f, 2.0f);
GL.Vertex3(1.0f, -1.0f, 2.0f);
GL.Vertex3(1.0f, 1.0f, 2.0f);
GL.Vertex3(-1.0f, 1.0f, 2.0f);
GL.End();
// 交换缓冲区
glControl1.SwapBuffers();
OpenTK学习笔记的更多相关文章
- [转]OpenTK学习笔记(1)-源码、官网地址
OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Versi ...
- OpenTK学习笔记(3)-你好!窗体!
参考:http://dreamstatecoding.blogspot.com/2017/01/opengl-4-with-opentk-in-c-part-1.html http://www.cnb ...
- OpenTK学习笔记:C#的中开发OpenGL程序的4种开源封包库SharpGL、CsGL、OpenTK、Tao框架的简单对比
最近要在C#的语言环境下开发OpenGL程序,参考了网上的博客论坛http://www.cnblogs.com/hanyonglu/archive/2012/06/12/2546581.html,总结 ...
- OpenTK学习笔记(1)-源码、官网地址
OpenTK源码下载地址:https://github.com/opentk/opentk OpenTK使用Nuget安装命令:OpenTK:Install-Package OpenTK -Versi ...
- OpenTK学习笔记(2)-工作窗口的三种方法创建方法(winfrom窗体控件形式创建)
参考资料: https://social.msdn.microsoft.com/Forums/zh-TW/1b781685-c670-4338-953d-1957a8f24a66/opentkglco ...
- OpenTK学习笔记(2)-工作窗口的三种方法创建方法(winfrom下类的形式创建)
参考资料: https://www.codeproject.com/Articles/1167212/OpenGL-with-OpenTK-in-Csharp-Part-Initialize-the- ...
- OpenTK学习笔记(2)-工作窗口的三种方法创建方法(控制台)
参考资料: 控制台下类的形式创建:http://www.cnblogs.com/podolski/p/7406628.html 总结: 一.控制台下类的形式创建 1.新建控制台应用 2.连网执行Nug ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
随机推荐
- Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展
本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样: ▲ 微信群聊界面里的@人功能 ▲ QQ群聊界面里 ...
- Hello,Thread
创建线程的三种方法,线程的生命周期,sleep,yield,join,wait 和notify,线程组,守护线程,线程的优先级 ◆ 如何创建线程 ◆ Java 中创建线程的方法有三种: 继承 Thre ...
- CS231n 第一次作业KNN中本地CIFAR10数据集的载入
一.问题描述 网上绝大多数作业参考都是在jupyter下运行的,数据集载入过程一般如下: from cs231n.data_utils import load_CIFAR10 #导入数据集,并打印出数 ...
- [Swift]LeetCode13. 罗马数字转整数 | Roman to Integer
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...
- [Swift]LeetCode540. 有序数组中的单一元素 | Single Element in a Sorted Array
Given a sorted array consisting of only integers where every element appears twice except for one el ...
- 数据攻略●R语言自述
(注明:以下文章均在Linux操作系统下执行) 一.R语言简介 R语言是用于统计分析,图形表示和报告的编程语言和软件环境.R语言由Ross Ihaka和Robert Gentleman在新西兰奥克兰大 ...
- C# 多线程学习笔记 - 3
本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段. 遵循原作者的 CC 3.0 协议. 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习. 原文章地 ...
- 【干货】.NET WebApi HttpMessageHandler管道
消息拦截器是一个类,接收 HTTP request并返回 HTTP response,Message handler 继承自抽象类 HttpMessageHandler,那么学习消息过滤器之前你应该了 ...
- Unable to build: the file dx.jar was not loaded from the SDK folder
eclipse 运行 android 时失败了,提示 Unable to build: the file dx.jar was not loaded from the SDK folder! 解决办法 ...
- SpringBoot入门教程(八)配置logback日志
Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access.logback-c ...