python比较新,所以对任何可怕的编码道歉。
的内容我还想在平面上方的半球中定义一个随机摄像机位置和角度,我通过生成两个随机数字(在下面的例子中为u和v)。
但是,调用py.ops.curve.tree_add函数(生成树)会设置某种种子,这意味着我生成的随机数总是相同的。
E.g。在示例代码中,它根据为basesize / basesplit生成的randint()创建一系列不同的树。
但是,对于这些生成的每个唯一树,随机数u和v始终相同。这意味着对于我生成的每个随机树,摄像机角度特定于该树(而不是完全随机)
我认为这是通过一些种子发生的,所以我想知道是否有办法告诉python生成一个随机数并忽略任何种子?
最佳,
示例代码:( import bpy是blender的python api模块)
### libraries
import bpy
from random import random, randint
u = random()
v = random()
obj = bpy.ops.curve.tree_add(bevel = True,
prune = True,
showLeaves = True,
baseSize = randint(1,10)/10,
baseSplits = randint(0,4))
print(u)
print(v)
如果它有帮助,我生成一个球体放置相机然后将其指向对象的功能是(我还没有包括库/其余的脚本等等,为了简洁起见 - 它创建了一个指向一个半径为r的定义中心并与上述问题分开工作):
#generate the position of the new camera
def randomSpherePoint(sphere_centre, r, u, v):
theta = 2 * pi * u
phi = acos(2 * v - 1)
x = centre[0] + (r * sin(phi) * cos(theta))
y = centre[1] + (r * sin(phi) * sin(theta))
z = fabs(centre[2] + (r * cos(phi)))
return(x,y,z)
hemisphere_point = randomSpherePoint(centre, radius, u, v)
print(hemisphere_point)
#add a camera at this randomly generated hemispheric location
bpy.ops.object.camera_add(location = hemisphere_point)
the_camera = bpy.data.objects["Camera"]
#rotate the camera to the centre of the plane
camera_direction = centre - camera_location
camera_rotation = camera_direction.to_track_quat('-Z', 'Y')
the_camera.rotation_euler = camera_rotation.to_euler()
答案 0 :(得分:4)
您可以使用random.Random类创建随机实例。 一个例子是:
randomgen = random.Random()
randomgen.uniform(0,1)
这个原因是:
此模块提供的函数实际上是random.Random类的隐藏实例的绑定方法。您可以实例化自己的Random实例以获取不共享状态的生成器
答案 1 :(得分:0)
Python的random module提供了seed()
方法来设置种子。
import random
random.seed(12)
random.randint(0,100)
获取树木变化的另一个选择是为树苗插件提供不同的种子。您可以在树形比例上方的操作员调整面板中找到它,python API也接受种子参数。
bpy.ops.curve.tree_add(seed=myseed)