星空网 > 软件开发 > ASP.net

SharpGL学习笔记(五) 视口变换

视口变换主是将视景体内投影的物体显示到二维的视口平面上. 在计算机图形学中,它的定义是将经过几何变换, 投影变换和裁剪变换后的物体显示于屏幕指定区域内.

前面我们讨论过的透视投影, 正射投影, 它们都会产生一个视景体, 利用Viewport()函数, 就可以把这些视景体内投影的物体显示到屏幕指定的区域内.

默认情况下, 视口就是你用来绘制3D图像的整个矩形区域. 

Viewport的原型是:  Viewport(int x, int y, int width, int height)

 

我们来用示意图描述一下这个函数的作用:

(1) Viewport定义了视口在窗口中的区域, 同时也规定了二维像素平面到视口区域的映射关系.

SharpGL学习笔记(五) 视口变换

(2) 若有Viewport(0,0,w/2,h)则会有下面的效果:

SharpGL学习笔记(五) 视口变换

 

(3) 也可以利用Viewport()生成多窗口效果:

Viewport(0,0, w/2, h/2); drawpic();      //左下角

Viewport(w/2,0, w/2, h/2); drawpic();    //右下角

Viewport(0, h/2, w/2, h/2); drawpic();   //左上角

Viewport(w/2, h/2, w/2, h/2); drawpic();  //右上角

 

SharpGL学习笔记(五) 视口变换

 

下面给出多窗口效果例子的源码:

 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using SharpGL; 10  11 namespace SharpGLWinformsApplication1 12 { 13   public partial class SharpGLForm : Form 14   { 15     public SharpGLForm() 16     { 17       InitializeComponent(); 18     } 19  20     private void openGLControl_OpenGLDraw(object sender, PaintEventArgs e) 21     { 22       OpenGL gl = openGLControl.OpenGL; 23       gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); 24       gl.LoadIdentity(); 25       display(gl); 26     } 27  28     void display(OpenGL gl) 29     { 30       gl.Color(1.0, 0.0, 0.0); 31       //画分割线,分成四个视见区 32       gl.Viewport(0, 0, 400, 400); 33       gl.Begin(OpenGL.GL_LINES); 34       { 35         gl.Vertex(-1.0, 0); 36         gl.Vertex(1.0, 0); 37         gl.Vertex(0.0, -1.0); 38         gl.Vertex(0.0, 1.0); 39       } 40       gl.End(); 41       42  43       //定义在左下角的区域 44       gl.Color(0.0, 1.0, 0.0); 45       gl.Viewport(0, 0, 200, 200); 46       gl.Begin(OpenGL.GL_POLYGON); 47       { 48         gl.Vertex(-0.5, -0.5); 49         gl.Vertex(-0.5, 0.5); 50         gl.Vertex(0.5, 0.5); 51         gl.Vertex(0.5, -0.5); 52       } 53       gl.End(); 54  55       //定义在右上角的区域 56       gl.Color(0.0, 0.0, 1.0); 57       gl.Viewport(200, 200, 200, 200); 58       gl.Begin(OpenGL.GL_POLYGON); 59       { 60         gl.Vertex(-0.5, -0.5); 61         gl.Vertex(-0.5, 0.5); 62         gl.Vertex(0.5, 0.5); 63         gl.Vertex(0.5, -0.5); 64       } 65       gl.End(); 66  67       //定义在左上角的区域 68       gl.Color(1.0, 0.0, 0.0); 69       gl.Viewport(0, 200, 200, 200); 70       gl.Begin(OpenGL.GL_POLYGON); 71       { 72         gl.Vertex(-0.5, -0.5); 73         gl.Vertex(-0.5, 0.5); 74         gl.Vertex(0.5, 0.5); 75         gl.Vertex(0.5, -0.5); 76       } 77       gl.End(); 78  79       //定义在右下角 80       gl.Color(1.0, 1.0, 1.0); 81       gl.Viewport(200, 0, 200, 200); 82       gl.Begin(OpenGL.GL_POLYGON); 83       { 84         gl.Vertex(-0.5, -0.5); 85         gl.Vertex(-0.5, 0.5); 86         gl.Vertex(0.5, 0.5); 87         gl.Vertex(0.5, -0.5); 88       } 89       gl.End(); 90  91       gl.Flush(); 92     } 93  94     private void openGLControl_OpenGLInitialized(object sender, EventArgs e) 95     { 96       OpenGL gl = openGLControl.OpenGL; 97       gl.ClearColor(0, 0, 0, 0); 98     } 99 100 101     private void openGLControl_Resized(object sender, EventArgs e)102     {103       OpenGL gl = openGLControl.OpenGL;104       gl.MatrixMode(OpenGL.GL_PROJECTION);105       gl.LoadIdentity();106 107       gl.Ortho2D(-1.0, 1.0, -1.0, 1.0);108       gl.MatrixMode(OpenGL.GL_MODELVIEW);109     }110   }111 }

 

效果如下图:

SharpGL学习笔记(五) 视口变换

 

本节源代码下载

 




原标题:SharpGL学习笔记(五) 视口变换

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

2021什么最好卖?eBay爆款选品大预测!:https://www.ikjzd.com/articles/136086
亚马逊计划在美国俄克拉荷马城开设新的配送中心:https://www.ikjzd.com/articles/136087
TikTok还是YouTube?视频营销选哪个好?:https://www.ikjzd.com/articles/136088
不得不看的数据分析,亚马逊后台的业务报告:https://www.ikjzd.com/articles/136089
亚马逊的免费流量-AmazonPost 实操教程:https://www.ikjzd.com/articles/136090
螺旋式爆款打造中的几个问题与解答:https://www.ikjzd.com/articles/136091
从园岭新村到大梅沙海滨总站坐什么车:https://www.vstour.cn/a/363191.html
七月份适合去日本旅游吗 7月份去日本哪里好玩:https://www.vstour.cn/a/363192.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流