【计算机图形学】实验报告2OpenGL图元的光栅化

这篇实验报告详细介绍了使用OpenGL实现图元的光栅化,包括直线的Bresenham算法,以及用中点算法绘制圆和抛物线。在画圆时遇到OpenGL库不全的问题,画抛物线时则发现算法中的逻辑错误导致图像偏差。
摘要由CSDN通过智能技术生成

1、程序实现图元直线的bresenham(斜率绝对值小于1)算法。
2、用中点算法实现圆和抛物线的光栅化。圆的方程:x2+y2=r2(r=20),抛物线方程x=y2-5,在区间=<x<=10。

1、画直线代码如下:

#include <windows.h>
#include <GL/glut.h>
#include <math.h>
#define PI 3.14159265359
int width, height;
void SetPixel(int x, int y)		// 填充一个像素
{
   
	glBegin(GL_POINTS);
	glVertex2i(x, y);
	glEnd();
}
// Bresenham line algorithm
void MyLine(int xs, int ys, int xe, int ye)
{
   
	int x = xs;
	int y = ys;
	int dx = abs(xe - xs);
	int dy = abs(ye - ys);
	int s1 = xe > xs ? 1 : -1;
	int s2 = ye > ys ? 1 : -1;
	bool interchange = false;	// 默认不互换 dx、dy
	if (dy > dx)				// 当斜率大于 1 时,dx、dy 互换
	{
   
		int temp = dx;
		dx = dy;
		dy = temp;
		interchange = true;
	}
	int e = 2 * dy - dx;
	for (int i = 0; i <= dx; i++)
	{
   
		SetPixel(x, y);	// SetPixel
		if (e >= 0)
		{
   
			if (!interchange)		// 当斜率 < 1 时,选取上下象素点
				y += s2;
			else					// 当斜率 > 1 时,选取左右象素点
				x += s1;
			e -= 2 * dx;
		}
		if (!interchange)
			x += s1;				// 当斜率 < 1 时,选取 x 为步长
		else
			y += s2;				// 当斜率 > 1 时,选取 y 为步长
		e += 2 * dy;
	}
}
// Initialization function
void init(void)
{
   
	glClearColor(0.0, 0.0, 0.0, 0.0);
}
// Display callback function
void display(void)
{
   
	int i, x0, y0, x, y;
	double a;
	glClear(GL_COLOR_BUFFER_BIT);
	x0 = width / 2;
	y0 = height / 2;
	glColor3f(1.0, 1.0, 1.0);
	// Draw lines
	for (i = -45; i <= 45; i += 15)
	{
   
		a = (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值