コンピューターグラフィックスコードの三角形の描画

コンピュータグラフィックスコードの三角形の描画(実験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();
}

結果達成する

オリジナルの記事を4件公開 Likes0 訪問数510

おすすめ

転載: blog.csdn.net/weixin_43902812/article/details/99405461