OpenGL画点函数
要描述一个点的几何要素,我们只需在世界坐标系中指定一个位置。然后该坐标位置和场景中 已有的其他几何描述一起传递给观察函数。除非指定其他属性值,OpenGL图元按默认的大小和颜 色来显示。默认的图元颜色是白色,而默认的点大小等于一个屏幕像素大小。 使用下面的OpenGL函数可指定一个点位置的坐标值:
OpenGL中的坐标位置可以有二维、三维或四维。g1Vertex的后缀为2、3或4表示其坐标位置 的维数。四维描述意味着齐次坐标(homogeneous-coordinate)表示,其中的齐次参数h(第四维坐 标)是笛卡儿坐标值的比例因子。齐次坐标表示对利用矩阵形式表达变换操作很有用,第4章将对 其进行详细讨论。由于OpenGL将二维作为三维的特殊情况来处理,任意(x, y)坐标描述等同于h =1 时的(x, y, 0) 。
我们需要指出在坐标的数值描述中使用什么数据结构。这由glVertex函数的第二个后缀来完 成。用于指定数值数据类型的后缀是:i(整数)、s(短整数)、f(浮点数)和d(双精度浮点数)。 最后,glVertex中可以使用显式的坐标值或引人矩阵形式坐标位置的单个变量。如果使用矩阵形式 坐标位置,则需要第三个后缀码:V(“向量”)。
在下面的例子中,在斜率为2的直线上绘出了三个等距离的点。坐标用整数对 给出。
换一种方法,我们可以将前面这些点的坐标值以矩阵形式描述:
我们还可以为各种维数中描述的点位置定义c++类或结构(struct)。例如
有了这一类定义,我们可以使用下列语句描述一个二维世界的坐标点位置:
然后我们可以在C++过程中使用OpenGL画点函数来实现setPixel命令。
要描述一个点的几何要素,我们只需在世界坐标系中指定一个位置。然后该坐标位置和场景中 已有的其他几何描述一起传递给观察函数。除非指定其他属性值,OpenGL图元按默认的大小和颜 色来显示。默认的图元颜色是白色,而默认的点大小等于一个屏幕像素大小。 使用下面的OpenGL函数可指定一个点位置的坐标值:
glVertex*();
这里的星号(*)表示该函数要有后缀码。这些后缀码用来指明空间尺寸、用做坐标值的数据类型
和可能的向量形式坐标描述。在glBegin函数和glEnd函数之间必须有一个glVertex函数。glBegin
函数的变量用来指定要显示的输出图元的类型,而glEnd函数没有变量。对于点的绘制,glBegin函
数的变量是符号常量GL_POINTS。因此,一个点位置的OpenGL描述形式是
glBegin(GL_POINTS);
gl_Vertex*();
glEnd();
尽管术语顶点(vertex)严格地代表一个多边形的“角”点、一个角两边的交点、椭圆和其主轴的
交点或几何结构中其他类似的坐标位置,OpenGL中的glVertex函数可用于描述任意一点的位置。
这样,使用一个简单的函数来描述点、线段和多边形,而更多地使用多边形面片来描述场景对象。
OpenGL中的坐标位置可以有二维、三维或四维。g1Vertex的后缀为2、3或4表示其坐标位置 的维数。四维描述意味着齐次坐标(homogeneous-coordinate)表示,其中的齐次参数h(第四维坐 标)是笛卡儿坐标值的比例因子。齐次坐标表示对利用矩阵形式表达变换操作很有用,第4章将对 其进行详细讨论。由于OpenGL将二维作为三维的特殊情况来处理,任意(x, y)坐标描述等同于h =1 时的(x, y, 0) 。
我们需要指出在坐标的数值描述中使用什么数据结构。这由glVertex函数的第二个后缀来完 成。用于指定数值数据类型的后缀是:i(整数)、s(短整数)、f(浮点数)和d(双精度浮点数)。 最后,glVertex中可以使用显式的坐标值或引人矩阵形式坐标位置的单个变量。如果使用矩阵形式 坐标位置,则需要第三个后缀码:V(“向量”)。
在下面的例子中,在斜率为2的直线上绘出了三个等距离的点。坐标用整数对 给出。
glBegin (GL_POINTS);
glVertex2i(50,100);
glVertex2i(75,150);
glVertex2i(100,200);
glEnd();
换一种方法,我们可以将前面这些点的坐标值以矩阵形式描述:
int pointl []={50,100};
int point2 []={75,150};
int point3 []={100,200};
且调用OpenGL函数来绘出这三个点:
glBegin(GL_POINTS);
glVertex2iv(pointl);
glVertex2iv(point2);
glVertex2iv(point3);
glEnd();
下面是在三维世界坐标系中描述两个点位置的例子。这里按显式浮点数方式给出坐标。
glBegin(GL_POINTS);
glVertex3f(-78.05,909.72,14.60);
glVertex3f(261.91,-5200.67,188.33);
glEnd();
我们还可以为各种维数中描述的点位置定义c++类或结构(struct)。例如
class wcPt2D{
public:
CLfloat x,y;
};
有了这一类定义,我们可以使用下列语句描述一个二维世界的坐标点位置:
wcPt2D pointPos;
pointPos.x = 120.75;
pointPos.y = 45.30;
glBegin(GL_POINTS);
glVertex2f(pointPosx,pointPos.y);
glEnd();
然后我们可以在C++过程中使用OpenGL画点函数来实现setPixel命令。