资源简介

C/C++基于openGl的画直线和三角形光栅化源码加实验报告 实现鼠标选点操作 完整源码 加 完整实验报告

资源截图

代码片段和文件信息


#include 
#include 
#include 
using namespace std;

int x0y0x1y1x2y2dxy;
float m=0.0;
int mouse=0;
int number=0;
class point
{
public:
int x0;
int y0;
int x1;
int y1;
};
class triangle
{
public:
int x0;
int y0;
int x1;
int y1;
int x2;
int y2;
};
point sz;
triangle sz1;

//int number=0;//记录线的条数
//画点
void drawpoint(int xint y)
{  
glBegin(GL_POINTS);
    glVertex2d(xy); 
    glEnd();
}
//0void drawline1(int xint yint d)
{   y=y0;
for( x = x0; x < x1; x++ ) {
   drawpoint( x y );

    if( d < 0 ) {
y = y + 1;
d = d + 2 * (x1-x0) + 2 * (y0-y1);
}
else {
d = d + 2 * ( y0 - y1 );
}
}
}
//m>1
void drawline2(int xint yint d)
{   x=x0;
for( y = y0; y < y1; y++ ) {
   drawpoint( x y );

    if( d < 0 ) {
x = x + 1;

d = d + 2 * (y1-y0) + 2 * (x0-x1);
}
else {
d = d + 2 * ( x0 - x1 );
}
}
}
//-1<=m<0
void drawline3(int xint yint d)
{
   y=y0;
for( x = x0; x > x1; x--) 
{
   drawpoint( x y );

    if( d < 0 ) {
y = y + 1;
d = d + 2 * (x0-x1) + 2 * (y0-y1);
}
else {
d = d + 2 * ( y0 - y1 );
}
}
}
//m<-1
void drawline4(int xint yint d)
{  x=x0;
for( y = y0; y < y1; y++ ) {
   
drawpoint( x y );

    if( d < 0 ) {
x = x - 1;
d = d+ 2*(y1-y0)+ 2*(x1-x0);
}
else {
d = d + 2*(x1-x0);
 }
}
}
//y0=y1 画横线
void drawline5(int xint yint d)
{    if( x0 > x1 ) {
int temp = x0;
x0 = x1;
x1 = temp;
}
y=y0;
 for(x=x0;x drawpoint( x y );

}
//x0=x1 画竖线
void drawline6(int xint yint d)
{    if( y0 > y1 ) {
int temp = y0;
y0 = y1;
y1 = temp;
}
x=x0;
 for(y=y0;y drawpoint( x y );

}
//整合画直线函数
void drawline(int xint yint xxint yy)
{  
glColor3f (1.0 1.0 1.0);
x0=x;y0=y;x1=xx;y1=yy;
int temp;
if( y0 > y1 ) {
temp = y0;
y0 = y1;
y1 = temp;

temp = x0;
x0 = x1;
x1 = temp;

}
   d = 2 * ( y1 - y0 - ( x1 - x0 ) );
    m=(float)(y1-y0)/(x1-x0);
if(x0==x1)
drawline6(xy d);
else if(y0==y1)
        drawline5( x y d);
else 
if(m>1)
         drawline2( x y d);
else 
if (m>0)
drawline1( x y d);
else
if (m>-1)
drawline3( x y d);
else
drawline4(x y d);
}




//画三角形

int find(int a[]int countint b)
{
int iflag;
flag=a[0];
if(b==0)
{
for(i=0;i {
if(a[i] flag=a[i];
}
 
}
if(b==1)
{
for(i=0;i {
if(a[i]>flag)
flag=a[i];
}
 
}
return flag;

}
void drawtriangle(int x0int y0int x1int y1int x2int y2)
{
//找到最大最小横纵坐标
int a[3]b[3];
    a[0]=x0;
a[1]=x1;
a[2]=x2;
b[0]=y0;
b[1]=y1;
b[2]=y2;
int xMinxMaxyMinyMax;
xMin=find(a30);
xMax=find(a31);
yMin=find(b30);
yMax=find(b31);

//计算常量
float ABC;
int f01f02;
f01=(y0-y1)*x2+(x1-x0)*y2+x0*y1-x1*y0;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-10-11 15:20  基于openGl的画直线和三角形 光栅化源码加实验报告\
     文件        6543  2011-09-30 17:14  基于openGl的画直线和三角形 光栅化源码加实验报告\Simple.cpp
     文件      139264  2011-09-30 17:18  基于openGl的画直线和三角形 光栅化源码加实验报告\实验二  直线和三角形光栅化算法报告.doc

评论

共有 条评论