计算机图形学(3.1)——编码裁剪算法实现

本文介绍了二维图形裁剪的基本原理,并详细阐述了Cohen-Sutherland直线裁剪算法。通过VC++结合OpenGL,实现了在屏幕上的封闭矩形内裁剪任意直线的功能。读者将学习到如何进行裁剪编码、处理线段与边界相交的情况,并查看程序的运行示例。
摘要由CSDN通过智能技术生成

这是一次计算机图形学实验的报告

1. 实验目的

了解二维图形裁剪的原理(点的裁剪、直线的裁剪、多边形的裁剪),利用VC+OpenGL实现直线的裁剪算法。

2. 实验内容

1) 理解直线裁剪的原理(Cohen-Surtherland算法、梁友栋算法)

2) 利用VC+OpenGL实现直线的编码裁剪算法,在屏幕上用一个封闭矩形裁剪任意一条直线。

3) 调试、编译、修改程序。

4) 尝试实现梁友栋裁剪算法。

3. 实验原理

编码裁剪算法中,为了快速判断一条直线段与矩形窗口的位置关系,采用了如图A.4所示的空间划分和编码方案。

A.4 裁剪编码

裁剪一条线段时,先求出两端点所在的区号code1和code2,若code1 = 0且code2 = 0,则说明线段的两个端点均在窗口内,那么整条线段必在窗口内,应取之;若code1和code2经按位与运算的结果不为0,则说明两个端点同在窗口的上方、下方、左方或右方。这种情况下,对线段的处理是弃之。如果上述两种条件都不成立,则按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段完全在窗口外,可弃之,对另一段则重复上述处理。

3. 实验代码

(1)示例程序:

// CG_4_编码裁剪算法.cpp : 定义控制台应用程序的入口点。

//

 

#include "stdafx.h"

#include <stdio.h>

#include <stdlib.h>

#include <GL/glut.h>

 

#define LEFT_EDGE 1

#define RIGHT_EDGE 2

#define BOTTOM_EDGE 4

#define TOP_EDGE 8

 

void LineGL(int x0,int y0,int x1,int y1)

{

glBegin(GL_LINES);

glColor3f(1.0f,0.0f,0.0f);  glVertex2f(x0,y0);

glColor3f(0.0f,1.0f,0.0f);  glVertex2f(x1,y1);

glEnd();

}

 

struct Rectangle

{

float xmin,xmax,ymin,ymax;

};

 

Rectangle rect;

int x0,y0,x1,y1;

 

int

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值