光栅渲染器(四)多边形绘制
2017-10-29 14:30
344 查看
暂时找不到合适绘制多边形的算法,就自己丰衣足食,不当之处希望大家指出。
算法设计:多边形是由多个三角形组合而成。希望通过输入四个顶点绘制多边形,但不能随意指定顶点绘制多边形,否则就是这样
所以我们需要找到不相邻的2个点,通过这2个点,分别跟另外2个点完成2个三角形的绘制,这样就构成了一个多边形
算法实现如下
通过顶点之间的距离确定不相邻的2个顶点
但这样绘制其他多边形就很不难,不可能为每一种多边形设计算法,所以有了接下来的算法
算法设计:由上图可以发现任何一个多边形都可以以三角形组成,只要按顺序给定关于顶点的数据,我们就可以轻松绘制多边形
首先是给定按顺序的顶点数据
接下来是判断顶点的数据是否可以完成多边形
接下来就是绘制多边形
成功了
绘制凸四边形
首先绘制凸四边形,毕竟这个渲染器我最低的要求就是能画个正方体算法设计:多边形是由多个三角形组合而成。希望通过输入四个顶点绘制多边形,但不能随意指定顶点绘制多边形,否则就是这样
所以我们需要找到不相邻的2个点,通过这2个点,分别跟另外2个点完成2个三角形的绘制,这样就构成了一个多边形
算法实现如下
通过顶点之间的距离确定不相邻的2个顶点
void Drawquadrilateral(point_t v1, point_t v2, point_t v3, point_t v4, color_t c)//绘制凸四边形 { float maxdis =max(max( vector_distance(v1, v2), vector_distance(v1, v3)), vector_distance(v1, v4)); if (maxdis == vector_distance(v1, v2)) { DrawTriangle(v1, v4, v3, c); DrawTriangle(v2, v4, v3, c); } else if(maxdis == vector_distance(v1, v3)) { DrawTriangle(v1, v4, v2, c); DrawTriangle(v3, v4, v2, c); } else { DrawTriangle(v1, v3, v2, c); DrawTriangle(v4, v3, v2, c); } }
但这样绘制其他多边形就很不难,不可能为每一种多边形设计算法,所以有了接下来的算法
绘制任意多边形
算法设计:由上图可以发现任何一个多边形都可以以三角形组成,只要按顺序给定关于顶点的数据,我们就可以轻松绘制多边形
首先是给定按顺序的顶点数据
vector<float> vertices = { 10,10, 10,410, 100,410, 150,150, 100,10 };
接下来是判断顶点的数据是否可以完成多边形
int size = vertices.size(); if (size % 2 != 0||size<6) return;//目前只是2d
接下来就是绘制多边形
void DrawPolygon(vector<float> vertices, color_t c)//按顺序输入复杂多边形顶点,绘制多边形
{
int size = vertices.size(); if (size % 2 != 0||size<6) return;//目前只是2d
point_t v1, v2, v3;
v1.x = vertices[0];
v1.y = vertices[1];
size = size / 2;
for (int i = 1; i <= size-2; i++)
{
v2.x = vertices[i*2];
v2.y = vertices[i*2+1];
v3.x = vertices[i*2+2];
v3.y = vertices[i*2+3];
DrawTriangle(v1, v2, v3, c);
}
}
成功了
相关文章推荐
- 如何在DeepEarth中进行图形绘制(点、线、多边形以及自定义图片图层)
- C++实现glut绘制点、直线、多边形、圆
- 利用GDI+绘制任意边数的多边形窗体
- js基于谷歌地图API绘制可编辑圆形与多边形
- Unity3D之Mesh(四)绘制多边形
- opengl绘制固定宽度多边形圆角边框算法(历时周半,撰博文以志纪念)
- 用多边形近似球体表面(icosphere)的Mesh数据的生成并使用openGL绘制
- 国家天地图API 绘制多边形 覆盖物
- OpenGL(一)二维图形的绘制:图元、多边形、颜色插值、文本、查询与错误、状态的保存
- OpenGL多边形的绘制(多个三角形连接)
- 几种绘制半透明多边形/绘制半透明矩形的方法
- 高德地图绘制多边形和线段
- 多边形的绘制
- 初学Android,OpenGL ES之绘制平面多边形(八十)
- 判断点与多边形的关系(5):OpenCV交互式绘制图像ROI应用代码
- 【Silverlight】Bing Maps学习系列(五):绘制多边形(Polygon)图形
- 【转】Flex4 中skinclass使用Path绘制多边形
- 使用高德地图绘制多边形区域(转)
- 用Shader绘制自由多边形
- halcon绘制多边形轮廓的方法