直接上代码VS2015 C#编写
#include"stdafx.h"
#include <GL/glut.h>
#include <iostream>
#include <cmath>
//LML SPQ写于2021
void init()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
void midbr(int x0,int y0,int x1,int y1)
//算法条件:x1>x0,y1>y0,x1-x0>y1-y0,,斜率大于0小于1
//算法缺点:只能绘制斜率为正的直线
{
int a = y0 - y1, b = x1 - x0;
int d = 2 * a + b;
int x = x0, y = y0;
glVertex2i(x, y);
while (x <= x1) {
glVertex2i(x, y);
if (d < 0) {
d = d + 2 * (a + b);
y++;
}
else {
d += 2 * a;
}
x++;
}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);
glBegin(GL_POINTS);
midbr(90, 100, 100, 110);
midbr(90, 110, 100, 110);
midbr(80, 100, 90, 100);
midbr(80, 100, 90, 110);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Bresenham Draw Line");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Bresenham算法结果图:

直接用Opengl函数画直线:
//以下为函数画直线
#include"stdafx.h"
#include <GL/glut.h>
#include <iostream>
#include <cmath>
//测绘1803,李明路631801110312
void init()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex2i(100, 40);
glVertex2i(100, 90);
glVertex2i(100, 90);
glVertex2i(60, 90);
glVertex2i(60, 90);
glVertex2i(60, 40);
glVertex2i(60, 40);
glVertex2i(100, 40);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("LINE DARW");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
这篇博客展示了如何使用Bresenham算法和OpenGL的内置函数在C#环境下分别绘制直线。通过两个示例,作者详细解释了Bresenham算法的实现过程,并对比了直接使用OpenGL函数的画线方法。代码中包含了初始化设置、直线绘制函数及主程序,适合学习计算机图形学和OpenGL的读者参考。
2622

被折叠的 条评论
为什么被折叠?



