コンピュータグラフィックスコードの三角形の描画(実験3)
ソフトウェアのvc ++
コードの使用はC言語です。
このコードチュートリアルは次の本で使用されています(バージョンのアップグレードは重要ではありません)。
このコードは教科書のアイデアではありません。少し注意が必要です。
考え方:
3つの点が平面上でクリックされ、3つの点が3つの線に接続されるため、3つの直線の方程式がわかります。
方程式がわかっているため、直線(t1に設定)から開始し、t1から開始してt1をたどり、同時に他のラインに接続できます。既存のコードを使用して直線を記述します。
#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();
}
結果