Python 中的花卉矩阵组合

发布于:2024-05-01 ⋅ 阅读:(38) ⋅ 点赞:(0)

使用场景描述 (rib) 协议编写脚本的基础知识。通过创建在 3D 空间中转换的基本几何图形,解决了 xyz 坐标系的基础知识。初步渲染是使用基本着色完成的,因此可以更容易地看到几何体。RenderMan

图1

图1

图 1 是我作为作业参考的示例图片,并尝试匹配 中的图片。为了完成这项任务,我使用了以下语言和工具:RenderMan

  1. Cutter(一个方便的文本编辑器,用于各种脚本语言,并与许多兼容的渲染器(例如,等)以及建模包(如Maya等)紧密集成。作者马尔科姆·凯森(Malcom Kesson)是SCAD的一位了不起的家伙,他是这个工具的作者,他也是我所关注的这些作业格式的幕后推手。这是他的链接:www.fundza.com 和 http://www.sfdm.scad.edu/faculty/mkesson/RenderManPRMan3Delight
  2. Python(一种非常强大的语言,因其简洁、可移植性和更高级别的功能而迅速成为大多数 CG 应用程序的首选脚本语言)。从这里下载:Welcome to Python.org
  3. 3Delight(一个了不起的兼容渲染器,是你能得到的最好的渲染器,完全免费!从这里获取:3DelightRenderManRenderMan

对于这项任务,我将任务分为不同的阶段。以下是各个阶段及其详细信息以及代码片段。

第 1 步 - 向日葵的内部图案

在仔细观察参考图像中看到的向日葵(向日葵有很多变体,所以我只是坚持参考图像中的向日葵),可以看到这种向日葵在种子内部排列的方式上表现出非常奇特的图案。谷歌立即向我提供了更多信息。

Matlab 示例

因此,第一项任务是确定向日葵的内部图案,该图案遵循从向日葵的维基百科条目下载的matlab样本中显示的特定图案。它使用以下数学公式来形成此形状:

<span style="color:black"><span style="background-color:#fbedbb"><strong>// n=1:500;</strong>
<strong>// r=sqrt(n);</strong>
<strong>// t=137.5*pi/180*n;</strong>
<strong>// plot(r.*cos(t),r.*sin(t),<span style="color:purple">'</span><span style="color:purple">o'</span>)</strong></span></span>

使用刀具对肋骨进行原型设计,然后使用 Python 运行循环,我使用 Cone 原语(而不是在上面的 matlab 示例代码中绘制 '')来制作向日葵的种子图案。以下是代码片段和呈现视图:o

<span style="color:#111111"><span style="color:black"><span style="background-color:#fbedbb">// While(n < div):
//    p=0.1
//    r=0.25*sqrt(n)
//    a=137.5*pi/180*n
//    X=r*cos(a)
//    Y=r*sin(a)
//    Z=6-(N/div)*6
//    Riattributebegin()
//    Riscale(a/div,a/div,a/div)
//    Ritranslate(x,y,z)
//    RiColor((0.63921568627450980392156862745098,
//             0.50980392156862745098039215686275,
//             0.13725490196078431372549019607843))
//    RiCone(0.2,0.2,360)
//    Riattributeend()
//    n=n+1</span></span></span>

上面的 matlab 代码只会在 2D(XY 平面)中绘制种子图案,但实际上,种子排列在球体上而不是平面上。人们可以使用真正的球面坐标来找到球体顶部锥体的分布,但相反,我作弊了,只是在圆锥体分布的假想球体的半径和这个球体的原点(在本例中为零)之间使用了线性插值。插值因子是上述循环中使用的逐渐增加的半径。这样一来,当 matlab 示例代码通过将半径计算为循环迭代器的平方根来不断增加半径时,我不断将种子坐标的值一直减小到零,以便给出一个“凹凸”形式,其中种子更靠近中心的相机,并在它们向边界移动时逐渐向后推。在计算出 x、y 和 z 坐标的适当值后,还使用线性插值计算比例因子,以给出锥体(种子)在向边界移动时放大的效果。最后,在绘制圆锥基元之前,使用适当的肋骨平移和缩放命令应用所有这些值。

第 2 步 - 随机化基于圆锥体的圆