• 大小: 20.23MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-06
  • 语言: 其他
  • 标签: opengl  

资源简介

完整的OPENGL的扫描线算法,基于VS2017开发。文件已经打好,自己找个路径放就行

资源截图

代码片段和文件信息

#include  
#include  
#include
#include “GL/glut.h“
using namespace std; 

void Pixelfill(GLint xCoord GLint yCoord)
{
glColor3f(1.0f 0.0f 0.0f);//设定颜色为红色
glPointSize(3.0);//点大小为3像素(减少生成时间)
glBegin(GL_POINTS);
glVertex2i(xCoord yCoord);
glEnd();
glFlush();
}
//定义用于边表ET和活动边表AET的通用类Edge
class Edge

public:
int ymax;
float x; 
float dx; 
Edge* next;
}; //定义用于表示像素点坐标的类Point
class Point

public: 
int x;
int y; 
Point(int x int y) 

this->x = x;
this->y = y; 
}
}; 
/////////////////////请使用对应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; 
//多边形顶点 
//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() 
{
//计算最高点的y坐标 
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;
//清空显示窗口并设置画点颜色为红色 
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0 0.0 0.0);
glBegin(GL_POINTS); 
//建立边表ET 
for (int i=0; i {
//取出当前点1前后相邻的共4个点,点1与点2的连线作为本次循环处理的边,另外两个点点0和点3用于计算奇点
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;
//分别计算下端点y坐标

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..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\link.command.1.tlog

     文件       3908  2018-10-18 18:06  扫描线填充\扫描线填充\Debug\扫描线填充.tlog\link.read.1.tlog

     文件        422  2018-10-18 18:06  扫描线填充\扫描线填充\Debug\扫描线填充.tlog\link.write.1.tlog

     文件        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个文件信息

评论

共有 条评论