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.
ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΡΠΎΠΊΠΎΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈ ΡΡΠΎ ΠΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°Π±ΠΎΡ Π±ΠΈΠ»Π±ΠΎΡΠ΄ΠΎΠ², ΡΠΎΠ³Π΄Π° ΡΠ°Π±ΠΎΡΠ° ΠΌΠΎΠ³Π»Π° Π±Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
1. Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ CardboardP.
2. ΠΠ°Π·Π½Π°ΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΡΡΠΈΡ Π½Π° ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ.
3. Π‘ΠΎΠ·Π΄Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΊΡΠ±.
4. ΠΠ°Π·Π½Π°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΊΡΠ± Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ°ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° CarboardP.
5. ΠΡΠ±ΡΠ°ΡΡ (ΡΠ΄Π΅Π»Π°ΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ) ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠ΅Π½ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ Π±ΠΈΠ»Π±ΠΎΡΠ΄ΠΎΠ².
6. ΠΠ°ΠΏΡΡΡΠΈΡΡ cardboard.py.
7. ΠΡΠ±ΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΈ ΠΎΡΡΠ΅Π½Π΄Π΅ΡΠΈΡΡ ΡΡΠ΅Π½Ρ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠΊΡΠΈΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π·Π°ΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ dupliverts Π²ΠΌΠ΅ΡΡΠΎ ΡΠ°ΡΡΠΈΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ cardboard ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΌΠ΅Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΡΡΠΈΡ, ΠΌΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΡΠ»ΠΈ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΠΎΡΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ, ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅:
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΊΡΠΈΠ½ΡΠΎΡ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π±ΠΈΠ»Π±ΠΎΡΠ΄ΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π΅ΡΠ΅Π²Π°, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ°ΡΡΠΈΡ:
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² CAPTCHA
ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±Π»ΠΎΠ³Π°Ρ , ΡΠΎΡΡΠΌΠ°Ρ , ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠΏΡΠΎΡΠ°Ρ (ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ), ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π²Π΅Π±ΡΠ°ΠΉΡΠΎΠ² Ρ ΠΎΡΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠΎΠ²ΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΉ ΠΎΡ ΡΠΏΠ°ΠΌΠ±ΠΎΡΠΎΠ², Π½ΠΎ Π½Π΅ Ρ ΠΎΡΡΡ Π½Π°ΠΏΡΡΠ³Π°ΡΡ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Π΅ΠΉ-Π»ΡΠ΄Π΅ΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠ΅ΠΉ Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. Π ΡΠ°ΠΊΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π»ΠΈ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ, ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ Π²ΠΎΠΏΡΠΎΡ CAPTCHA (http://ru.wikipedia.org/wiki/CAPTCHA). ΠΠΎΠΏΡΠΎΡ CAPTCHA (ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Captcha) Π² ΡΠ°ΠΌΠΎΠΉ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠ΅ - ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΡΠ΄Π½ΡΠΌ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ, Π½ΠΎ ΠΏΡΠΎΡΡΡΠΌ Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΈΡΠΊΠ°ΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ»ΠΈ ΡΠΌΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠΈΡΠ»ΠΎ.