计算机图形学代码之三角形绘制(实验三)
使用软件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();
}
成果