C语言实现zbuffer消隐算法,计算机图形学考试题.doc

一 请给出全象限整型Bresenham直线段生成算法的C语言描述。(20分)

二 构造空间变换T,使过原点的任意轴(A,B,C)与Y轴正向对齐。

变换次序为先绕X轴顺时针旋转,再绕Z轴逆时针旋转。 (20分)

三 简述画家消隐算法的基本原理,并给出处理流程框图。 (20分)

四 已知二维空间窗口为(Wleft, Wbotton)---(Wright, Wtop), 空间裁剪采用端点编码

方式实现,请给出您的端点编码设计方案及空间任意点(x,y)的编码C函数:

int pCode(int x, int y) 描述。

假设已知直线段P1P2的两端点编码分别为P1code和P2code,请问直线段

完全可见的充要条件是什么?完全不可见的充分条件是什么?部分可见的

分条件又是什么?并给出相应的C描述。 (20分)

五 已知由空间两特征多边形P1(0,0,0), P2(2,2,-2), P3(2,-1,-1), P4(4,0,0)和

Q1(4,0,0), Q2(6,-2,1), Q3(8,-3,2), Q4(10,0,1)确定两段三次Bezier曲线。

请给出两段曲线在分段点P4(Q1)处达到G1连续的解析条件。 (20分)

答案:

一、void Bline(int x1, int y1, int x2, int y2)

{

int x, y, dx, dy, temp, xSign, ySign, interchange;

interchange = 0;

x = x1; y = y1;

dx = abs(x2 – x1);

dy = abs(y2 – y1);

xSign = (x2 > x1) ? 1 : -1;

ySign = (y2 > y1) ? 1 : -1;

if (dy > dx) {

interchange = 1;

temp = dx; dx = dy; dy = temp; }

e = 2*dy – dx;

for ( i = 0; i < dx; i++) {

putpixel(x, y, 15);

if (e > 0 ) {

if (interchange) x += xSign;

else y += ySign;

e = e – 2*dx;

}

if (interchange) y += ySign;

else x += xSign;

e = e + 2*dy;

}

}

二、

1 0 0 0 V A 0 0

T1 = 0 B/V -C/V 0 T2 = -A V 0 0

0 C/V B/V 0 0 0 1 0

0 0 0 1 0 0 0 1

V =

三、画家消隐算法的基本原理: 如同画家绘画一样,从远景开始逐步绘制到近景。这样后绘的近景部分就会覆盖先绘的远景部分,达到消隐的目的。

处理流程框图:

两三角形排序开始

两三角形排序

开始

收集可见面 XY极大 Y

收集可见面

极小检验

三角剖分

三角剖分

排序 Z 极大 Y

排序

三角形排序 极小检验

三角形排序

N Y

输出绘制 相交边检验

输出绘制

交点处比较深度 结束 三角形

交点处比较深度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值