计算机图形学(二)

时间:2023-01-09 15:43:47

输出图元

图元(primitive):图形软件包中用来描述各种图形元素的函数
屏幕坐标:扫描行号y0,列号x

setPixel (x,y)//设置(x,y)处的帧缓存
getPixel (x,y)//获得(x,y,color)处的帧缓存的颜色值

OpenGL画点函数

glBegin (GL_POINTS);//指定要显示的输出图元类型,GL_POINTS点的绘制
glVertex* ();//描述任意一点位置,*表示有后缀(3f)
glEnd();

点可以是数,矩阵,struct

OpenGL画线函数

GL_LINES//两端点一对,线段
GL_LINE_STRIP//折线段,从第一个端点开始,到最后一个端点结束,中间为经过的点
GL_LINE_LOOP//封闭折线,最后一个端点与第一个端点连接

曲面

1.多边形填充

  • 1.1多边形分类
    凸多边形:所有内角小于180度
    凹多边形
    退化多边形:共线顶点,重叠顶点(线段:所有顶点共线)

OpenGL要求所有填充多边形都为凸多边形

凹多边形识别方法

  1. 计算连续两边向量叉积,有负则为凹多边形。
  2. 凹多边形某些边的延长线会与多边形边界相交

2.多边形分割

2.1向量法
凹多边形分割为一堆凸多边形
假定所有多边形均在xy平面上
逆时针方向处理边向量,若有叉积为负,多边形可按叉积中第一边向量的直线进行切割。

2.2旋转法
沿多边形的边的逆时针方向,逐一将顶点Vk移动到坐标原点,顺时针旋转多边形,使下一顶点Vk+1落在x轴上,如果下一个顶点Vk+2落在x轴下方,则为凹多边形,利用x轴将多边形分割为两个新多边形。

2.3将凸多边形分割为三角形集

3.内外测试
3.1奇偶规则
从p开始向坐标范围以外的远点画一条射线,统计该射线与边的交点,若相交边数为奇,则为内部点。

3.2 非零环绕数
所有的边按照统一的方向统计有多少条是从同一侧面通过这条射线的,又有多少条是从射线另一侧通过的,之后相减,如果结果是零,表示之前任意选择的点在图形外部,其他一切非零数表示在内部

  • 射线与边叉积看z轴坐标正负
  • 射线与边点积看正负

    非零环绕数应用:平面图形分为不相连区域,字符,拼接多边形,同心圆

3.3 布尔操作
使用布尔操作指定填充区域为两区域的混合,
先为每一区域定义简单的无相交的边界,然后如果考虑每一边界的方向为逆时针,那么两区域的并包含那些使环绕数为正的点
计算机图形学(二)

类似地,逆时针边界的两区域的交包含那些使环绕数大于1的点
计算机图形学(二)
要建立两区域差的填充区,如A-B,我们可以引入逆时针边界的A和顺时针边界的B。其差区域即为那些使环绕数为正的点。
计算机图形学(二)