2

在这里,我正在尝试将一些 POV-Ray 代码转换为 Python。我正在使用 VAPORY 模块。scale <4/3,1,1>*1.75特别是,这部分pigment{ color rgb<1,1,1>*1.1 }非常令人困惑。无法弄清楚如何添加*1.75*1.1进入 Python 代码。

纯 POV 射线代码:

box { <-0.04,-0.04,0>,< 1.03, 1.04, 0.01>   
      // 1st layer: White
      texture{ 
        pigment{ color rgb<1,1,1>*1.1 } 
        finish{ phong 1}
      } // ------------------------------ 
      // 2nd layer: image_map
      texture{
        pigment{
          image_map{ jpeg "Image_gamma_0.jpg"  
          // maps an image on the xy plane from <0,0,0> to <1,1,0> (aspect ratio 1:1)
          // accepted types: gif, tga, iff, ppm, pgm, png, jpeg, tiff, sys
          map_type 0 // 0=planar, 1=spherical, 2=cylindrical, 5=torus
          interpolate 2 // 0=none, 1=linear, 2=bilinear, 4=normalized distance
          once //
         } // end of image_map
       } //  end of pigment
     } // end of texture

     scale <4/3,1,1>*1.75
     rotate<  0, 0,0>
     translate<-1.5,0.1,-2>
} // end of box //

蒸气代码:

# box with layered textures
box = Box ([-0.04, -0.04, 0], [1.03, 1.04, 0.01],
           # 1st layer: White
           Texture(
               Pigment('color', [0, 0, 1]),
               Finish('phong', 1)
               ), # End of 1st layer ------------------------------
           # 2nd layer: image_map
           Texture(
               Pigment(
                   ImageMap(
                       'jpeg', 
                       '"Image_gamma_0.jpg"',
                       'gamma', 2.0,
                       'map_type', 0,
                       'interpolate', 2,
                       'once'
                       ), # end of image_map
                   ), # end of pigment
               ), # end of texture
           'scale', [4/3, 1, 1],
           'translate', [-1.5, 0.1, -2]
           ) # end of box # -----------------------
4

1 回答 1

1

您可以numpy用于向量运算:
一个python列表[]对应于POV-Ray向量<>
一个numpy数组支持你想要的标量乘法(*x)

  1. 从您的列表中创建一个numpy数组
  2. 相乘数组
  3. 将数组转换为列表

像这样:

import numpy as np
print(list(np.array([1,2,3])*2.5)) 

结果:[2.5, 5.0, 7.5]

于 2018-11-27T08:10:22.163 回答