计算机图形学代码之三角形绘制

计算机图形学代码之三角形绘制(实验三)

使用软件vc++
代码是C语言的
此代码教程配合以下这本书的(版本升级也没有关系)书
此代码并不是课本上的思路,稍微取巧了。
思路讲解:
由于在平面上点 了3个点,3个点连成3条线,因此知道了3条直线的方程。
因为知道了方程,所以可以从一条直线出发(设为t1),从t1开始顺着t1出发,同时向其他1条线相连,使用已经现成的写直线的代码即可。
思路图讲解

#include "Line.h"
# include <math.h>
# include <stdio.h>
# include <stdlib.h>
void drawLineBresenham(int x1 ,int y1,int x2,int y2)//画直线

{
    glColor3f(0.0f,1.0f,0.0f);
    glBegin(GL_LINES);	
 
    glVertex2i(x1,y1);
	glVertex2i(x2,y2);

	glEnd();
	glFlush();
	
}

void fillTriangle(int x1,int y1,int x2,int y2,int x3,int y3)
{

   glColor3f(0.0f,0.0f,1.0f);
    glBegin(GL_LINES);	
    int i=0;
    double dk1,dk2,dk3; 
	int tx,ty;
    
	
		if(y1>=y2)//比较三个点的顺序,从下向上
		{
			tx=x2;
			x2=x1;
			x1=tx;
			
            ty=y2;
			y2=y1;
			y1=ty;
		}
		if(y1>=y3)
		{
			tx=x3;
			x3=x1;
			x1=tx;

			ty=y3;
			y3=y1;
			y1=ty;
		}
		if(y2>=y3) 
		{
            tx=x3;
			x3=x2;
			x2=tx;

			ty=y3;
			y3=y2;
			y2=ty;
		}

	dk1=(x2-x1)*1.0/(y2-y1);
	dk2=(x3-x2)*1.0/(y3-y2);
	dk3=(x3-x1)*1.0/(y3-y1);
    printf("x1:%d, y1:%d , dk1:%lf\n",x1,y1,dk1);
    printf("x2:%d, y2:%d , dk2:%lf\n",x2,y2,dk2);
	printf("x3:%d, y3:%d , dk3:%lf\n",x3,y3,dk3);
	double dx1,dx2,dx3,dy1,dy2,dy3;
	double dx4,dy4;
	  
		  int k;
             dx1=x1;dy1=y1;
			 dx2=x1;dy2=y1;
			 dx3=x2;dy3=y2;
			 dx4=x3;dy4=y3;
			for(;dy1<y2;dy1++,dy2++)
			{
                 drawLineBresenham(dx1, dy1, dx2, dy2);
				 dx2+=dk1;
				 dx1+=dk3;
			}
		  
			for(;dy3<=y3;dy1++,dy3++)
			{
                 drawLineBresenham(dx1, dy1, dx3, dy3);
				 dx3+=dk2;
				 dx1+=dk3;
			}
	glEnd();
	glFlush();
}

成果实现

发布了4 篇原创文章 · 获赞 0 · 访问量 510

猜你喜欢

转载自blog.csdn.net/weixin_43902812/article/details/99405461