2023年7月23日日曜日

20230724 mon カメラ配置テスト

 









コレクションだけを作って


”railcars"

"red points"

"pink points"




blender python


カメラを配置して

カメラの向きは xyz=000

位置は 円周上

円周は 半径1 中心000


等間隔に16台カメラ配置して


コレクションを作って入れて

名前は 円周上の角度で











import bpy

import math

import mathutils


# カメラの数

num_cameras = 16


# 円周の半径

radius = 5.0


# 被写体の位置

target_location = mathutils.Vector((0, 0, 0))


# コレクションを作成

collection_name = "CameraCollection"

if collection_name not in bpy.data.collections:

    bpy.data.collections.new(collection_name)

    bpy.context.scene.collection.children.link(bpy.data.collections[collection_name])


# 円周上にカメラを等間隔に配置

for i in range(num_cameras):

    angle = 2 * math.pi * i / num_cameras

    x = radius * math.cos(angle)

    y = radius * math.sin(angle)

    z = 0.0  # カメラの高さを調整する場合は適宜変更してください


    # カメラを作成

    bpy.ops.object.camera_add(location=(x, y, z))

    camera = bpy.context.object


    # 被写体の位置への方向ベクトルを計算

    direction = (target_location - camera.location).normalized()


    # カメラの向きを設定(180度回転)

    camera.rotation_euler = direction.to_track_quat('Z', 'Y').to_euler()

    camera.rotation_euler[2] += math.radians(180)


    # カメラの名前を角度に設定

    camera.name = f"Camera_{i:02d}_{math.degrees(angle):.2f}deg"





カメラを 3秒ごとに 切替えて





正方形を作る

1辺 12

中心 


000

-12、0、0

+12.0.0



import bpy

import math


# 正方形の1辺の長さ

side_length = 12.0


# 3つの正方形の位置(指定地に配置する座標)

positions = [

    (0, 0, 0),

    (-12, 0, 0),

    (12, 0, 0)

]


# 3つの色を用意(指定の色)

colors = [(0.0, 0.0, 0.4, 1.0),  # 赤

          (0.0, 0.0, 0.6, 1.0),  # 緑

          (0.0, 0.0, 0.8, 1.0)]  # 青


# 3つの正方形を作成し、位置と色を設定

for i, (position, color) in enumerate(zip(positions, colors)):

    # 新しいメッシュを作成

    mesh = bpy.data.meshes.new(f"SquareMesh_{i}")

    obj = bpy.data.objects.new(f"Square_{i}", mesh)


    # シーンに追加

    scene = bpy.context.scene

    scene.collection.objects.link(obj)


    # メッシュの頂点を設定

    vertices = [

        (side_length / 2, side_length / 2, 0),

        (-side_length / 2, side_length / 2, 0),

        (-side_length / 2, -side_length / 2, 0),

        (side_length / 2, -side_length / 2, 0)

    ]

    mesh.from_pydata(vertices, [], 0, 1, 2, 3)


    # オブジェクトの位置を設定

    obj.location = position


    # マテリアルを作成しオブジェクトに割り当てる

    mat = bpy.data.materials.new(name=f"Material_{i}")

    mat.use_nodes = False  # ノードを使用しない


    mat.diffuse_color = color

    obj.data.materials.append(mat)











import bpy

import math


# 正方形の1辺の長さ

side_length = 12.0


# 3つの正方形の位置(指定地に配置する座標)

positions = [

    (0, 0, 0),

    (-6, 0, 0),

    (6, 0, 0)

]


# 3つの正方形を作成し、位置を設定

for i, position in enumerate(positions):

    # 新しいメッシュを作成

    mesh = bpy.data.meshes.new(f"SquareMesh_{i}")

    obj = bpy.data.objects.new(f"Square_{i}", mesh)


    # シーンに追加

    scene = bpy.context.scene

    scene.collection.objects.link(obj)


    # メッシュの頂点を設定

    vertices = [

        (side_length / 2, side_length / 2, 0),

        (-side_length / 2, side_length / 2, 0),

        (-side_length / 2, -side_length / 2, 0),

        (side_length / 2, -side_length / 2, 0)

    ]

    mesh.from_pydata(vertices, [], [[0, 1, 2, 3]])


    # オブジェクトをアクティブにする

    bpy.context.view_layer.objects.active = obj


    # メッシュをアクティブにしてオブジェクトモードに切り替え

    bpy.ops.object.mode_set(mode="OBJECT")


    # オブジェクトの位置を設定

    obj.location = position



import bpy import math # 正方形の1辺の長さ side_length = 12.0 # 3つの正方形の位置(指定地に配置する座標) positions = [ (0, 0, 0), (-6, 0, 0), (6, 0, 0) ] # 3つの正方形を作成し、位置を設定 for i, position in enumerate(positions): # 新しいメッシュを作成 mesh = bpy.data.meshes.new(f"SquareMesh_{i}") obj = bpy.data.objects.new(f"Square_{i}", mesh) # シーンに追加 scene = bpy.context.scene scene.collection.objects.link(obj) # メッシュの頂点を設定 vertices = [ (side_length / 2, side_length / 2, 0), (-side_length / 2, side_length / 2, 0), (-side_length / 2, -side_length / 2, 0), (side_length / 2, -side_length / 2, 0) ] mesh.from_pydata(vertices, [], [[0, 1, 2, 3]]) # オブジェクトをアクティブにする bpy.context.view_layer.objects.active = obj # メッシュをアクティブにしてオブジェクトモードに切り替え bpy.ops.object.mode_set(mode="OBJECT") # オブジェクトの位置を設定 obj.location = position



オブジェクトに色を付けるには、オブジェクトのマテリアルを設定する必要があります。指定された位置によって色を変化させるために、3つの色を用意し、それに応じて正方形にマテリアルを割り当てます。


以下のスクリプトは、1辺が12の正方形を3つ作成し、指定した位置に配置し、左からxが小さい方から薄青、青、濃い青の色を割り当てます。


import bpy

import math


# 正方形の1辺の長さ

side_length = 12.0


# 3つの正方形の位置(指定地に配置する座標)

positions = [

    (0, 0, 0),

    (-12, 0, 0),

    (12, 0, 0)

]


# 3つの色を用意(薄青、青、濃い青)

colors = [(0.5, 0.5, 1.0, 1.0), (0.0, 0.0, 1.0, 1.0), (0.0, 0.0, 0.5, 1.0)]


# 3つの正方形を作成し、位置と色を設定

for i, (position, color) in enumerate(zip(positions, colors)):

    # 新しいメッシュを作成

    mesh = bpy.data.meshes.new(f"SquareMesh_{i}")

    obj = bpy.data.objects.new(f"Square_{i}", mesh)


    # シーンに追加

    scene = bpy.context.scene

    scene.collection.objects.link(obj)


    # メッシュの頂点を設定

    vertices = [

        (side_length / 2, side_length / 2, 0),

        (-side_length / 2, side_length / 2, 0),

        (-side_length / 2, -side_length / 2, 0),

        (side_length / 2, -side_length / 2, 0)

    ]

    mesh.from_pydata(vertices, [], [[0, 1, 2, 3]])


    # オブジェクトをアクティブにする

    bpy.context.view_layer.objects.active = obj


    # メッシュをアクティブにしてオブジェクトモードに切り替え

    bpy.ops.object.mode_set(mode="OBJECT")


    # オブジェクトの位置を設定

    obj.location = position


    # マテリアルを作成しオブジェクトに割り当てる

    mat = bpy.data.materials.new(name=f"Material_{i}")

    mat.use_nodes = False  # ノードを使用しない


    mat.diffuse_color = color

    obj.data.materials.append(mat)



このスクリプトを実行すると、1辺が12の正方形が3つ作成され、指定した位置に配置されます。左からxが小さい方から薄青、青、濃い青の色が割り当てられます。スクリプトをBlenderのスクリプトエディターにコピーし、実行してください。

了解しました。指定した位置に3つの正方形を配置するスクリプトを修正します。

import bpy import math # 正方形の1辺の長さ side_length = 12.0 # 3つの正方形の位置(指定地に配置する座標) positions = [ (0, 0, 0), (-12, 0, 0), (12, 0, 0) ] # 3つの色を用意(薄青、青、濃い青) colors = [(0.5, 0.5, 1.0, 1.0), (0.0, 0.0, 1.0, 1.0), (0.0, 0.0, 0.5, 1.0)] # 3つの正方形を作成し、位置と色を設定 for i, (position, color) in enumerate(zip(positions, colors)): # 新しいメッシュを作成 mesh = bpy.data.meshes.new(f"SquareMesh_{i}") obj = bpy.data.objects.new(f"Square_{i}", mesh) # シーンに追加 scene = bpy.context.scene scene.collection.objects.link(obj) # メッシュの頂点を設定 vertices = [ (side_length / 2, side_length / 2, 0), (-side_length / 2, side_length / 2, 0), (-side_length / 2, -side_length / 2, 0), (side_length / 2, -side_length / 2, 0) ] mesh.from_pydata(vertices, [], [[0, 1, 2, 3]]) # オブジェクトをアクティブにする bpy.context.view_layer.objects.active = obj # メッシュをアクティブにしてオブジェクトモードに切り替え bpy.ops.object.mode_set(mode="OBJECT") # オブジェクトの位置を設定 obj.location = position # マテリアルを作成しオブジェクトに割り当てる mat = bpy.data.materials.new(name=f"Material_{i}") mat.use_nodes = False # ノードを使用しない mat.diffuse_color = color obj.data.materials.append(mat)

この修正済みのスクリプトを実行すると、辺長さが12の正方形が3つ作成され、指定した位置に配置されます。左からxが小さい方から薄青、青、濃い青の色が割り当てられます。スクリプトをBlenderのスクリプトエディターにコピーし、実行してください。

ああ