2011-12-05 22 views
6

मैं आसानी से पोस्टस्क्रिप्ट में एनिमेशन चलाने के लिए चाहता हूं। यह देखने के लिए कि मैं क्या चाहता हूं, मुझे सीधे पोस्टस्क्रिप्ट पर स्विच करने दें। Ghostscript को कॉल करें, औरचिकना पोस्टस्क्रिप्ट एनिमेशन

200 dup scale .5 setgray 0 0 3 3 rectfill 

अब हमारे पास एक ग्रे स्क्वायर है।

0 setgray 0 1 3 1 rectfill 

इसमें एक काले रंग की पट्टी के साथ। अब हम लगातार कि धारी, एक बार सफेद और काले भरना होगा:

{1 setgray 0 1 3 1 rectfill 0 setgray 0 1 3 1 rectfill} loop 

अब आप काले और सफेद आयतों कि मूल काले पट्टी से छोटे हैं में से कुछ अस्थिर देखेंगे। आदर्श रूप में, हम मूल ग्रे स्क्वायर देखेंगे। या लगभग। आज मुझे ऐसी कार्यक्षमता कहां मिल सकती है?

wget http://www.complang.tuwien.ac.at/ulrich/gupu/l5.eps.gz 
zcat l5.eps.gz | ghostscript - 

कुछेक साल पहले मैं इन मुद्दों से निपटने का प्रयास किया:

एक और अधिक दिलचस्प एनीमेशन अनुक्रम आकार 5 के जादू वर्गों के लिए खोज को देखने के लिए। लेकिन यह कभी ghostscript या Xfree में चला गया। this page देखें। शायद अब कुछ बेहतर विचार हैं?

संपादित करें: प्रतिक्रियाओं को अभी तक पढ़ने के बाद, मुझे यहां एक समस्या स्पष्ट करने दें। मूलतः, वहाँ इस सवाल में दो स्वतंत्र मुद्दे हैं:

  • कैसे एक एनीमेशन भाषा के स्तर से देखा जाना चाहिए? मेरा मानना ​​है कि, प्रत्येक फ्रेम को एक पृष्ठ के रूप में देखना सबसे अच्छा तरीका है। copypage के साथ वृद्धिशील परिवर्तन कम प्रयास के साथ महसूस किया जा सकता है। अफसोस की बात है कि copypage का अर्थशास्त्र केवल स्तर 1 और 2 में मौजूद है। स्तर 3 में, copypage का अर्थ बदलकर showpage हो गया। मैंने किया - कई साल पहले - little modification to ghostscriptcopypage या showpage तक सभी दृश्य परिवर्तनों में देरी करने के लिए। इस तरह, एक XCopyArea परिवर्तित क्षेत्र युक्त स्थानीय रूप से सर्वर (यानी, प्रदर्शन) पर किया जाता है।

  • विज़ुअल डिस्प्ले पर वास्तविक परिवर्तनों को वर्णित ग्राफिक्स में मौजूद नहीं होने वाले कलाकृतियों से बचने के लिए सिंक्रनाइज़ किया जाना चाहिए? अनियमित झिलमिलाहट आप पोस्टस्क्रिप्ट का विशेषाधिकार नहीं है, ऐसा लगता है कि अब तक मैंने देखा है कि किसी भी डबल-बफर सिस्टम में मौजूद है। बस जो भी सिस्टम आप फिट देखते हैं उसे प्रोग्राम करने का प्रयास करें।

आगे संपादित करें:

systemdict /.setlanguagelevel known {2 .setlanguagelevel} if 

संपादित करें:: मैं इस टिप्पणी जोड़ने हूँ

सही भाषा के स्तर पाने के लिए, कि (Ghostscript के लिए) स्तर 1 या 2 करते है कुछ नए योगदानकर्ताओं को आकर्षित करने के लिए।

+0

ऐसा लगता है कि यदि आप सफेद और काले स्विच की श्रृंखला से भूरे रंग के "प्रभाव" प्राप्त करना चाहते हैं, तो इसे प्रदर्शन की ताज़ा दर में सिंक किया जाना चाहिए। 60 हर्ट्ज पर, आप प्रत्येक के अधिकतम 2 "फ्रेम" चाहते हैं, 30 हर्ट्ज विजन थ्रेसहोल्ड की दृढ़ता से ऊपर है। –

+0

यह केवल एक परीक्षण उदाहरण था जहां यह स्पष्ट है कि क्या दिखाना चाहिए और क्या नहीं। कोई भी ग्रे को इस तरह से पेंट करना चाहता है (25 साल पहले ATARI के साथ ऐसा करना लोकप्रिय था ...)।आज के लिए दिलचस्प क्या है उपरोक्त (l5.eps) के रूप में अलग एनिमेशन को देखना और यह कलाकृतियों को देखे बिना एनीमेशन का हिस्सा नहीं है। कृपया इसे देखें: यह आपको दिखाता है कि सीएलपीएफडी-प्रोग्राम कैसे सभी संभावनाओं की गणना करके जादू वर्गों के समाधान पाता है ** व्यवस्थित रूप से **। – false

+1

* बैच * मोड में [पोस्टस्क्रिप्ट और एनीमेशन] (https://groups.google.com/forum/#!topic/comp.lang.postscript/olXsoUut2aQ) के बारे में हालिया धागा। –

उत्तर

4

हमने इन मुद्दों में से कुछ को this thread on comp.lang.postscript में खोजा।

स्तर 2 मानक की रिहाई के बाद, पोस्टस्क्रिप्ट एक कचरा-एकत्रित भाषा है।आप -2 vmreclaim के साथ उपयोगकर्ता ऑब्जेक्ट्स का संग्रह अक्षम कर सकते हैं, लेकिन यह बहुत कुछ नहीं करता है। -dNOGC विकल्प के साथ आविष्कार करके आप सभी ghostscript कचरा संग्रह अक्षम कर सकते हैं। यह छवि के हिस्सों के साथ stalling और थूकने से रोकने में मदद करनी चाहिए।

घोस्टस्क्रिप्ट में एक गैर-मानक ऑपरेटर है जिसे flushpage कहा जाता है, जो निष्पादन के साथ प्रतिपादन को सिंक्रनाइज़ करता है। इससे यह सुनिश्चित करने में मदद मिलती है कि सब कुछ देखा गया है इससे पहले देखा गया है।

- flushpage - 
On displays, flushes any buffered output, so that it is guaranteed to 
show up on the screen; on printers, has no effect 

और नियंत्रण समय के लिए, वहाँ सरल व्यस्त प्रतीक्षा की तुलना में एक बेहतर तरीका होना करने के लिए प्रतीत नहीं होता। flushpage आसपास


/smallpause { 
    /flushpage where{pop flushpage}if 
    50 sleep } def 
/pagepause { 
    /flushpage where{pop flushpage}if 
    1000 sleep } def 

/sleep { 
    usertime add { 
     10 { 
      1 100000 div pop %busy 
      .1 sin 257 cos atan pop %busy busy 
     } repeat 
     dup usertime le {exit}if 
    } loop pop 
} def 

where गार्ड आप (एक प्रिंटर की तरह) Ghostscript के अलावा अन्य दुभाषिए के लिए एक ही कोड भेजने के लिए अनुमति देते हैं।

यदि आपके पास वास्तविक प्रदर्शन पोस्टस्क्रिप्ट सर्वर था, तो आप व्यस्त प्रतीक्षा के बजाय wait ऑपरेटर का उपयोग कर सकते हैं।

+0

यहां दो मुद्दे हैं। क्या देखा जाना चाहिए? और प्रदर्शन के साथ बातचीत कैसे की जाती है? आप पूर्व में दिलचस्पी रखते हैं, बल्कि बाद में। मेरा मानना ​​है कि 'फ्लशपेज' जाने का एक अच्छा तरीका नहीं है। 'प्रतिलिपि' (यानी, केवल स्तर 1 और 2 अर्थशास्त्र) स्वच्छ, तार्किक तरीका है। – false

+0

यह समझ में आता है। मुझे 'copypage' से इच्छित परिणाम नहीं मिला है। यह हमेशा एक 'erasepage' करता है जिसे मैं नहीं चाहता हूं। मुझे शायद अपने भूतस्क्रिप्ट इंस्टॉल को अपग्रेड करना होगा। –

+0

नहीं! आपको भाषा स्तर 1 या 2. – false

3

हालांकि मुझे @ luserdroog का जवाब पसंद है (और ऊपर उठाया गया है), मुझे विश्वास नहीं है कि इस तरह से एनिमेशन के लिए पोस्टस्क्रिप्ट का उपयोग किया जाना चाहिए - मैं कुछ ऐसी भाषा का उपयोग करूंगा जो वास्तविक समय के लिए डिज़ाइन किए गए विजेट या डिस्प्ले तत्वों को चला सकें प्रदर्शन और उपयोगकर्ता इंटरैक्शन - यह पोस्टस्क्रिप्ट या भूत सूची का मामला नहीं है।

मुझे लगता है कि यह अच्छा होगा, हालांकि, प्रतिपादन उद्देश्यों के उद्देश्य के लिए पोस्टस्क्रिप्ट का उपयोग करें - छवि पर प्रत्येक संशोधन के बाद केवल एक पृष्ठ प्रस्तुत करना, और विभिन्न पृष्ठों को एनीमेशन फ्रेम के रूप में इकट्ठा करने के लिए बाहरी प्रोग्राम का उपयोग करना। शायद एक प्रतिपादन इंजन के रूप में पोस्टस्क्रिप्ट का उपयोग करके, किसी अन्य भाषा में प्रक्रिया के साथ भूतकाल में प्रत्येक फ्रेम को वास्तविक समय में प्रस्तुत करने के लिए बुलाया जाता है। ऐसा करने के लिए एक अच्छा और उपयोग करने योग्य मल्टीमीडिया फ्रेमवर्क उदाहरण के लिए, पायगम मॉड्यूल के साथ पायथन भाषा हो सकती है।

यहां "शुद्ध पायथन + पायगमे" का उपयोग करके एक छोटा सा उदाहरण है।

#! /usr/bin/env python 
# coding: utf-8 

import pygame 

size = 640,480 #(in pixels) 

# multiplying factor so that the whole image is 5 units across 
factor = size[0]/5.0 

# Inits pygame drawing window 
screen = pygame.display.set_mode(size) 

# Rectangle drawing function that scales drawing using the factor above 
def draw_rect(color, rect): 
    new_rect = [int (r * factor) for r in rect] 
    return pygame.draw.rect(screen, color, new_rect) 

def main(): 
    draw_rect((128,128,128), (0, 0, 3, 3)) 
    colors = ((255,255,255), (0,0,0)) 
    color_index = 0 
    while True: 
     draw_rect(colors[color_index], (0, 1, 3, 1)) 
     pygame.display.flip() 
     color_index = 1 - color_index 
     pygame.time.delay(50) # in miliseconds 

try: 
    main() 
finally: 
    pygame.quit() 

इस पर अमल करने के लिए, आप अजगर और pygame करना होगा (http://pygame.org से - वहाँ तैयार संकुल कि के लिए अधिकतर Linux सिस्टम पर कर रहे हैं)

pygame ड्राइंग एपीआई उपसंहार की तुलना में बहुत गरीब है - यदि आप अधिक की जरूरत है आयतों की तुलना में (जैसे बेजियां, स्केलिंग, घूर्णन और समन्वय प्रणाली को कतरन करना), जाने का तरीका कैरो + पायथन + कुछ डिस्प्ले लाइब्रेरी (जो कि पगम, जीटीके + या क्यूटी हो सकता है) का उपयोग करना है। काहिरा एक 2 डी ड्राइंग लाइब्रेरी है जो पोस्टस्क्रिप्ट से प्राप्त होती है। - या, जैसा कि मैंने उपरोक्त कहा है, पाइथन का उपयोग करके एक भूत-स्क्रिप्ट बाहरी प्रक्रिया को ड्राइव करने के लिए, यह एक राल संपीड़ित छवि फ़ाइल को stdout या ramdrive पर उत्पन्न कर रहा है, और वह छवि python + pygame का उपयोग करके फ्रेम द्वारा फ्रेम को पढ़ और प्रदर्शित करती है।

एक और विकल्प एचटीएमएल 5 के कैनवास का उपयोग करना है, और ब्राउज़र पर देखने योग्य जावास्क्रिप्ट में सब कुछ करना है। एचटीएमएल 5 के कैनवास भी ड्राइंग के पोस्टस्क्रिप्ट तरीके विरासत में मिलता है।

+1

मैं 1 99 0 से एनिमेशन के लिए पोस्टस्क्रिप्ट का उपयोग कर रहा हूं। अब तक, मैंने एक दूसरे को नहीं देखा है प्रोग्रामिंग भाषा जो एक ही 2 डी कार्यक्षमता में सक्षम है। बीटीडब्ल्यू, क्या आपने मूल कार्यक्रम को किसी अन्य ढांचे में प्रोग्राम करने की कोशिश की है? मुझे यह देखने में दिलचस्पी होगी, अगर कोई ऐसा ** सिस्टम है जो इस तरह के ग्राफिक्स को सटीक रूप से प्रदर्शित करने में सक्षम है। – false

+0

बस चीजों को स्पष्ट करने के लिए: आकार 3x3 के भूरे रंग के वर्ग को पेंट करें, इसके माध्यम से एक आयताकार 3x1 का एक पट्टी खींचें, उस आयत का रंग हर समय सफेद से काले रंग में बदलें। – false

+0

मैं इसे शुद्ध पायगमे में बना सकता हूं - लेकिन मुझे लगता है कि मैं छवियों को आकर्षित करने के लिए भूत-स्क्रिप्ट रखने के लिए एक परत के साथ आ सकता हूं, और फिर प्रदर्शित करने के लिए पायगैम और अंतःक्रियाशीलता जोड़ सकता हूं - ताकि आप पोस्टस्क्रिप्ट में चित्रण रख सकें। – jsbueno