Utilisez Blender Python
・ Système de non-information ・ Je n'ai jamais joué avec le modèle 3D ・ Bien sûr, le mélangeur est presque la première fois
C'est facile parce que vous pouvez le faire!
Faire une version 3D du "Shelpinsky Gasket" ci-dessus
Je pense que l'écran de blender est divisé en plusieurs parties, mais vous pouvez l'exécuter de manière interactive en sélectionnant "console python" depuis la commutation.
Cependant, il y a beaucoup de choses qui ne peuvent pas être faites avec cela, donc si vous sélectionnez "Editeur de texte" comme recommandation, ce qui suit apparaîtra! Cliquez sur le bouton "Nouveau" ci-dessous ici. C'est tout ce que vous devez faire.
Il existe différentes notations, mais c'est fondamentalement simple. Jetons d'abord un coup d'œil à l'ensemble.
import bpy
from math import sqrt
def duplicate_object_rename(arg_objectname='Default', arg_dupname='', position=(0,0,0)):
for ob in bpy.context.scene.objects:
ob.select=False
selectob=bpy.context.scene.objects[arg_objectname]
#bpy.context.scene.objects.active = selectob
selectob.select=True
bpy.ops.object.duplicate_move(
OBJECT_OT_duplicate=None, TRANSFORM_OT_translate=None)
# move object
bpy.ops.transform.translate(value=position)
selectob.select=False
if len(arg_dupname) > 0:
duplicated_objectname=arg_objectname + ".001"
duplicatedob=bpy.data.objects[duplicated_objectname]
duplicatedob.name=arg_dupname
return
scale = 0.01
bpy.ops.mesh.primitive_cone_add(vertices=3,radius1=1*scale,depth=sqrt(2)*scale,location=(scale*sqrt(3)*(.5+.5*1+1),scale*1.5*(1+3*1)/3,scale*sqrt(2)/2),rotation=(0,0,0))
duplicate_object_rename(arg_objectname='Cone', arg_dupname='Duplicate1',position=(scale*sqrt(3),0,0))
duplicate_object_rename(arg_objectname='Cone', arg_dupname='Duplicate2',position=(scale*sqrt(3)/2,scale*1.5,0))
duplicate_object_rename(arg_objectname='Cone', arg_dupname='Duplicate3',position=(scale*sqrt(3)/2,scale*1/2,scale*sqrt(2)))
bpy.ops.object.select_by_type(type = 'MESH')
bpy.ops.object.join()
namehead = 'Duplicate'
for i in range(1,7):
namebufprev = namehead + str(i)
namebuf = namehead + str(i+1)
duplicate_object_rename(arg_objectname=namebufprev, arg_dupname=namebuf,position=(scale*sqrt(3)*2*2**(i-1),0,0))
duplicate_object_rename(arg_objectname=namebufprev, arg_dupname='buf2',position=(scale*sqrt(3)*2**(i-1),scale*3*2**(i-1),0))
duplicate_object_rename(arg_objectname=namebufprev, arg_dupname='buf3',position=(scale*sqrt(3)*2**(i-1),scale*2**(i-1),scale*2*sqrt(2)*2**(i-1)))
bpy.ops.object.select_by_type(type = 'MESH'))
bpy.ops.object.join()
bpy.ops.object.origin_set(type = 'ORIGIN_GEOMETRY', center = 'MEDIAN')
Je vais expliquer dans l'ordre
import bpy
from math import sqrt
J'importe ici un module appelé bpy, qui est une fonction blender. Ceux-ci sont installés depuis le début sans utiliser pip, alors importons sans penser à rien. D'autres modules de base sont inclus depuis le début. Ici, j'importe des maths car j'ai dû prendre la racine carrée pour trouver la position du centre de gravité du triangle. Cela n'inclut pas les pandas, etc. Vous pouvez le faire si vous souhaitez l'installer vous-même, mais nous ne le couvrirons pas ici.
Et comment le faites-vous? Je pense que ce sera une histoire, mais en fait la réponse est déjà préparée. Quand je joue avec Blender, le code apparaît, et c'est la méthode correspondant à cette opération. Par exemple
bpy.ops.mesh.primitive_cone_add(vertices=3,radius1=1*scale,depth=sqrt(2)*scale,location=(scale*sqrt(3)*(.5+.5*1+1),scale*1.5*(1+3*1)/3,scale*sqrt(2)/2),rotation=(0,0,0))
Mais cela équivaut au cône de la figure primitive. Vous ne pouvez le comprendre que par le pop-up, donc je vais essayer de le faire partiellement par moi-même → Je pense que ce sera un flux d'automatisation. Par conséquent, ceux qui peuvent manipuler librement le mélangeur ne seront pas si difficiles, et ceux qui ne le feront pas seront surpris en fonctionnement plutôt qu'en codage.
Cela ne remplace presque pas le python ordinaire. Pour le dire franchement, il est difficile de dire ce qui ne va pas avec le débogage, alors soyez patient. Il consomme de la mémoire de manière inattendue, donc si vous ne l'écrivez pas correctement, l'opération a tendance à être lente. Même si j'utilise un PC approprié cette fois, il n'est pas sorti immédiatement, mais il est sorti après un battement.
Après cela, sortez simplement fbx et plongez dans l'unité, mais avant cela, soyez prudent Lors de l'utilisation de vci, il semble que si le nombre de sous-éléments est trop grand, il deviendra soudainement lourd, et dans mon environnement, si j'en mets 800, ce sera un désordre. Et le nombre d'objets dans Fractal augmente rapidement simplement en touchant le nombre d'étages. (Cette fois, c'est au 7ème étage, mais si vous ne le mettez pas ensemble, le casting virtuel tombera ...) Il est donc préférable de rassembler les objets créés à la fin. Mettre ensemble
bpy.ops.object.select_by_type(type = 'MESH')
bpy.ops.object.join()
Etc. serait pratique. Même si la taille est importante, l'opération ne sera pas trop lente simplement parce que la charge est lourde, mais si le nombre d'objets est important, l'opération sera lente et dans certains cas, le téléchargement en ligne de départ sera rejeté. Le message d'erreur à ce moment-là était "la taille du bloc est trop grande".
Je l'ai amené dans le monde de la réalité virtuelle avec ça
Si vous apprenez à le faire
Comme ça
Parce que c'est
Cet article ressemble presque à cette deuxième décoction Vous faites une version tridimensionnelle des flocons de neige de Koch ici. https://qiita.com/hoji1107/items/99b2b669225d05990b5b J'ai étudié en modifiant ce code.
Cliquez ici pour une explication de la fractale elle-même https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%AB
La version anglaise est-elle meilleure pour Shelpinsky's Gasket? https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle
Recommended Posts