Material: Ein Labyrinth in Farbe
Lernziel
Bis jetzt waren unsere 3D-Objecte grau in grau. Wir wollen diese Welt etwas bunter gestalten. Dafür verwenden wir die Materialien und/oder Texturen.
Handlungsanweisungen/Aufgaben
Konstruiere ein eigenes Labyrinth.
Erzeuge für die Symbole $ und @ ein anderes Objekt (Kegel oder Zylinder, Halma-Figur)
Erzeuge unterschiedliche Farben für die einzelnen Steine.
Das Labyrinth
Das Labyrinth wird wie in der vorhergehenden Station erzeugt, diesmal aber mit Material versehen.
1#! bpy
2"""
3Name: 'colored_labyrinth.py'
4Blender: 2.7x
5Group: 'Materials'
6Tooltip: 'Generates colorful objects by materials'
7"""
8import bpy
9
10level_00 = ["###################",
11 "#. #",
12 "# $ #",
13 "# #",
14 "# #",
15 "# @ #",
16 "# #",
17 "# #",
18 "# #",
19 "# #",
20 "###################"]
21
22
23level_01 = [" ##### ",
24 " # # ",
25 " #$ # ",
26 " ### $## ",
27 " # $ $ # ",
28 "### # ## # ###### ",
29 "# # ## ##### ..# ",
30 "# $ $ ..# ",
31 "##### ### #@## ..# ",
32 " # ######### ",
33 " ####### "]
34
35MATERIAL_RED = bpy.data.materials.new('Red Material')
36
37
38def sokobanLevel(level):
39 """Generating a labyrinth with colored cubes"""
40
41 cols = len(level[0])
42 rows = len(level)
43
44 for row in range(rows):
45 for i in range(cols):
46 if level[row][i] == '#':
47 bpy.ops.mesh.primitive_cube_add(location=(row*2, i*2, 0))
48 obj = bpy.context.object
49 setColor(obj, MATERIAL_RED, (1, 0, 0))
50
51
52def setColor(obj, material, color):
53 material.diffuse_color = color
54 material.specular_hardness = 200
55 obj.data.materials.append(material)
56
57
58if __name__ == '__main__':
59 sokobanLevel(level_00)
Material erstellen
Jedes Material erhält einen Namen, wird in Blender unabhängig von den Objekten verwaltet und kann mehreren Objekten zugewiesen werden.
MATERIAL_RED = bpy.data.materials.new('Red Material')
Objekt speichern
Nach dem Erstellen wird das Objekt in der Variablen obj zugewiesen.
rows = len(level)
for row in range(rows):
for i in range(cols):
if level[row][i] == '#':
bpy.ops.mesh.primitive_cube_add(location=(row*2, i*2, 0))
obj = bpy.context.object
setColor(obj, MATERIAL_RED, (1, 0, 0))
Funktionsaufruf mit Parameter
Die Funktion setColor erwartet drei Parameter: das Objekt, das Material und den Farbwert für das Material.
obj = bpy.context.object
setColor(obj, MATERIAL_RED, (1, 0, 0))
Material zuweisen
In der Funktion setColor wird die Materialzuweisung mit den drei Parametern realisiert.
def setColor(obj, material, color):
material.diffuse_color = color
material.specular_hardness = 200
obj.data.materials.append(material)
Das Ergebnis
