3D z-buffer c#GDI plus

时间:2014-09-29 19:40:40

标签: c# 3d render gdi

我在c#和GDI +中编写非常简单的3d引擎,只是为了渲染一些模型(我认为Directx或OpenGL就像铲子吃汤)。到目前为止,我已成功实现了我的模型的绘制线框,但下一步当然是Faces。并且有我的问题,现在我只是将我的3d点投射到2d点然后使用简单的绘制它 对于每个面g.DrawPolygon(Pens.Red, projected_points);和线框,它都可以。

可以计算多边形的重叠部分吗?然后绘制FilledPolygon, 或者更好的想法是逐个像素地绘制,如果我的像素的z缓冲区更进一步,则设置新的像素。

如果可以使用第一个选项,哪一个更快(用于实施和计算)?

1 个答案:

答案 0 :(得分:1)

  

可以计算多边形的重叠部分吗?然后绘制FilledPolygon,或   更好的想法是逐像素绘制,如果我的像素的z缓冲区进一步设置   新像素。

     

如果可以使用第一个选项,哪一个更快(用于实施和计算)?

是的,有可能。您可以使用列表中的每个其他多边形测试每个多边形。复杂性取决于多边形的类型(当然,三角形最简单)。但是,随着多边形数量的增加,性能可能会急剧下降。即使您找到重叠区域,也需要插入颜色或纹理坐标(如果您打算使用这些)。此外,我不确定您用于绘图的API,但GDI不支持带插值颜色的填充多边形。

我听说这是在发明Z缓冲区之前在3d图形中使用的方法。 :)

我曾经试图实现类似的项目,并使用Z-buffer +我自己的例程来填充内插颜色的三角形(使用Z缓冲区)。我直接绘制了GDI位图的像素数据缓冲区。然后,在渲染完所有多边形之后,我将结果写入屏幕。