資源簡介
完整的OPENGL的掃描線算法,基于VS2017開發(fā)。文件已經(jīng)打好,自己找個路徑放就行
代碼片段和文件信息
#include??
#include??
#include
#include?“GL/glut.h“
using?namespace?std;?
void?Pixelfill(GLint?xCoord?GLint?yCoord)
{
glColor3f(1.0f?0.0f?0.0f);//設(shè)定顏色為紅色
glPointSize(3.0);//點(diǎn)大小為3像素(減少生成時間)
glBegin(GL_POINTS);
glVertex2i(xCoord?yCoord);
glEnd();
glFlush();
}
//定義用于邊表ET和活動邊表AET的通用類Edge
class?Edge
{?
public:
int?ymax;
float?x;?
float?dx;?
Edge*?next;
};?//定義用于表示像素點(diǎn)坐標(biāo)的類Point
class?Point
{?
public:?
int?x;
int?y;?
Point(int?x?int?y)?
{?
this->x?=?x;
this->y?=?y;?
}
};?
/////////////////////請使用對應(yīng)Demo/////////////////////?
//窗體寬高
//Demo1?
//const?int?windowWidth?=?18;?
//const?int?windowHeight?=?12;?
//Demo2?
//const?int?windowWidth?=?180;?
//const?int?windowHeight?=?120;
//Demo3、Demo4、Demo5?
const?int?windowWidth?=?1800;
const?int?windowHeight?=?1200;?
//多邊形頂點(diǎn)?
//Demo1?
//vector?vertices?=?{?Point(2?5)?Point(2?10)?Point(9?6)?Point(16?11)?Point(16?4)?Point(12?2)?Point(7?2)?};?
//Demo2?
//vector?vertices?=?{?Point(20?50)?Point(20?100)?Point(90?60)?Point(160?110)?Point(160?40)?Point(120?20)?Point(70?20)?};?
//Demo3?多邊形?
//vector?vertices?=?{?Point(200?500)?Point(200?1000)?Point(900?600)?Point(1600?1100)?Point(1600?400)?Point(1200?200)?Point(700?200)?};
//Demo4?箭頭?
//vector?vertices?=?{?Point(395?887)?Point(479?998)?Point(1199?433)?Point(1101?867)?Point(1294?715)?Point(1417?171)?Point(857?163)?Point(668?314)?Point(1111?321)?};?
//Demo5?閃電?
vector?vertices?=?{?Point(566?970)?Point(685?1020)?Point(754?683)?Point(985?768)?Point(1037?481)?Point(1208?546)?Point(1233?179)?Point(1140?440)?Point(951?386)?Point(899?662)?Point(668?562)?};?
//邊表?
Edge?*ET[windowHeight];?
//活動邊表?
Edge?*AET;
void?init(void)
{?
glClearColor(1.0?1.0?1.0?0.0);?
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0?windowWidth?0.0?windowHeight);
}
void?polygonScan()?
{
//計算最高點(diǎn)的y坐標(biāo)?
int?maxY?=?0;?
for?(unsigned?int?i=0;?i {
if?(vertices[i].y?>?maxY)?
{
maxY?=?vertices[i].y;?
}?
}
//初始化ET和AET?
Edge?*pET[windowHeight];
for?(int?i=0;?i {
pET[i]?=?new?Edge();
pET[i]->next?=?nullptr;
}?
AET?=?new?Edge();
AET->next?=?nullptr;
//清空顯示窗口并設(shè)置畫點(diǎn)顏色為紅色?
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0?0.0?0.0);
glBegin(GL_POINTS);?
//建立邊表ET?
for?(int?i=0;?i {
//取出當(dāng)前點(diǎn)1前后相鄰的共4個點(diǎn),點(diǎn)1與點(diǎn)2的連線作為本次循環(huán)處理的邊,另外兩個點(diǎn)點(diǎn)0和點(diǎn)3用于計算奇點(diǎn)
int?x0?=?vertices[(i?-?1?+?vertices.size())?%?vertices.size()].x;?
int?x1?=?vertices[i].x;
int?x2?=?vertices[(i?+?1)?%?vertices.size()].x;?
int?x3?=?vertices[(i?+?2)?%?vertices.size()].x;?
int?y0?=?vertices[(i?-?1?+?vertices.size())?%?vertices.size()].y;
int?y1?=?vertices[i].y;?
int?y2?=?vertices[(i?+?1)?%?vertices.size()].y;?
int?y3?=?vertices[(i?+?2)?%?vertices.size()].y;?
//水平線直接舍棄?
if?(y1?==?y2)?continue;
//分別計算下端點(diǎn)y坐標(biāo)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????25600??2018-10-18?18:08??掃描線填充\.vs\掃描線填充\v15\.suo
?????文件???37117952??2018-10-18?18:08??掃描線填充\.vs\掃描線填充\v15\Browse.VC.db
?????文件???73203712??2018-10-18?18:06??掃描線填充\.vs\掃描線填充\v15\ipch\AutoPCH\61737355d0251ab8\MAIN.ipch
?????文件??????84480??2018-10-18?18:06??掃描線填充\Debug\掃描線填充.exe
?????文件?????492552??2018-10-18?18:06??掃描線填充\Debug\掃描線填充.ilk
?????文件?????798720??2018-10-18?18:06??掃描線填充\Debug\掃描線填充.pdb
?????文件?????176298??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\main.obj
?????文件?????363520??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\vc141.idb
?????文件?????454656??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\vc141.pdb
?????文件????????243??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.log
?????文件????????664??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog\CL.command.1.tlog
?????文件??????40776??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog\CL.read.1.tlog
?????文件????????444??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog\CL.write.1.tlog
?????文件???????1094??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog\li
?????文件???????3908??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog\li
?????文件????????422??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog\li
?????文件????????219??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog\掃描線填充.lastbuildstate
?????文件???????5346??2018-10-18?18:06??掃描線填充\掃描線填充\main.cpp
?????文件???????5945??2018-10-17?15:58??掃描線填充\掃描線填充\掃描線填充.vcxproj
?????文件????????949??2018-10-17?15:58??掃描線填充\掃描線填充\掃描線填充.vcxproj.filters
?????文件????????165??2018-10-17?15:45??掃描線填充\掃描線填充\掃描線填充.vcxproj.user
?????文件???????1459??2018-10-17?15:45??掃描線填充\掃描線填充.sln
?????目錄??????????0??2018-10-18?18:05??掃描線填充\.vs\掃描線填充\v15\ipch\AutoPCH\61737355d0251ab8
?????目錄??????????0??2018-10-17?15:46??掃描線填充\.vs\掃描線填充\v15\ipch\AutoPCH
?????目錄??????????0??2018-10-17?15:46??掃描線填充\.vs\掃描線填充\v15\ipch
?????目錄??????????0??2018-10-18?18:08??掃描線填充\.vs\掃描線填充\v15
?????目錄??????????0??2018-10-18?18:06??掃描線填充\掃描線填充\Debug\掃描線填充.tlog
?????目錄??????????0??2018-10-17?15:45??掃描線填充\.vs\掃描線填充
?????目錄??????????0??2018-10-18?18:06??掃描線填充\掃描線填充\Debug
????...D.H.?????????0??2018-10-17?15:45??掃描線填充\.vs
............此處省略6個文件信息
評論
共有 條評論