资源简介
完整的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\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个文件信息
- 上一篇:IObit Uninstaller
- 下一篇:LCL型并网逆变器的控制技术.pdf
相关资源
- OpenGL ES 3.x游戏开发 上卷 吴亚峰.pdf
- 用OpenGL绘制的二维动物
- opengl编写3D的CS小游戏,可运行
- 基于opengl的粒子系统
- 利用OpenGL自编程实现球体源码——网
- OpenGL Development Cookbook PDF + vs2015源碼
- OpenGL.Superbible.7th.Edition(pdfandsourceco
- OpenGL着色语言(中文版
- OpenGL编程指南第九版英文
- 计算机图形学OpenGL第三版带完整目录
- 一个用 opengl 开发的雪花动画
- Computer Graphics Using OpenGL (3rd Edition)
- opengl导入3ds模型和场景漫游
- OpenCV实现SfM:双目三维重建
- OpenGL显示任意Stl文件
- OpenGL计算机图形作业立方体旋转+六个
- 曾涛地形模型和NeHeOpenGL教程
- Opengl 导入3Dmax制作的.3ds模型 并显示出
- OpenGL游戏程序设计.pdf
- 一个opengl+粒子系统模拟雪效的简单程
- OpenGL ES 2.0 编程指南中英文+源码
- 《LearnOpengl CN》中文最新版-2018年11月
- OpenGL三维场景绘制3D模型读取
- OpenGL三维图形系统开发与实用技术.
- opengl绘制的简单机器人 可以实现走路
- opengl三维迷宫
- opengl+粒子系统的降雪模拟增强版
- OpenGL --A Primer[2nd Edition] OpenGL程序设计
- 基于OpenGL的 虚拟漫游
- MyGUI_3.2.0
评论
共有 条评论