全球彩票平台_全球彩票注册平台|官网下载地址

热门关键词: 全球彩票平台,全球彩票注册平台,全球彩官网下载地址

【全球彩票注册平台】裁剪变换,SharpGL学习笔记

SharpGL学习笔记(六) 裁剪调换,sharpgl学习笔记

 

在OpenGL中,除了视景体定义的6个裁剪平面(上下左右光景)外, 客户还足以定义二个要么多个叠合的剪裁平面,以去掉场景中毫不相关的目的.

外加平面裁剪函数原型如下:

ClipPlane(OpenGL.GL_CLIP_PLANEi, double[] equation);

equation是二个富有4个周密的数组, 它定义三个裁剪平面。equation参数指向平面方程Ax By Cz D = 0的4个周到。

equation=(0,-1,0,0),前多个参数(0,-1,0)能够精晓为法线向下,独有向下的,即Y<0的本事显示,倒数参数0表示从z=0平面开头。那样正是裁剪掉上半平面。

对应的equation=(0,1,0,0)表示裁剪掉下半平面,

equation=(1,0,0,0)表示裁剪掉左半平面,

equation=(-1,0,0,0)表示裁剪掉右半平面,

equation=(0,0,-1,0)表示裁剪掉前半平面,

equation=(0,0,1,0)表示裁剪掉后半平面

 上几节,商量过透视投影和正射投影, 它们组成二种视景体, 本人富含了裁剪成效, 这几个附加的剪裁效用如下图所示:

全球彩票注册平台 1

 

 

暗示图恐怕有一点点不太直观, 小编先援引3dsmax的剪裁效果, 让我们对所谓的剪裁的成效有个主观影像.

在3dsmax中, 摄像机有一个区划平面包车型地铁选项, 勾选后方可设定近距剪切的职位(左视图这条倾斜的己丑革命线条正是近距剪切线的义务,它的职责是85.493), 设置多少个值后, 看到如下图所示的剪裁的效果.

假使您活动摄像机的岗位, 那么剪切的义务会随着改造.

全球彩票注册平台 2

 

在OpenGL中, 经我测验, 开掘视点转变并不会耳熟能详裁剪结果, 反而是模型的几何调换(移动,旋转,缩放) 影响裁剪结果.

 

小编们以代码来验证那么些ClipPlane()函数的用法, 先上代码:

  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 clipPlane
 12 {
 13 
 14     public partial class SharpGLForm : Form
 15     {
 16 
 17         public SharpGLForm()
 18         {
 19             InitializeComponent();
 20         }
 21 
 22         private void openGLControl_OpenGLDraw(object sender, PaintEventArgs e)
 23         {
 24             OpenGL gl = openGLControl.OpenGL;
 25             gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
 26             gl.LoadIdentity();
 27 
 28             double[] eqn = new double[4] { 1f, 0f, 0f, 0f };
 29 
 30             gl.Color(1.0, 1.0, 1.0);
 31 
 32             gl.PushMatrix();
 33             {
 34                 gl.Translate(-2, -2, -3);
 35                 gl.Rotate(-90.0, 1.0, 0.0, 0.0);
 36                 drawSphere(gl);
 37             }
 38             gl.PopMatrix();
 39 
 40             gl.PushMatrix();
 41             {
 42                 //gl.ClipPlane(OpenGL.GL_CLIP_PLANE0, eqn);
 43                 //gl.Enable(OpenGL.GL_CLIP_PLANE0);
 44                 drawGrid(gl);
 45             }
 46             gl.PopMatrix();
 47 
 48             gl.Flush();
 49         }
 50 
 51         private void openGLControl_OpenGLInitialized(object sender, EventArgs e)
 52         {
 53             OpenGL gl = openGLControl.OpenGL;
 54             gl.ClearColor(0, 0, 0, 0);
 55         }
 56 
 57         private void openGLControl_Resized(object sender, EventArgs e)
 58         {
 59 
 60             OpenGL gl = openGLControl.OpenGL;
 61             gl.MatrixMode(OpenGL.GL_PROJECTION);
 62             gl.LoadIdentity();
 63             gl.Perspective(60.0f, (double)Width / (double)Height,1, 100.0);
 64             gl.LookAt(0, 5, 10, 0, 0, 0, 0, 1, 0);
 65             gl.MatrixMode(OpenGL.GL_MODELVIEW);
 66         }
 67 
 68         void drawSphere(OpenGL gl)
 69         {
 70             //画二次曲面球体绘制过程
 71             gl.PushMatrix();
 72             gl.Translate(2f, 1f, 2f);
 73 
 74             //绘制二次曲面
 75             var sphere = gl.NewQuadric();
 76             //设置二次却面绘制风格。gluQuadricDrawStyle。一般都是选用GLU_FILL风格,采用多边形来模拟
 77             gl.QuadricDrawStyle(sphere, OpenGL.GLU_LINE);
 78             //设置法线风格。gluQuadricNormals。一般都是使用GLU_SMOOTH风格,对每个顶点都计算法线向量,是默认方式
 79             gl.QuadricNormals(sphere, OpenGL.GLU_SMOOTH);
 80             //设置二次曲面的绘制方向。gluQuadricOrientation。一般使用GLU_OUTSIDE, 按照所有的法线都指向外面的方式绘制。是默认方式
 81             gl.QuadricOrientation(sphere, (int)OpenGL.GLU_OUTSIDE);
 82             //设置纹理。gluQuadricTexture。设置是否自动计算纹理。默认是GLU_FALSE。当需要使用纹理时应修改为GLU_TRUE.
 83             gl.QuadricTexture(sphere, (int)OpenGL.GLU_FALSE);
 84 
 85             gl.Sphere(sphere, 3f, 20, 10);
 86             gl.DeleteQuadric(sphere);
 87             gl.PopMatrix();
 88         }
 89 
 90         void drawGrid(OpenGL gl)
 91         {
 92             //绘制栅格线过程
 93             gl.PushAttrib(OpenGL.GL_CURRENT_BIT);  //保存当前属性
 94             gl.PushMatrix();                        //压入堆栈
 95             gl.Translate(0f, 0f, 0f);
 96             gl.Color(0f, 0f, 1f);
 97 
 98             //在X,Z平面上绘制网格
 99             for (float i = -50; i <= 50; i  = 1)
100             {
101                 //绘制线
102                 gl.Begin(OpenGL.GL_LINES);
103                 //X轴方向
104                 gl.Vertex(-50f, 0f, i);
105                 gl.Vertex(50f, 0f, i);
106                 //Z轴方向 
107                 gl.Vertex(i, 0f, -50f);
108                 gl.Vertex(i, 0f, 50f);
109                 gl.End();
110             }
111             gl.PopMatrix();
112             gl.PopAttrib();
113         }
114 
115 
116 
117     }
118 }

 

 上边代码中,作者把42,43行有关裁剪的代码注释了, 那时运营的效果与利益如下图:

 产生二个圆球和一个栅格面, 笔者的裁剪会对那五个目的都发生作用, 那样有助于观看效果.

全球彩票注册平台 3

 

启用第42,43行, 运营后, 裁剪产生效能, 效果是上面那样的:

左半平面被去掉了. 因为裁剪会对气象中保有目的发生成效, 由此栅格面也被连累了.

全球彩票注册平台 4

 

 要是您想移动裁剪面包车型大巴位置, 你须求对球体做几何调换. 更动上边那行代码的参数就可以了.

gl.Translate(-2, -2, -3);

而是, 一般的话, 场景中的对象固定好地点然后, 是不能够做几何转换的. 假如即不做几何转换, 又想裁剪该如何是好吧?

临时小编也不通晓怎么做! 要是之后知道如何做笔者会在那把这么些知识点补全了. (假使您掌握,感激回本贴教下笔者!)

 

上面是45度方向上的裁剪. 放肆角度的剪裁貌视是不得以的.

全球彩票注册平台 5

【全球彩票注册平台】裁剪变换,SharpGL学习笔记。 

 本节源代码下载

 

) 裁剪转变,sharpgl学习笔记 在OpenGL中,除了视景体定义的6个裁剪平面(上下左右左右)外, 客户还足以定义贰个要么八个附加...

 

 

SharpGL学习笔记(七) OpenGL的转移总计,sharpgl学习笔记

小编接触OpenGL最大的相当多不就是: 日常调节和测验一份代码时, 荧屏铜绿一片, 也不清楚结果对不对,不明了如何是好!

那实质上就是有关OpenGL"转换"的基础概念未有调控好, 以至于对"将三个维度体正确的显示在显示器上点名地方"那样的操作都力所比不上完结.

 

OpenGL转换满含计算机图形学中最核心的三个维度调换,即几何转换、投影转换、裁剪转变、视口调换,以及针对OpenGL的出格转换概念领悟和用法,如相机模拟、矩阵仓库等,那个基础是发端真的走进三个维度世界无法绕过的基础.

进而作者在前边花了5篇的篇幅详尽讲解了那么些基础概念.

 

SharpGL学习笔记(二) 模型调换(几何转变)

SharpGL学习笔记(三) 投影转变和视点调换

SharpGL学习笔记(四) 正射投影

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

SharpGL学习笔记(六) 裁剪转变

 

唯独这么些概念是零星的, 你或者感到在实质上采纳中无法把它们有机的串联起来吧? 本节尽管想把这个基础知识点遵照使用时的逻辑关系理清楚, 并且要通透到底搞掌握那些功能之间的关系.

 

我们拿日常行使相机的例子打个假如:

事实上,从三个维度空间到二维平面,就就如用相机拍戏一样,常常都要经历以下几个步骤 (括号内表示的是相应的图形学概念):
第一步,将相机置于三角架上,让它对准三个维度景物(视点转变,Viewing Transformation)。
其次步,将三个维度物体放在适当的位置(模型转换(几何转变),Modeling Transformation)。
其三步,选用相机镜头并调焦,使三维物体投影在二维胶片上(投影转变,Projection Transformation)。
第四步,决定二维像片的大大小小(视口转变,Viewport Transformation)。
诸如此比,多少个三个维度空间里的实体就足以用相应的二维平面物体表示了,也就会在二维的Computer荧屏上科学展现了。

下边包车型地铁暗暗表示图,表明了上边包车型客车意趣。

全球彩票注册平台 6

 

三个维度图形世界中的还恐怕有多少个例外坐标系的定义。
显示空间维度图形的那个坐标系称为世界坐标系
要在图纸显示屏上显得,那即就要图片荧屏显示器上定义多个二维直角坐标系,那些坐标系称为显示器坐标系。这么些坐标系坐标轴的来头普通取成平行于显示屏的边缘,坐标原点取在左上角,长度单位常取成叁个象素的长短,大小可以是整型数。
为了使三个维度休能在二维显示屏上出示出来,必得求经过投影进行降维管理。投影的艺术有三种,即正射投影和透视投影
正射投影和透视投影概念三个三个维度视景体(Viewing Volume)。正射投影时一般是贰个长方体的视景体,透视投影时一般是贰个台式似的视景体。唯有视景体内的实体能被投影在体现平面上,其余部分则不可能。

在写生3D图形的显示器窗口内足以定义壹个矩形,称为视口Viewport),视景体投歌后的图纸就在视口内展现,三维图形依据视口转变后, 即能够来得满屏,也能够只呈现一部分。
为了适应物理设备坐标和视口所在坐标的歧异,还要作一适应物理坐标的改换。这一个坐标系称为物理设备坐标系

总局方所述,三个维度图形的来得流程应如下图所示。

全球彩票注册平台 7

 

地点装有那些手续,在OpenGL中,必要或多或少条语句才具不负义务。但在3dsmax中,只是选取转变工具,摄像机工具, 那七个工具就足以全方位完了了。

里面“移动,旋转,缩放”工具假使对三维模型做操作就是模型转换

调理录像飞机地方置与指标点,还会有旋转摄像机正是在做 视点调换

顶视图,前视图,左视图, 是三个 正射投影视图, 而Camera01视图是几个透视投影视图, 并且那多个视图加上Camera01视图共同是八个视口

录制机工具中的一个意义选项“手工业剪切”, 便是剪裁转换

顶,前,左,Camera01八个视图中的横竖黑线正是世界坐标系的XY轴, 而荧屏坐标系的原点是在种种视图左上角,水平方向是X,垂直方向是Y。

全球彩票注册平台 8

 

 

倘诺仍旧有质疑,可以还原来贴,小编再加以补充。

 原创文章 : 

 

) OpenGL的转移总计,sharpgl学习笔记 我接触OpenGL最大的不方正是: 平时调节和测验一份代码时, 显示屏灰色一片, 也不精通结果对不对...

作者接触OpenGL最大的不正是: 日常调节和测验一份代码时, 显示屏白色一片, 也不驾驭结果对不对,不掌握如何是好!

在OpenGL中,除了视景体定义的6个裁剪平面(上下左右上下)外, 顾客还足以定义二个要么多个附加的剪裁平面,以去掉场景中无关的目的.

在OpenGL中,除了视景体定义的6个裁剪平面(上下左右光景)外, 客户还足以定义一个要么四个附加的剪裁平面,以去掉场景中毫无干系的指标.

这实在即是关于OpenGL"转变"的功底概念未有调整好, 以致于对"将三维体正确的显得在显示器上点名位置"那样的操作都没有办法儿完结.

叠加平面裁剪函数原型如下:

叠合平面裁剪函数原型如下:

 

ClipPlane(OpenGL.GL_CLIP_PLANEi, double[] equation);

ClipPlane(OpenGL.GL_CLIP_PLANEi, double[] equation);

OpenGL转变包蕴计算机图形学中最基本的三个维度变换,即几何转变、投影调换、裁剪转变、视口转换,以及针对OpenGL的分裂平时调换概念精通和用法,如相机模拟、矩阵仓库等,这个基础是从头确实走进三维世界不能绕过的基础.

equation是三个具备4个周到的数组, 它定义二个裁剪平面。equation参数指向平面方程Ax By Cz D = 0的4个周全。

equation是二个兼有4个周密的数组, 它定义叁个裁剪平面。equation参数指向平面方程Ax By Cz D = 0的4个周密。

故而作者在前边花了5篇的字数详细批注了这么些基础概念.

equation=(0,-1,0,0),前四个参数(0,-1,0)可以清楚为法线向下,独有向下的,即Y<0的技能展现,最终二个参数0表示从z=0平面起头。这样正是裁剪掉上半平面。

equation=(0,-1,0,0),前八个参数(0,-1,0)能够精通为法线向下,独有向下的,即Y<0的本领显示,最终三个参数0表示从z=0平面初叶。那样就是裁剪掉上半平面。

 

相应的equation=(0,1,0,0)表示裁剪掉下半平面,

相应的equation=(0,1,0,0)表示裁剪掉下半平面,

SharpGL学习笔记(二) 模型转换(几何调换)

equation=(1,0,0,0)表示裁剪掉左半平面,

equation=(1,0,0,0)表示裁剪掉左半平面,

SharpGL学习笔记(三) 投影调换和视点调换

equation=(-1,0,0,0)表示裁剪掉右半平面,

equation=(-1,0,0,0)表示裁剪掉右半平面,

SharpGL学习笔记(四) 正射投影

本文由全球彩票平台发布于全球彩票注册平台编程,转载请注明出处:【全球彩票注册平台】裁剪变换,SharpGL学习笔记

TAG标签: 全球彩票平台
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。