Windows Vista.NET 1.0Visual Studio .NET 2003Windows 2003.NET 1.1.NET 3.0Visual Studio 2005Windows 2000Windows XP.NET 2.0C# 2.0中级开发Visual StudioWindows.NETC#
绘制3D表面






4.86/5 (53投票s)
2007年2月21日
2分钟阅读

263683

17225
简单地在屏幕上渲染3D表面,无需OpenGL/DirectX。

引言
本文介绍了一种在2D平面上渲染3D表面的简单方法。它不使用OpenGL或DirectX之类的东西。它只是利用了CPU的功能。当然,简单性是有代价的 - 渲染过程不像使用硬件加速时那样快。
它的应用范围从简单地欣赏美丽的3D表面到数据可视化,再到任何需要的用途。我曾在为优化方法、识别、微积分(数学分析)和量纲分析课程编写的程序中使用过它。
属性
Density
- 跨越网格的大小。PenColor
- 绘图笔的颜色。用于绘制网格。StartPoint
- 绘图起始点。EndPoint
- 绘图结束点。Function
- 用于计算表面顶点的函数。ColorSchema
- 分配给网格的颜色方案。
方法
ReCalculateTransformationsCoeficients
- 根据新参数重新计算变换系数。Project
- 执行投影。计算3D点的屏幕坐标。RenderSurface
- 主要方法。在给定的图形上渲染表面。
关注点
其他类ColorSchema
和CompiledFunction
是代码中有趣的部分。第一个封装了一个Color
条目的数组。它有一些预定义的调色板。另一个将给定的公式编译成一个函数委托,提供简单的解析器服务。用法
Surface3DRenderer sr = new Surface3DRenderer(70, 35, 40,
0, 0, ClientRectangle.Width,
ClientRectangle.Height, 0.5, 0, 0);
//new hue-based palette
sr.ColorSchema = new ColorSchema(120);
//enter your function here
sr.SetFunction("sin(x1)*cos(x2)/(sqrt(sqrt(x1*x1+x2*x2))+1)*10");
使用它来实际渲染一些东西
sr.RenderSurface(e.Graphics);
每当绘图区域大小改变时,使用它
sr.ReCalculateTransformationsCoeficients(70, 35, 40, 0, 0,
ClientRectangle.Width, ClientRectangle.Height, 0.5, 0, 0);
Copyright
CompiledFunction
由 Łukasz Światkowski 实现。
历史
- 2007年2月22日 - 第一个版本。
- 2007年2月23日 - 添加了示例图像。
示例(应用程序)
下面,我发布了一个为我的优化方法(寻找函数的最小值/最大值)学术课程编写的应用程序的屏幕截图。标签是波兰语,但我希望它们是不言自明的。
输入公式
使用最大斜率法寻找函数的最小值