Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «НаписаниС скриптов для Blender 2.49Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 51

Автор Michel Anders

   context.displayMode=0

   context.enablePremultiply()

   context.renderAnim()

   filename= context.getFrameFilename()

   camera = os.path.join(os.path.dirname(filename),camera)

   try:

      os.remove(camera) # ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

                        # ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅

                        # ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ Π² windows

   except:

      pass

   os.rename(filename,camera)


   context.enableSky()

   return camera

КаТдоС ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² подходящий ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ с UV-ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Ѐункция imagemat() Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это просто; ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° Image Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±ΡƒΠ΄Π΅Ρ‚ сдСлан ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ), Π½ΠΎ эта ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ†Π²Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ тСкстурой, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ тСкстурный ΠΊΠ°Π½Π°Π» (вторая выдСлСнная строка). Π’ΠΈΠΏ тСкстур установлСн Π² Image ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ эти изобраТСния с premultiplied Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»ΠΎΠΌ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ setImageFlags(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π», ΠΈ устанавливаСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ premul изобраТСния Π² Π˜ΡΡ‚ΠΈΠ½Ρƒ:

def imagemat(image):

   mat = Material.New()

   mat.setAlpha(0.0)

   mat.setMode(mat.getMode()|Material.Modes.ZTRANSP)

   tex = Texture.New()

   tex.setType('Image')

   tex.image = image

   tex.setImageFlags('UseAlpha')

   image.premul=True

   mat.setTexture(0,tex,Texture.TexCo.UV,

                  Texture.MapTo.COL|Texture.MapTo.ALPHA)

   return mat

КаТдая Π³Ρ€Π°Π½ΡŒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ примСняСм ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π», Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ UV-раскладку. Π’ нашСм случаС, это Π±ΡƒΠ΄Π΅Ρ‚ самой простой ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… раскладок, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ квадратная Π³Ρ€Π°Π½ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² точности ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. Π­Ρ‚ΠΎ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ сбросом отобраТСния, ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, называСтся reset(). Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° MFace, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ считаСм Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ, ΠΈ присваиваСт Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ uv список 2D-Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Π­Ρ‚ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ Π² ΡƒΠ³Π»Π°Ρ… изобраТСния:

def reset(face):

   face.uv=[vec(0.0,0.0),vec(1.0,0.0),

            vec(1.0,1.0),vec(0.0,1.0)]

Ѐункция cardboard() заботится ΠΎ создании фактичСского МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²  Image, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Она начинаСтся с создания Π΄Π²ΡƒΡ… ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π³Ρ€Π°Π½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° вдоль оси z. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ UV-слой (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ) ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ:

def cardboard(left,right):

   mesh = Mesh.New('Cardboard')

   verts=[(0.0,0.0,0.0),(1.0,0.0,0.0),

          (1.0,0.0,1.0),(0.0,0.0,1.0),

          (0.5,-0.5,0.0),(0.5,0.5,0.0),

          (0.5,0.5,1.0),(0.5,-0.5,1.0)]

   faces=[(0,1,2,3),(4,5,6,7)]

   mesh.verts.extend(verts)

   mesh.faces.extend(faces)


   mesh.addUVLayer('Reset')

   mesh.activeUVLayer='Reset'

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ создаСм подходящиС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈΠ· ΠΎΠ±ΠΎΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ эти ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ мСша materials. Π”Π°Π»Π΅Π΅, ΠΌΡ‹ сбрасываСм (reset) UV-ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΎΠ±Π΅ΠΈΡ… Π³Ρ€Π°Π½Π΅ΠΉ, ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ). ΠœΡ‹ обновляСм (update) мСш, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ измСнСния Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π΄ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

   mesh.materials=[imagemat(left),imagemat(right)]


   reset(mesh.faces[0])

   reset(mesh.faces[1])

   mesh.faces[0].mat=0

   mesh.faces[1].mat=1


   mesh.update()

   return mesh

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ мСш Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° систСмой частиц, ΠΌΡ‹ строим ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ setmesh(). Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° со связанной систСмой частиц ΠΈ МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Она Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ систСму частиц (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ кускС ΠΊΠΎΠ΄Π°). ΠžΠ±ΡŠΠ΅ΠΊΡ‚ дублирования находится Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ duplicateObject. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊ настоящСму Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅Ρ‚ возмоТности ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠŸΠΈΡ‚ΠΎΠ½Π°. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ, ΠΌΡ‹ это Π΄Π΅Π»Π°Π΅ΠΌ посрСдством ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ МСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ link(). Оба ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, эмиттСр ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ дублирования систСмой частиц измСнятся, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ удостовСримся, Ρ‡Ρ‚ΠΎ измСнСния станут Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ makeDisplayList() для Π½ΠΈΡ… ΠΎΠ±ΠΎΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄ запуском обновлСния изобраТСния (redraw) всСх ΠΎΠΊΠΎΠ½ Π‘Π»Π΅Π½Π΄Π΅Ρ€Π°:

def setmesh(obname,mesh):

   ob = Object.Get(obname)

   ps = ob.getParticleSystems()[0]

   dup = ps.duplicateObject

   dup.link(mesh)

   ob.makeDisplayList()

   dup.makeDisplayList()

   Window.RedrawAll()

Ѐункция run() Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всю Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ»Π±ΠΎΡ€Π΄ΠΎΠ², ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² систСму частиц. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ссылку Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ убСТдаСмся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅:

def run():

   act_ob = Scene.GetCurrent().objects.active

   act_ob.restrictRender = False

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° сцСнС Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠΌ Π±ΠΈΠ»Π±ΠΎΡ€Π΄Ρ‹. НСкоторыС ΠΈΠ· Π½ΠΈΡ…, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ сдСланы Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ эти состояния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎΠ·ΠΆΠ΅. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ Π½Π΅ измСняСм состояниС Π»Π°ΠΌΠΏ ΠΈΠ»ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сдСлав ΠΈΡ… Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ, ΠΌΡ‹ останСмся с ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‡Π΅Ρ€Π½Ρ‹ΠΌΠΈ изобраТСниями (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ):

   renderstate = {}

   for ob in Scene.GetCurrent().objects:

      renderstate[ob.getName()] = ob.restrictRender

      if not ob.getType() in ('Camera','Lamp' ):

         ob.restrictRender = True

   act_ob.restrictRender = False

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всё настроСно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΡ‹ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π½Π΅Π΅ ΠΈ ΠΏΡ€Π°Π²ΠΎΠ΅ изобраТСния с Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Π°ΠΌΠΈ, просто ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π»ΠΈ Π² скриптС combine.py. ЀактичСски, здСсь ΠΌΡ‹ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ frame() (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ):

   cameras = ('Front','Right')

   combine.frame(cameras,act_ob.getBoundBox())

   images={}

   for cam in cameras:

      im=Image.Load(render(cam))

      im.reload()

      images[cam]=im

   bpy.data.images.active = im

   Window.RedrawAll()

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ восстанавливаСм ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° сцСнС ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ создадим Π½ΠΎΠ²Ρ‹ΠΉ мСш ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠœΡ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌ, дСлая Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ для Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΈ замСняя мСш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° дублирования Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ систСмС частиц нашим Π½ΠΎΠ²Ρ‹ΠΌ мСшСм:

   for ob in Scene.GetCurrent().objects:

      ob.restrictRender = renderstate[ob.getName()]


   mesh = cardboard(images['Front'],images['Right'])

   act_ob.restrictRender = True

   setmesh('CardboardP',mesh)

ПослСдниС строки ΠΊΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π΅Π½Π΄Π΅Ρ€Π° Π±ΠΈΠ»Π±ΠΎΡ€Π΄ΠΎΠ² (Ссли эти ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚), вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ createcams() ΠΈΠ· модуля combine Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° run():

if __name__ == "__main__":

   combine.createcams()

   run()

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ доступСн ΠΊΠ°ΠΊ cardboard.py Π² Ρ„Π°ΠΉΠ»Π΅ combine.blend.


Π Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс - использованиС cardboard.py

Допустим, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Π²Ρ‹ΡΠΎΠΊΠΎΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ Ρ‡Ρ‚ΠΎ Π’Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ»Π±ΠΎΡ€Π΄ΠΎΠ², Ρ‚ΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ CardboardP.

2. ΠΠ°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ систСму частиц Π½Π° этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

3. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΊΡƒΠ±.

4. ΠΠ°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΊΡƒΠ± Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ систСмС частиц  ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°  CarboardP.

5. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ (ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ»Π±ΠΎΡ€Π΄ΠΎΠ².

6. Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ cardboard.py.

7. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ ΠΈ ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ сцСну.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, скрипт ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π·Π°ΠΌΠ΅Π½Ρƒ мСша ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² дублирования, Ссли это Π½ΡƒΠΆΠ½ΠΎ. НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ dupliverts вмСсто частиц, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ просто ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ cardboard ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ свой мСш Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ дублирования. Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ систСму частиц, ΠΌΡ‹, вСроятно, Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ€Π°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ случайным, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ настройки для этого ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅:



Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΠΈΠ»Π±ΠΎΡ€Π΄ΠΎΠ², созданных ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π΅Ρ€Π΅Π²Π°, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² систСмС частиц:




ГСнСрация вопросов CAPTCHA

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ситуациях, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π»ΠΎΠ³Π°Ρ…, Ρ„ΠΎΡ€ΡƒΠΌΠ°Ρ…, ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½-опросах (ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ нСсколько), ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ вСбсайтов хотят ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΎΡ‚ спамботов, Π½ΠΎ Π½Π΅ хотят Π½Π°ΠΏΡ€ΡΠ³Π°Ρ‚ΡŒ посСтитСлСй-людСй рСгистрациСй с Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ. Π’ Ρ‚Π°ΠΊΠΈΡ… ситуациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стали ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ, ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŽ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ вопрос CAPTCHA (http://ru.wikipedia.org/wiki/CAPTCHA). Вопрос CAPTCHA (ΠΈΠ»ΠΈ просто Captcha) Π² самой своСй простой Ρ„ΠΎΡ€ΠΌΠ΅ - ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ распознавания, Π½ΠΎ простым для Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это искаТСнноС ΠΈΠ»ΠΈ смазанноС слово ΠΈΠ»ΠΈ число.