Verwenden Sie Blender Python
・ Nichtinformationssystem ・ Ich habe noch nie mit dem 3D-Modell herumgespielt ・ Natürlich ist Mixer fast das erste Mal
Es ist einfach, weil Sie dies tun können!
Erstellen Sie eine 3D-Version der oben genannten "Shelpinsky-Dichtung"
Ich denke, dass der Bildschirm des Mixers in mehrere Teile unterteilt ist, aber Sie können ihn interaktiv ausführen, indem Sie "Python-Konsole" aus der Umschaltung auswählen.
Es gibt jedoch viele Dinge, die damit nicht möglich sind. Wenn Sie also "Texteditor" als Empfehlung auswählen, wird Folgendes angezeigt! Klicken Sie hier unten auf die Schaltfläche "Neu". Das ist alles was Sie tun müssen.
Es gibt verschiedene Notationen, aber es ist grundsätzlich einfach. Schauen wir uns zuerst das Ganze an.
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')
Ich werde in der Reihenfolge erklären
import bpy
from math import sqrt
Ich importiere hier ein Modul namens bpy, das eine Blender-Funktion ist. Diese werden von Anfang an ohne Verwendung von pip installiert. Importieren Sie sie also, ohne über irgendetwas nachzudenken. Weitere Grundmodule sind von Anfang an enthalten. Hier importiere ich Mathematik, weil ich die Quadratwurzel ziehen musste, um die Position des Schwerpunkts des Dreiecks zu finden. Pandas usw. sind nicht enthalten. Sie können es tun, wenn Sie es selbst installieren möchten, aber wir werden es hier nicht behandeln.
Und wie machst du das? Ich denke, es wird eine Geschichte, aber tatsächlich ist die Antwort bereits vorbereitet. Wenn ich mit Blender spiele, wird der Code angezeigt, und dies ist die Methode, die dieser Operation entspricht. Zum Beispiel
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))
Dies entspricht jedoch dem Kegel der primitiven Figur. Da Sie es nur anhand des Popups verstehen können, denke ich, dass es ein Fluss sein wird, einen Teil selbst zu erstellen → zu automatisieren. Daher werden diejenigen, die den Mixer frei manipulieren können, nicht so schwierig sein, und diejenigen, die dies nicht tun, werden eher in Betrieb genommen als codiert.
Dies ist fast kein Ersatz für gewöhnliche Python. Um es ganz klar auszudrücken, es ist schwer zu sagen, was beim Debuggen falsch ist. Seien Sie also geduldig. Es verbraucht unerwartet Speicher. Wenn Sie ihn also nicht gut schreiben, ist der Vorgang in der Regel langsam. Obwohl ich diesmal einen richtigen PC benutze, wird er nicht sofort ausgegeben, sondern nach einem Schlag.
Danach geben Sie einfach fbx aus und tauchen in die Einheit ein, aber seien Sie vorher vorsichtig Wenn Sie vci verwenden, scheint es, dass wenn die Anzahl der Unterelemente zu groß ist, es plötzlich schwer wird, und in meiner Umgebung, wenn ich 800 einsetze, wird es ein Chaos sein. Und die Anzahl der Objekte in Fractal steigt schnell an, wenn Sie nur die Anzahl der Stockwerke berühren. (Dieses Mal befindet es sich im 7. Stock, aber wenn Sie es nicht zusammensetzen, wird die virtuelle Besetzung gelöscht ...) Es ist also besser, die erstellten Objekte am Ende zusammenzusetzen. Zusammenfügen
bpy.ops.object.select_by_type(type = 'MESH')
bpy.ops.object.join()
Usw. wäre praktisch. Selbst wenn es schwer ist, wird es nicht zu langsam sein, da es nur schwer geladen wird. Wenn jedoch viele Objekte vorhanden sind, ist es langsam und in einigen Fällen wird der Online-Startwert abgelehnt. Die Fehlermeldung zu diesem Zeitpunkt lautete "Blockgröße ist zu groß".
Ich habe es damit in die VR-Welt gebracht
Wenn Sie lernen, wie es geht
So was
Weil das so ist
Dieser Artikel ist fast wie diese zweite Abkochung Sie machen hier eine dreidimensionale Version von Kochs Schneeflocken. https://qiita.com/hoji1107/items/99b2b669225d05990b5b Ich habe studiert, während ich diesen Code geändert habe.
Klicken Sie hier, um eine Erklärung des Fraktals selbst zu erhalten https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%AB
Ist die englische Version besser für Shelpinskys Dichtung? https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle
Recommended Posts