2023年8月9日水曜日

20230810  2x2正方形で 電車が 進行方向に進む 3枚画像

ああああああああああああああああああああああああああああああああああああああああああああ






















import bpy


# 画像のパス

image_path = "C:\\atest\\atest_20161230_train_matsuyama.jpg"


# 3つの正方形の平面を作成

for i in range(3):

    bpy.ops.mesh.primitive_plane_add(size=1, enter_editmode=False, align='WORLD', location=(i * 2, 0, 0))

    plane = bpy.context.object


    # マテリアルを作成

    material = bpy.data.materials.new(name=f"Image Material {i}")

    plane.data.materials.append(material)


    # マテリアルに画像を追加

    if material.node_tree is None:

        material.use_nodes = True


    nodes = material.node_tree.nodes

    node_tree = material.node_tree


    # プリンシプル BSDF ノードを取得

    bsdf_node = nodes.get("Principled BSDF")


    # 画像テクスチャノードを作成

    texture_node = nodes.new(type="ShaderNodeTexImage")

    texture_node.location = (-300, 0)

    texture_node.image = bpy.data.images.load(image_path)


    # 出力ノードを取得

    output_node = nodes.get("Material Output")


    # ノードを接続

    node_tree.links.new(bsdf_node.inputs["Base Color"], texture_node.outputs["Color"])

    node_tree.links.new(output_node.inputs["Surface"], bsdf_node.outputs["BSDF"])


# レンダリングのための設定

render = bpy.context.scene.render

render.engine = 'CYCLES'  # Cycles レンダーエンジンを使用

render.image_settings.file_format = 'PNG'  # 出力フォーマットをPNGに設定


# レンダリング実行

bpy.ops.render.render(write_still=True)














 

基本系 配布 001 単位円 torus と xyz軸 円柱

https://drive.google.com/file/d/1adh0pC0n5MUfaPnsQcab8CnTvHu_JqLg/view?usp=drive_link

 

基本系 配布 002 単位2長さ balls

https://drive.google.com/file/d/1vyg5oFWmw_TK8nwp5TmVSfLH94I6rTaY/view?usp=drive_link

 

基本系 配布 003 単位2長さ balls 光時計セット 

https://drive.google.com/file/d/1u2Rn_nVBcewe39Vokua9C5n25cdivyyL/view?usp=drive_link

 

blender 基本系 配布 カタログ 2023 - zionad_mainのブログ https://mokuji000zionad.hatenablog.com/entry/2023/07/31/095208 





20230810 2球体の 中間位置に 線分電車の 球体













import bpy

import math


# Clear existing mesh objects

bpy.ops.object.select_all(action='DESELECT')

bpy.ops.object.select_by_type(type='MESH')

bpy.ops.object.delete()


# Initial settings

torus_major_radius = 1.0

torus_minor_radius = 0.03

sphere_radius = 0.07

animation_duration = 20

frame_rate = bpy.context.scene.render.fps

clockwise = True


# Create torus 1

bpy.ops.mesh.primitive_torus_add(align='WORLD', major_radius=torus_major_radius, minor_radius=torus_minor_radius, location=(0, 0, 0))

torus1 = bpy.context.active_object


# Create sphere 1

bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=(-1, 0, 0))

sphere1 = bpy.context.active_object

sphere1.parent = torus1


# Create torus 2

bpy.ops.mesh.primitive_torus_add(align='WORLD', major_radius=torus_major_radius, minor_radius=torus_minor_radius, location=(0, 0, 0))

torus2 = bpy.context.active_object


# Create sphere 2

bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=(0, 1, 0))

sphere2 = bpy.context.active_object

sphere2.parent = torus2


# Calculate the midpoint between sphere centers

midpoint = ((sphere1.location.x + sphere2.location.x) / 2,

            (sphere1.location.y + sphere2.location.y) / 2,

            (sphere1.location.z + sphere2.location.z) / 2)


# Calculate distance from midpoint to origin

distance_to_origin = math.sqrt(midpoint[0]**2 + midpoint[1]**2 + midpoint[2]**2)


# Create new sphere at midpoint of initial sphere positions

bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=midpoint)

new_sphere = bpy.context.active_object


# Create new torus with calculated major radius at origin

bpy.ops.mesh.primitive_torus_add(align='WORLD', major_radius=distance_to_origin, minor_radius=0.01, location=(0, 0, 0))

new_torus = bpy.context.active_object


# Link new sphere to new torus

new_sphere.parent = new_torus


# Set the animation

goal_frame = animation_duration * frame_rate


for frame in range(1, goal_frame + 1):

    bpy.context.scene.frame_set(frame)


    angle = 2 * math.pi * (frame / (animation_duration * frame_rate))

    if clockwise:

        angle = -angle


    # Rotate torus 1 and 2

    torus1.rotation_euler.z = angle

    torus1.keyframe_insert(data_path="rotation_euler", frame=frame)


    torus2.rotation_euler.z = angle

    torus2.keyframe_insert(data_path="rotation_euler", frame=frame)


    # Rotate spheres

    sphere1.rotation_euler.z = angle

    sphere1.keyframe_insert(data_path="rotation_euler", frame=frame)


    sphere2.rotation_euler.z = angle

    sphere2.keyframe_insert(data_path="rotation_euler", frame=frame)


    # Rotate new torus and sphere

    new_torus.rotation_euler.z = angle

    new_torus.keyframe_insert(data_path="rotation_euler", frame=frame)


    new_sphere.rotation_euler.z = angle

    new_sphere.keyframe_insert(data_path="rotation_euler", frame=frame)


# Set end frame

bpy.context.scene.frame_end = goal_frame









 

基本系 配布 001 単位円 torus と xyz軸 円柱

https://drive.google.com/file/d/1adh0pC0n5MUfaPnsQcab8CnTvHu_JqLg/view?usp=drive_link

 

基本系 配布 002 単位2長さ balls

https://drive.google.com/file/d/1vyg5oFWmw_TK8nwp5TmVSfLH94I6rTaY/view?usp=drive_link

 

基本系 配布 003 単位2長さ balls 光時計セット 

https://drive.google.com/file/d/1u2Rn_nVBcewe39Vokua9C5n25cdivyyL/view?usp=drive_link

 

blender 基本系 配布 カタログ 2023 - zionad_mainのブログ https://mokuji000zionad.hatenablog.com/entry/2023/07/31/095208 





20230810  Z=0 トーラス2つで 90度角 演出 √2長さの電車








import bpy

import math


# 初期設定

torus_major_radius = 1.0  # トーラスのメジャー半径

torus_minor_radius = 0.03  # トーラスのマイナー半径

sphere_radius = 0.07  # 球体の半径

animation_duration = 20  # アニメーションの時間(秒)

frame_rate = bpy.context.scene.render.fps

clockwise = True  # 時計回り: False, 反時計回り: True


# トーラスを作成

bpy.ops.mesh.primitive_torus_add(align='WORLD', major_radius=torus_major_radius, minor_radius=torus_minor_radius, location=(0, 0, 0))  # 描画開始位置

torus1 = bpy.context.active_object


# 球体を作成

bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=(-1, 0, 0))  # 描画開始位置

sphere1 = bpy.context.active_object


# 球体をトーラスにリンク設定

sphere1.parent = torus1


# ゴール時間を設定

goal_frame = animation_duration * frame_rate


# アニメーションを設定

for frame in range(1, goal_frame + 1):

    bpy.context.scene.frame_set(frame)


    # トーラスを回転させる

    angle = 2 * math.pi * (frame / (animation_duration * frame_rate))

    if clockwise:

        angle = -angle

    torus1.rotation_euler.z = angle

    torus1.keyframe_insert(data_path="rotation_euler", frame=frame)


    # 球体もアニメーション

    sphere1.rotation_euler.z = angle

    sphere1.keyframe_insert(data_path="rotation_euler", frame=frame)


# 2つ目のトーラスを作成

bpy.ops.mesh.primitive_torus_add(align='WORLD', major_radius=torus_major_radius, minor_radius=torus_minor_radius, location=(0, 0, 0))  # 描画開始位置

torus2 = bpy.context.active_object


# 2つ目の球体を作成

bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=(0, 1, 0))  # 描画開始位置

sphere2 = bpy.context.active_object


# 2つ目の球体をトーラスにリンク設定

sphere2.parent = torus2


# アニメーションを設定

for frame in range(1, goal_frame + 1):

    bpy.context.scene.frame_set(frame)


    # 2つ目のトーラスを回転させる

    angle = 2 * math.pi * (frame / (animation_duration * frame_rate))

    if clockwise:

        angle = -angle

    torus2.rotation_euler.z = angle

    torus2.keyframe_insert(data_path="rotation_euler", frame=frame)


    # 2つ目の球体もアニメーション

    sphere2.rotation_euler.z = angle

    sphere2.keyframe_insert(data_path="rotation_euler", frame=frame)


# アウトライナで全てのオブジェクトを選択解除

bpy.ops.object.select_all(action='DESELECT')


# endを530フレームに設定

bpy.context.scene.frame_end = 530





2つの球体の間に 等間隔で 9つの球体を

球体半径 0.04 で 作って

ただし 9つの真ん中の球体だけ 0.06


1番トーラスの2つの球体の間

2番トーラスの2つの球体の間に 作って


トーラスの回転に連動させる




20230810 トーラスで 90度角で 球体2を 円周移動

ああああああああああああああああああああああああああああああああああああああああああああ


import bpy

import math


# 初期設定

torus_major_radius = 1.0  # トーラスのメジャー半径

torus_minor_radius = 0.03  # トーラスのマイナー半径

sphere_radius = 0.07  # 球体の半径

animation_duration = 20  # アニメーションの時間(秒)

frame_rate = bpy.context.scene.render.fps

clockwise = True  # 時計回り: False, 反時計回り: True


# トーラスを作成

bpy.ops.mesh.primitive_torus_add(align='WORLD', major_radius=torus_major_radius, minor_radius=torus_minor_radius, location=(0, 0, 0))  # 描画開始位置

torus1 = bpy.context.active_object


# 球体を作成

bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=(-1, 0, 0))  # 描画開始位置

sphere1 = bpy.context.active_object


# 球体をトーラスにリンク設定

sphere1.parent = torus1


# ゴール時間を設定

goal_frame = animation_duration * frame_rate


# アニメーションを設定

for frame in range(1, goal_frame + 1):

    bpy.context.scene.frame_set(frame)


    # トーラスを回転させる

    angle = 2 * math.pi * (frame / (animation_duration * frame_rate))

    if clockwise:

        angle = -angle

    torus1.rotation_euler.z = angle

    torus1.keyframe_insert(data_path="rotation_euler", frame=frame)


    # 球体もアニメーション

    sphere1.rotation_euler.z = angle

    sphere1.keyframe_insert(data_path="rotation_euler", frame=frame)


# 2つ目のトーラスを作成

bpy.ops.mesh.primitive_torus_add(align='WORLD', major_radius=torus_major_radius, minor_radius=torus_minor_radius, location=(0, 0, 0))  # 描画開始位置

torus2 = bpy.context.active_object


# 2つ目の球体を作成

bpy.ops.mesh.primitive_uv_sphere_add(radius=sphere_radius, location=(0, 1, 0))  # 描画開始位置

sphere2 = bpy.context.active_object


# 2つ目の球体をトーラスにリンク設定

sphere2.parent = torus2


# アニメーションを設定

for frame in range(1, goal_frame + 1):

    bpy.context.scene.frame_set(frame)


    # 2つ目のトーラスを回転させる

    angle = 2 * math.pi * (frame / (animation_duration * frame_rate))

    if clockwise:

        angle = -angle

    torus2.rotation_euler.z = angle

    torus2.keyframe_insert(data_path="rotation_euler", frame=frame)


    # 2つ目の球体もアニメーション

    sphere2.rotation_euler.z = angle

    sphere2.keyframe_insert(data_path="rotation_euler", frame=frame)


# アウトライナで全てのオブジェクトを選択解除

bpy.ops.object.select_all(action='DESELECT')


# endを530フレームに設定

bpy.context.scene.frame_end = 530




 

基本系 配布 001 単位円 torus と xyz軸 円柱

https://drive.google.com/file/d/1adh0pC0n5MUfaPnsQcab8CnTvHu_JqLg/view?usp=drive_link

 

基本系 配布 002 単位2長さ balls

https://drive.google.com/file/d/1vyg5oFWmw_TK8nwp5TmVSfLH94I6rTaY/view?usp=drive_link

 

基本系 配布 003 単位2長さ balls 光時計セット 

https://drive.google.com/file/d/1u2Rn_nVBcewe39Vokua9C5n25cdivyyL/view?usp=drive_link

 

blender 基本系 配布 カタログ 2023 - zionad_mainのブログ https://mokuji000zionad.hatenablog.com/entry/2023/07/31/095208 





20230810 正方形を 3つ 作る Z=0 平面に平行な3つ

ああああああああああああああああああああああああああああああああああああああああああああ


blender python


正方形を作る

2x2の中心


正方形を3つ作る

正方形は 

Z=-1

Z=0

Z=1 

平面に存在する


正方形の中心は 

x=0 

Y=0


名前を "z= -1 Plane"


 








import bpy


# 正方形の中心座標と名前を定義

centers_and_names = [

    ((0, 0, -1), "z= -1 Plane"),

    ((0, 0, 0), "z= 0 Plane"),

    ((0, 0, 1), "z= 1 Plane")

]


# 正方形の名前を生成する関数

def generate_square_name(z_value):

    return f"Square at Z={z_value}"


# 正方形を作成する関数

def create_square(center, name):

    bpy.ops.mesh.primitive_plane_add(size=2, location=center)

    square = bpy.context.object

    square.name = name


# すべての中心座標と名前に対して正方形を作成

for center, name in centers_and_names:

    create_square(center, name)











基本系 配布 001 単位円 torus と xyz軸 円柱

https://drive.google.com/file/d/1adh0pC0n5MUfaPnsQcab8CnTvHu_JqLg/view?usp=drive_link

 

基本系 配布 002 単位2長さ balls

https://drive.google.com/file/d/1vyg5oFWmw_TK8nwp5TmVSfLH94I6rTaY/view?usp=drive_link

 

基本系 配布 003 単位2長さ balls 光時計セット 

https://drive.google.com/file/d/1u2Rn_nVBcewe39Vokua9C5n25cdivyyL/view?usp=drive_link

 

blender 基本系 配布 カタログ 2023 - zionad_mainのブログ https://mokuji000zionad.hatenablog.com/entry/2023/07/31/095208 





2023080 富士山 背景

ああああああああああああああああああああああああああああああああああああああああああああ






import bpy

import math



# 新しいオブジェクトを作成

mesh = bpy.data.meshes.new(name="Square")


# 頂点座標を定義

vertices = [

    (-1, -1, -1),

    (-1,  1, -1),

    ( 1,  1, -1),

    ( 1, -1, -1)

]


# 頂点インデックスを定義

faces = [

    (0, 1, 2, 3)

]


# メッシュに頂点と面を追加

mesh.from_pydata(vertices, [], faces)


# メッシュを更新

mesh.update()


# オブジェクトを作成し、シーンに追加

obj = bpy.data.objects.new("Square_Object", mesh)

bpy.context.collection.objects.link(obj)


# オブジェクトを移動

obj.location.x = 0

obj.location.y = 0

obj.location.z = -1


# オブジェクトを選択状態にする

bpy.context.view_layer.objects.active = obj

obj.select_set(True)


# 平行移動

bpy.ops.transform.translate(value=(0, 0, 1))


# 選択解除

obj.select_set(False)