2023年7月9日日曜日

20230710 mon 球体で 数直線

 




RGBAのカラーサンプル

https://ywork2020.com/content/tips-rgba-color-sample.html


RGBAの各成分を255の範囲から1.0の範囲に変換するためには、次のような変換を行います。

  1. RGBAの各成分の値を0から255の範囲に持つ整数として取得します。
  2. 各成分の値を255で除算します。
  3. 得られた結果を小数点以下2桁まで丸めます。

以下にPythonのコード例を示します。






blender python で スクリプト 書く


円柱を3つ作る

円柱長さ 10

円柱半径 0.01

円柱中心位置 Bleu  0,0,+1

円柱中心位置 Green  0,0,0

円柱中心位置 Red  0,0,-1



# 3本の円柱 

import bpy

import math


# 円柱を作成する関数

def create_cylinder(center_point, index):

    bpy.ops.mesh.primitive_cylinder_add(

        align='WORLD',

        location=center_point,

        depth=10,

        rotation=(0, math.pi/2, 0),  # y軸を回転軸にして90度回転

        radius=0.01

    )


    # 作成した円柱に連番の名前を付ける

    obj = bpy.context.object

    obj.name = "Cylinder{}".format(index)


# 円柱1

center_point_1 = (0, 0, -1)

create_cylinder(center_point_1, 1)


# 円柱2

center_point_2 = (0, 0, 0)

create_cylinder(center_point_2, 2)


# 円柱3

center_point_3 = (0, 0, 1)

create_cylinder(center_point_3, 3)





#色付き 円柱 3つ

import bpy

import math


# 円柱を作成する関数

def create_cylinder(center_point, index, color):

    bpy.ops.mesh.primitive_cylinder_add(

        align='WORLD',

        location=center_point,

        depth=10,

        rotation=(0, math.pi/2, 0),  # y軸を回転軸にして90度回転

        radius=0.01

    )


    # 作成した円柱に連番の名前を付ける

    obj = bpy.context.object

    obj.name = "Cylinder{}".format(index)


    # マテリアルを追加して色を設定

    mat = bpy.data.materials.new("Material{}".format(index))

    mat.use_nodes = True

    obj.data.materials.append(mat)

    

    # ノードエディタで色を設定

    node_tree = mat.node_tree

    principled_bsdf = node_tree.nodes.get("Principled BSDF")

    if principled_bsdf:

        principled_bsdf.inputs[0].default_value = color


# 円柱1

center_point_1 = (0, 0, -1)

color_1 = (200/255, 0.0, 0.0, 0.8)  # 赤色 (RGBA)

create_cylinder(center_point_1, 1, color_1)


# 円柱2

center_point_2 = (0, 0, 0)

color_2 = (0.0, 1.0, 0.0, 1.0)  # 緑色 (RGBA)

create_cylinder(center_point_2, 2, color_2)


# 円柱3

center_point_3 = (0, 0, 1)

color_3 = (0.0, 0.0, 1.0, 1.0)  # 青色 (RGBA)

create_cylinder(center_point_3, 3, color_3)




21個の球体を作る

球体半径 0.02

名前を付ける 連番で Green水平

(-1,0,0) と(+1,0,0) の間に均等配置





# Green水平 球体21個

import bpy


# 球体を作成する関数

def create_sphere(location, index, color):

    bpy.ops.mesh.primitive_uv_sphere_add(

        radius=0.03,

        location=location

    )


    # 作成した球体に連番の名前を付ける

    obj = bpy.context.object

    obj.name = "Green水平{}".format(index)


    # マテリアルを追加して色を設定

    mat = bpy.data.materials.new("Material{}".format(index))

    mat.use_nodes = True

    obj.data.materials.append(mat)


    # ノードエディタで色を設定

    node_tree = mat.node_tree

    principled_bsdf = node_tree.nodes.get("Principled BSDF")

    if principled_bsdf:

        principled_bsdf.inputs[0].default_value = color


# 21個の球体を作成

start_pos = (-1.0, 0.0, 0.0)  # 配置の開始位置

distance = 0.1  # 球体同士の間隔

color = (0.0, 1.0, 0.0, 1.0)  # 緑色 (RGBA)


for i in range(21):

    x = start_pos[0] + (i * distance)

    location = (x, start_pos[1], start_pos[2])

    create_sphere(location, i+1, color)



21個の青い球体を作る

球体半径 0.03 

(0,0,1) と(+2,0,1) の間に均等配置




作った 球体21個を複製し 移動する

(1,0,1) と(+2,0,1) の間に均等配置

名前を付ける 連番で Blue+1水平


作った 球体21個を複製し 移動する

(1,0,1) と(+2,0,1) の間に均等配置

名前を付ける 連番で Blue time+1水平





3つのコレクションを作り 3つに分けて 名前は B原点 B水平移動 B時間移動


import bpy


# コレクションを作成する関数

def create_collection(name):

    collection = bpy.data.collections.new(name)

    bpy.context.scene.collection.children.link(collection)


# コレクションを作成

create_collection("B原点")

create_collection("B水平移動")

create_collection("B時間移動")





コレクションだけを作り 名前は 

R原点 

R水平移動 

R時間移動

G時間移動

G原点


import bpy


# コレクションを作成する関数

def create_collection(name):

    collection = bpy.data.collections.new(name)

    bpy.context.scene.collection.children.link(collection)


# コレクションの作成

create_collection("R原点")

create_collection("R水平移動")

create_collection("R時間移動")

create_collection("G時間移動")

create_collection("G原点")




RED



#R原点 21個

import bpy
import math

# 球体を作成する関数
def create_sphere(location, index):
    bpy.ops.mesh.primitive_uv_sphere_add(
        radius=0.03,
        location=location
    )

    # 作成した球体に連番の名前を付ける
    obj = bpy.context.object
    obj.name = "RedSphere{}".format(index)
    mat = bpy.data.materials.new("RedMaterial{}".format(index))
    obj.data.materials.append(mat)
    mat.diffuse_color = (1.0, 0.0, 0.0, 1.0)  # 赤色 (RGBA)

# 球体の配置
start_pos = (-1.0, 0.0, -1.0)  # 配置の開始位置
distance = 0.1  # 球体同士の間隔

for i in range(21):
    x = start_pos[0] + (i * distance)
    location = (x, start_pos[1], start_pos[2])
    create_sphere(location, i+1)




#R平行移動 -1 21個
import bpy
import math

# 球体を作成する関数
def create_sphere(location, index):
    bpy.ops.mesh.primitive_uv_sphere_add(
        radius=0.03,
        location=location
    )

    # 作成した球体に連番の名前を付ける
    obj = bpy.context.object
    obj.name = "RedSphere{}".format(index)
    mat = bpy.data.materials.new("RedMaterial{}".format(index))
    obj.data.materials.append(mat)
    mat.diffuse_color = (1.0, 0.0, 0.0, 1.0)  # 赤色 (RGBA)

# 球体の配置
start_pos = (-2.0, 0.0, -1.0)  # 配置の開始位置
distance = 0.1  # 球体同士の間隔

for i in range(21):
    x = start_pos[0] + (i * distance)
    location = (x, start_pos[1], start_pos[2])
    create_sphere(location, i+1)




#R時間移動 +1 21個
import bpy
import math

# 球体を作成する関数
def create_sphere(location, index):
    bpy.ops.mesh.primitive_uv_sphere_add(
        radius=0.03,
        location=location
    )

    # 作成した球体に連番の名前を付ける
    obj = bpy.context.object
    obj.name = "RedSphere{}".format(index)
    mat = bpy.data.materials.new("RedMaterial{}".format(index))
    obj.data.materials.append(mat)
    mat.diffuse_color = (1.0, 0.0, 0.0, 1.0)  # 赤色 (RGBA)

# 球体の配置
start_pos = (-2.0, 1.0, -1.0)  # 配置の開始位置
distance = 0.1  # 球体同士の間隔

for i in range(21):
    x = start_pos[0] + (i * distance)
    location = (x, start_pos[1], start_pos[2])
    create_sphere(location, i+1)






# Green 球体 時間軸 +1


import bpy


# 球体を作成する関数

def create_sphere(location, index, color):

    bpy.ops.mesh.primitive_uv_sphere_add(

        radius=0.03,

        location=location

    )


    # 作成した球体に連番の名前を付ける

    obj = bpy.context.object

    obj.name = "Green水平{}".format(index)

    mat = bpy.data.materials.new("Material{}".format(index))

    mat.use_nodes = True

    obj.data.materials.append(mat)


    # ノードエディタで色を設定

    node_tree = mat.node_tree

    principled_bsdf = node_tree.nodes.get("Principled BSDF")

    if principled_bsdf:

        principled_bsdf.inputs[0].default_value = color


# 21個の球体を作成

start_pos = (-1.0, 1.0, 0.0)  # 配置の開始位置

distance = 0.1  # 球体同士の間隔

color = (0.0, 1.0, 0.0, 1.0)  # 緑色 (RGBA)


for i in range(21):

    x = start_pos[0] + (i * distance)

    location = (x, start_pos[1], start_pos[2])

    create_sphere(location, i+1, color)





# 青い球体 水平移動 +1

import bpy


# 球体を作成する関数

def create_sphere(location, index, color):

    bpy.ops.mesh.primitive_uv_sphere_add(

        radius=0.03,

        location=location

    )


    # 作成した球体に連番の名前を付ける

    obj = bpy.context.object

    obj.name = "Blue{}".format(index)

    mat = bpy.data.materials.new("Material{}".format(index))

    mat.use_nodes = True

    obj.data.materials.append(mat)


    # ノードエディタで色を設定

    node_tree = mat.node_tree

    principled_bsdf = node_tree.nodes.get("Principled BSDF")

    if principled_bsdf:

        principled_bsdf.inputs[0].default_value = color


# Blue 水平移動 21個の球体を作成

start_pos = (0, 0, 1)  # 配置の開始位置

end_pos = (2, 0, 1)  # 配置の終了位置

num_spheres = 21  # 球体の数

color = (0.0, 0.0, 1.0, 1.0)  # 青色 (RGBA)


distance = (end_pos[0] - start_pos[0]) / (num_spheres - 1)  # 球体同士の間隔


for i in range(num_spheres):

    x = start_pos[0] + (i * distance)

    location = (x, start_pos[1], start_pos[2])

    create_sphere(location, i+1, color)




# 青い球体 時間移動 +1


import bpy




# 球体を作成する関数


def create_sphere(location, index, color):


    bpy.ops.mesh.primitive_uv_sphere_add(


        radius=0.03,


        location=location


    )




    # 作成した球体に連番の名前を付ける


    obj = bpy.context.object


    obj.name = "Blue{}".format(index)


    mat = bpy.data.materials.new("Material{}".format(index))


    mat.use_nodes = True


    obj.data.materials.append(mat)




    # ノードエディタで色を設定


    node_tree = mat.node_tree


    principled_bsdf = node_tree.nodes.get("Principled BSDF")


    if principled_bsdf:


        principled_bsdf.inputs[0].default_value = color




# Blue 水平移動 21個の球体を作成


start_pos = (0, 1, 1)  # 配置の開始位置


end_pos = (2, 1, 1)  # 配置の終了位置


num_spheres = 21  # 球体の数


color = (0.0, 0.0, 1.0, 1.0)  # 青色 (RGBA)




distance = (end_pos[0] - start_pos[0]) / (num_spheres - 1)  # 球体同士の間隔




for i in range(num_spheres):


    x = start_pos[0] + (i * distance)


    location = (x, start_pos[1], start_pos[2])


    create_sphere(location, i+1, color)
















    bpy.ops.transform.rotate(value=math.radians(90), orient_axis='Y')