【发布时间】:2017-08-29 08:07:12
【问题描述】:
对 python 来说相对较新,因此对任何糟糕的编码表示歉意。
我还想在平面上方的半球中定义一个随机的相机位置和角度,我通过生成两个随机数(在下面的示例中为 u 和 v)来实现。
但是,调用 py.ops.curve.tree_add 函数(生成树)会设置某种种子,这意味着我生成的随机数总是相同的。
例如在示例代码中,它根据为 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()
【问题讨论】:
-
代码有问题:你从
random导入某些函数,然后访问random.uniform。要么使用import random获取命名空间random,要么从中导入uniform函数,并且不要以random为前缀。 -
啊抱歉!它来自今天早上对代码的一些修改。我通常只是在使用随机()。编辑示例中的代码以反映这一点
-
您是否拥有可通过 Python 调用而不是使用菜单和预设的完整树苗?谢谢!
标签: python random blender seed