我一直在试图编写一个在Unity中工作的洪水填充算法。这个想法是根据用户选择的颜色为黑白线条图上的部分着色。我已经尝试过几次洪水填充算法的实现,但是所有这些都会导致统一性在被调用时挂起。Unity 3D - 洪水填充/油漆桶算法不断崩溃引擎

对此的任何帮助都非常感谢,这是重要项目的一部分。根据实际情况修订代码,算法设计,或任何其他方法来得到这个工作的任何建议,将不胜感激:)

代码:

// FloodFill function

void FloodFill()

{

// TEST - colour the clicked pixel

//_tex.SetPixel((int)_pixelUV.x, (int)_pixelUV.y, m_fillColour);

//_tex.SetPixel(_pixelX, _pixelY, m_fillColour);

// FLOOD FILL

// ----------

// Create WestEast

List m_WestEast;

//get the pixel's colour

Color PC = new Color(_tex.GetPixel(m_StartNode.X, m_StartNode.Y).r, _tex.GetPixel(m_StartNode.X, m_StartNode.Y).g, _tex.GetPixel(m_StartNode.X, m_StartNode.Y).b);

//Record clicked pixel as point

Point node = new Point(m_StartNode.X, m_StartNode.Y);

//if the pixel's colour is boundary colour (black), return.

if(PC == Color.black)

{

return;

}

//else continue

// Create a list Q[]

m_List = new List();

//add clicked pixel to Q[]

m_List.Add(node);

//for each element in Q[]

for(int i=0; i

{

//create new WE[] and add Q[n] to it

m_WestEast = new List();

m_WestEast.Add(node);

//get pixel 1 to left (w) of Q[n]

Point w = new Point(node.X + 1, node.Y);

//get colour of w

Color wCol = new Color(_tex.GetPixel(w.X, w.Y).r, _tex.GetPixel(w.X, w.Y).g, _tex.GetPixel(w.X, w.Y).b);

while(wCol != Color.black)

{

//add pixel to WE[] and repeat

m_WestEast.Add(w);

//get new w

w = new Point(w.X + 1, w.Y);

//get colour of w

wCol = new Color(_tex.GetPixel(w.X, w.Y).r, _tex.GetPixel(w.X, w.Y).g, _tex.GetPixel(w.X, w.Y).b);

//else if colour is boundary colour

//go to next step

}

//get pixel 1 to right (e) of Q[n]

Point e = new Point(node.X - 1, node.Y);

//get colour of w

Color eCol = new Color(_tex.GetPixel(e.X, e.Y).r, _tex.GetPixel(e.X, e.Y).g, _tex.GetPixel(e.X, e.Y).b);

while(eCol != Color.black)

{

//add pixel to WE[] and repeat

m_WestEast.Add(e);

//get new e

e = new Point(e.X - 1, e.Y);

//get colour of e

eCol = new Color(_tex.GetPixel(e.X, e.Y).r, _tex.GetPixel(e.X, e.Y).g, _tex.GetPixel(e.X, e.Y).b);

//else if colour is boundary colour

//go to next step

}

//for each pixel in WE[]

for(int j=0; j

{

//set the pixel to replacement colour

_tex.SetPixel(m_WestEast[j].X, m_WestEast[j].Y, m_fillColour);

//get pixel 1 to north (n) of Q[n]

Point n = new Point(m_WestEast[j].X, m_WestEast[j].Y - 1);

//get colour of n

Color nCol = new Color(_tex.GetPixel(n.X, n.Y).r, _tex.GetPixel(n.X, n.Y).g, _tex.GetPixel(n.X, n.Y).b);

//if colour is not boundary colour

if(nCol != Color.black)

{

//add pixel to Q[]

m_List.Add(n);

}

//get pixel 1 to south (s) of Q[n]

Point s = new Point(m_WestEast[j].X, m_WestEast[j].Y + 1);

//get colour of s

Color sCol = new Color(_tex.GetPixel(s.X, s.Y).r, _tex.GetPixel(s.X, s.Y).g, _tex.GetPixel(s.X, s.Y).b);

//if colour is not boundary colour

if(sCol != Color.black)

{

//add pixel to Q[]

m_List.Add(s);

}

}

}

// ----------

}

洪水填充算法_Unity 3D - 洪水填充/油漆桶算法不断崩溃引擎相关推荐

  1. 洪水填充算法_Flood Fill (洪水填充、泛洪填充、油漆桶)算法Java循环实现(BFS方式,非递归)...

    什么是Flood Fill (洪水填充.泛洪填充.油漆桶算法) 从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法. 因为其思路类似洪水从一个区域扩散到所有能到达的区域 ...

  2. java 画图油漆桶_Flood Fill (洪水填充、泛洪填充、油漆桶)算法Java循环实现(BFS方式,非递归)...

    什么是Flood Fill (洪水填充.泛洪填充.油漆桶算法) 从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法. 因为其思路类似洪水从一个区域扩散到所有能到达的区域 ...

  3. 少儿编程150讲轻松学Scratch(十一)-用Scratch算法给矩形工具填充颜色

    如何利用Scratch算法给矩形工具填充颜色? 题目描述:已知矩形的大小为n×m,现用a×a的正方形填充该矩形.输入三个正整数n,m,a(n,m,a≤10^3),计算至多能填入多少正方形?(正方形可以 ...

  4. 多边形区域填充算法--扫描线填充算法(有序边表法)

    来源:https://blog.csdn.net/u013044116/article/details/49737585 二.扫描线算法(Scan-Line Filling) 扫描线算法适合对矢量图形 ...

  5. [论文学习笔记]01一种轮廓平行扫描算法【3D打印路径规划】

    文章目录 零.论文来源 0.1 概述 一.算法描述 1.1 定义一些概念 1.2 域分区 1.3 偏移量的生成 1.4 自交问题 1.5 尖角 1.6 外部轮廓和内部轮廓相交 1.7 空隙 1.8 连 ...

  6. 简述3D点云配准算法

    ​ 蝶恋花·槛菊愁烟兰泣露 槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去. 明月不谙离恨苦,斜光到晓穿朱户. 昨夜西风凋碧树,独上高楼,望尽天涯路. 欲寄彩笺兼尺素.山长水阔知何处? --晏殊 导读: 3D点 ...

  7. CVPR2020论文介绍: 3D 目标检测高效算法

    CVPR2020论文介绍: 3D 目标检测高效算法 CVPR 2020: Structure Aware Single-Stage 3D Object Detection from Point Clo ...

  8. ECCV2020 | Gen-LaneNet:百度Apollo提出两阶段的3D车道线检测算法,已开源

    点击上方"3D视觉工坊",选择"星标 干货第一时间送达 这篇文章收录于ECCV2020,是百度Apollo团队发表的关于3D车道线检测的文章,针对3D-LaneNet做了 ...

  9. R语言ggpattern填充各种色彩、形状、纹理、图片到ggplot2可视化图像:图案填充列表、饼图图案填充、柱状图图案填充

    ​R语言ggpattern填充各种色彩.形状.纹理.图片到ggplot2可视化图像:图案填充列表.饼图图案填充.柱状图图案填充 目录

  10. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板填充色、brewer调色板填充、灰度比例填充)实战(density plot)

    R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板填充色.brewer调色板填充.灰度比例填充)实战(density plot) 目录

最新文章

  1. 同时打包多个场景_人机CP模式闯入“打包界”,智能设备让每一厘米纸箱物尽其用...
  2. springboot:banner.txt
  3. java 初始化一个实体对象_Java 对象初始化
  4. CFI/CFG 安全防护原理详解(ROP攻击、DOP攻击、插装检测)
  5. Python datetime timedelta
  6. 常用实验设计方法有哪些?
  7. python mql4_使用MQL5将OHLC值从Python API集成到MT5
  8. 企鹅吞狗,狗走狐悲,狼厂危矣
  9. filecoin-存储证明子系统(rust-fil-proofs)[翻译]
  10. 操作OMF(Oracle Managed Files,Oracle管理的文件)
  11. 山水之道第四境——精灵的飞天之舞
  12. 锚点是什么?锚点的使用
  13. java 虚函数表_虚函数表(vtable/virtual table/virtual method table)
  14. Oracle基本函数-大小写转换函数
  15. 中文拼音模糊查询的一种解决方法
  16. SecureCRT常用的几个命令
  17. stream流 lambda 练习
  18. Python教程:去除背景,我保证不动她一根头发(附多种方式)
  19. Navicat 入门教程
  20. Cmd批处理替换文件

热门文章

  1. 教你用Python写连连看外挂(滑稽)
  2. 在CTeX上编码论文《杂谈勾股定理》及论文式样
  3. 对组件、模块、子系统、系统、框架、架构 定义浅析
  4. 数据分析-项目实战:Kaggle泰坦尼克号(Titanic)沉船幸存者预测(易懂快速上手版)-二元分类-自读
  5. 首次使用PyCharm
  6. 寒气笼罩中的一线暖冬
  7. ASEMI-MBR60200PT肖特基二极管正向压降怎么测
  8. Web开发网页颜色搭配
  9. 基于深度学习的图像识别技术研究综述
  10. 抓握手包破解wifi密码前传:WPA/WPA2加密小结