OPENGL扫描线填充算法
完整的OPENGL的扫描线算法,基于VS2017开发。文件已经打好,自己找个路径放就行
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 25600 2018-10-18 18:08 扫描线填充.vs扫描线填充v15.suo
文件 37117952 2018-10-18 18:08 扫描线填充.vs扫描线填充v15Browse.VC.db
文件 73203712 2018-10-18 18:06 扫描线填充.vs扫描线填充v15ipchAutoPCH61737355d0251ab8MAIN.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 扫描线填充扫描线填充Debugmain.obj
文件 363520 2018-10-18 18:06 扫描线填充扫描线填充Debugvc141.idb
文件 454656 2018-10-18 18:06 扫描线填充扫描线填充Debugvc141.pdb
文件 243 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.log
文件 664 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogCL.command.1.tlog
文件 40776 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogCL.read.1.tlog
文件 444 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogCL.write.1.tlog
文件 1094 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tloglink.command.1.tlog
文件 3908 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tloglink.read.1.tlog
文件 422 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tloglink.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扫描线填充v15ipchAutoPCH61737355d0251ab8
目录 0 2018-10-17 15:46 扫描线填充.vs扫描线填充v15ipchAutoPCH
目录 0 2018-10-17 15:46 扫描线填充.vs扫描线填充v15ipch
目录 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个文件信息
#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扫描线填充v15Browse.VC.db
文件 73203712 2018-10-18 18:06 扫描线填充.vs扫描线填充v15ipchAutoPCH61737355d0251ab8MAIN.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 扫描线填充扫描线填充Debugmain.obj
文件 363520 2018-10-18 18:06 扫描线填充扫描线填充Debugvc141.idb
文件 454656 2018-10-18 18:06 扫描线填充扫描线填充Debugvc141.pdb
文件 243 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.log
文件 664 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogCL.command.1.tlog
文件 40776 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogCL.read.1.tlog
文件 444 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogCL.write.1.tlog
文件 1094 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogli
文件 3908 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogli
文件 422 2018-10-18 18:06 扫描线填充扫描线填充Debug扫描线填充.tlogli
文件 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扫描线填充v15ipchAutoPCH61737355d0251ab8
目录 0 2018-10-17 15:46 扫描线填充.vs扫描线填充v15ipchAutoPCH
目录 0 2018-10-17 15:46 扫描线填充.vs扫描线填充v15ipch
目录 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个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)