OpenGL学习(1)-基础知识(2)

来源:互联网 发布:数学必修三编程软件 编辑:程序博客网 时间:2024/06/03 14:26

3D编程的基本原则


OpenGL是一种 底层渲染API,我们需要自己通过载入三角形,应用必要的变换和正确的纹理、着色器并在必要时应用混合模式来组合一个模型,能进行大量底层控制。

创建用于绘图的窗口时,必须指定希望使用的坐标系统以及指定的坐标如何映射到实际的屏幕像素。


坐标系统


2D笛卡尔坐标系

一个x坐标,一个y坐标构成,x轴水平,y轴垂直,原点(Origin)为(0,0)。

绘图时,指定坐标系统,不同窗口映射模式可能会导致坐标的解释不一致。

x、y垂直相交定义一个xy平面-------任何坐标系统中,两条轴如果直角相交,它们就定义一个平面。


坐标裁剪

窗口是以像素为单位进行度量。

开始在窗口中绘制点、线和形状前,必须告诉OpenGL如何把指定的坐标对翻译为屏幕坐标,可以指定占据窗口的笛卡尔空间区域来完成,称为裁剪区域

二维空间,裁剪区域是窗口内部 最小和最大的x、y值,所定义到的区域;另一种方法是根据窗口指定原点位置。


可使用OpenGL函数或用于GDI绘图的windows函数来 上下反转或左右反转坐标系统。

Windows窗口的默认映射中,坐标y的值始终为正,并且从上而下递增,在自上而下绘制文本时非常有用,绘制图形不方便。


视口:把绘图坐标映射到窗口坐标

裁剪区域的宽高很少正好与窗口的宽高(像素单位)匹配。

坐标系统必须从 逻辑笛卡尔系统 映射到 物理屏幕像素坐标---------映射是通过一种叫 视口(VIewPort)的设置来指定。

视口就是窗口内部用于绘制裁剪区域的客户区域,简单地把裁剪区域映射到窗口的一个区域,视口可为整个窗口或部分窗口。


逻辑坐标系统的每个增量将与窗口物理坐标系统(像素)的两个增量匹配。


顶点:空间中的一个位置

绘制一个物体时,实际上用的一些更小的图元(Primitives)的形状来组成这个物体。

图元是一维或二维的实体或表面,如点、线、多边形。

3D空间中,把图元组合在一起创建3D物体,如一个三维立方体由6个二维正方形组成,每个正方形代表一个独立的面。

图元的每个角成为顶点(Vertex),这些顶点在3D空间中指定了一个特定的坐标,顶点是2D或3D空间中的一个坐标。


3D笛卡尔坐标

将2D坐标扩展到三维空间,增加深度分量,增加了z轴,垂直于xy平面,代表一条从屏幕中心朝向自己的直线。

左手坐标系:空间直角坐标系中,让左手拇指指向x轴正方向,食指指向y轴正方向,如果中指能指向z轴正方向,称为左手坐标系

 右手坐标系:空间直角坐标系中,让右手拇指指向x轴正方向,食指指向y轴正方向,如果中指能指向z轴正方向,称为左手坐标系


投影

三角法和矩阵操作将笛卡尔坐标翻译为可以在屏幕上绘图的二维坐标。

投影(Projection),用于创建几何图形的3D坐标将投影到一个2D表面(窗口背景)。

通过指定投影,可以指定在窗口中显示的视景体(Viewing Volume),并指定如何对它进行变换。

视景体:指成像景物所在空间的集合,是一个空间集合体,投影变换的目的就是定义一个视景体,使得视景体外的多余的部分裁减掉,最终图像只是视景体内的有关部分。


两种投影

正投影(Orthographic Projection),平行投影,需要指定一个正方形或长方形的视景体,视景体外的物体不会被绘制,所有实际大小相同的物体在屏幕上都具有相同大小,不管他们是远是近。正投影中指定 远、近、左、右、顶、底 裁剪平面来指定视景体,视景体内物体被投影到屏幕上。


透视投影(Perspective Projection),远处的物体看上去比近处小一些,它的视景体为平截头体(Frustum),靠近视景体前面的物体看上去接近原始大小,更逼真。