پیشنیازها
دانشی از مدلسازی lighting Viewing,( modeling) و نقش پارامترها در مدلسازی و Viewing
معرفی: این فصل با فصهای دیگر تفاوت دارد چون این فصل یک فصل غیرعادی است چرا که شامل چند شکل است که دقیقاً عنوان( موضوع) آنرا معرفی میکنند( مشخص میکنند).
موضوع( عنوان) این فصل در مورد حرکت است و ما نمیتوانیم در یک متن دستی نوشته شده مفهوم دقیق حرکت را نشان دهیم این امکان وجود داشت که با فایلهای تصویری در یک متن الکترونیکی میتوانستیم با فایلهای تصویری در یک متن الکترونیکی مفهوم دقیق حرکت را نشان دهیم ولی خوب این فصل باید پرینت شود.
شاید نسخههای آینده این کتاب شامل فیلمهایی یا حداقل فایلهای قابل اجرا با انیمیشین باشد ولی هماکنون شما باید با نمونهها و کدهای سگمنتها که فراهم کردهایم کار کنید و اجرای آنها را روی سیستم خودتان مشاهده امتحان کنید.
انیمیشن کامپیوتری یک مبحث بسیار گسترده است و کتابها و courseهای بسیاری در مورد آن وجود دارد.
ما نمیتوانیم امیدوار باشیم که عمق مفهوم این موضوع را در اولین دوره گرافیک کامپیوتری پوشش دهیم.
به جای آن ما روی انیمیشنهای نسبتاً ساده که نوع مدلها و تصاویری که در این course به وجود میآوریم را نمایش میدهند متمرکز میشویم.
البته با تأکید روی بخشهای علمی.
اینگونه پنداشته میشود که انیمیشین عبارت است از ارائه دنبالهای از قالبها، یا تصاویر منفرد، آنقدر سریع که تصویری از شیئی در یک قاب در حال حرکت را ایجاد کند.
دو نوع انیمیشن وجود دارد.
انیمیشن بلادرنگ (real –time animation) یا انیمیشنی که در آن هر قاب با برنامهای در طول اجرای آن مشخص میشود و انیمیشن Frame –at-a- time یا انیمیشنی که با render کردن قابهای منفرد و اسمبل کردن آنها به یک شکل قابل دید.( احتمالاً از طریق فیلم یا ویدئو در یک فرآیند تولید مجزا) اسمبل میشود.
این فصل بیشتر روی انیمیشنFrame-at-a-time با هدف رسیدن به انیمیشن real-time توجه میکند.
هر دو این دستهها شامل مشکلات تعریف چگونگی تغییر مدلها، lighting و viewing در طول زمان است، ولی انیمیشن Frame-at-a- time بیشتر به جزئیات مدلسازی و render کردن در سطح بالا اشاره میکند، در حالی که انیمیشن real-time بیشتر به اطلاعات با متغیر زمان سادهتر برای دریافت refresh rate که باید آنقدر بالا باشد که تغییر مورد نظر را انتقال دهد اشاره میکند.
در حالی که انیمیشن real-time به اندازه انیمیشن Frame-at-a-time مورد اطمینان نیست.
چرا که مدلسازی و rendering سادهتری استفاده میشود یا تصاویر با سرعت کمتری تهیه شدهاند، و میتواند در انتقال ایدهها بسیار مفید باشد به خصوص اگر کاربر بتواند با برنامه انیمیشنی در حالی که اجرا میشود ارتباط برقرار کند.
پرسش اصلی در این course ارتباط دیداری است و تعدادی لغات و تکنیکهای ویژه در استفاده انیمیشن برای ارتباطات وجود دارد.
این ماژول هیچ تلاشی برای تحت پوشش قراردادن این موضوع ندارد ولی ما پیشنهاد میکنیم که شما مقداری از وقت خود را صرف جستجو در مورد انیمیشنهای موفق کنید و برای فهمیدن اینکه چه چیزی باعث موفقیت آنها شده تلاش کنید.
برای شروع ما پیشنهاد میکنیم که روی شفافیت و سادگی تمرکز کنید و برای ایجاد تمرکز روی ایدههای ویژه برای ارتباط برقرارکردن به سختی کار کنید.
تعاریف:
انیمیشن فرآیند تولید زنجیرهای از تصاویر و نمایش آنها به گونهای است که چشمان بیننده آنها را به صورت زنجیرهای از حرکات نرم ببیند.
زنجیره حرکات میتواند ارتباط بین اشیا و فرآیند اسمبلکردن اشیاء را نشان دهد.
و میتواند به شما این امکان را بدهد که زنجیرهای از راههای نمایش اطلاعات را طراحی کنید و یا حتی به کاربر این امکان را میدهد که یک صحنه را از نقطه دیدهای مختلف که شما میتوانید طراحی کنید ببیند.
انیمیشن فرآیند تولید زنجیرهای از تصاویر و نمایش آنها به گونهای است که چشمان بیننده آنها را به صورت زنجیرهای از حرکات نرم ببیند.
و میتواند به شما این امکان را بدهد که زنجیرهای از راههای نمایش اطلاعات را طراحی کنید و یا حتی به کاربر این امکان را میدهد که یک صحنه را از نقطه دیدهای مختلف که شما میتوانید طراحی کنید ببیند.
راههای زیادی برای طراحی رشته انیمیشن وجود دارد، ولی بهترین شروع مدل کردن صحنه موردنظر با پارامترهایی برای کنترل ظاهر مدل است.
وقتی شما از پارامترها (منظور متغیرهایی است که میتوانید در برنامهتان به کار ببرید) برای کنترل موقعیت اشیاء، موقعیت یا خواص نور، شکل یا روابط و یا اشیاء، رنگها، بافت محورهای مختصات، یا هر نقطه کلیدی دیگر در مدلتان استفاده میکنید، میتوانید مقادیر پارامترها را با زمان تغییر بدهید تا دید بیننده خود را در طول اجرا برنامه عوض کنید.
این به شما این امکان را میدهد که به خصوصیات ویژه هر یک از این جنبههای مدل خود تأکید کنید و با بیننده خود ارتباط برقرار کنید.
تعریف مدلسازی خود به وسیله پارامترها، باید یادآور شویم که تنها سه قسمت برای هر صحنه در تعریف توسط گراف صحنه وجود دارد.
یکی جغرافیای صحنه، که میتوان از پارامترها برای توضیح جغرافیای صحنه استفاده کرد، مثالی از این میتواند تابع سطح باشد، که تابع شامل پارامتری است که با زمان تغییر میکند.
مثل: .
دیگری تبدیل صحنه است، که شامل پارامترهایی است برای تعریف چرخش، انتقال، یا مقیاسگذاری شیء در صحنه، مثالی از این میتواند حرکت یک شی در فضا با جزء تبدیل افقی t و جزء تبدیل عمودی که به شی یک مسیر parabolic میدهد.
سوم ظاهر شیء در صفحه است که ممکن است سطح دارای جزء رنگی (1-t) باشد برای تغییر از opaqve در لحظه o به trasparent در لحظه1، که به کاربر این امکان را میدهد که از سطح بتواند هر آنچه زیرش است را ببیند.
اینها انواع سادهای از کاربرهای مدلسازیهای پارامتریک است و نباید هیچ مشکلی در ایجاد یک مدل ایجاد کند.
یک راه برای طراحی رشته انیمیشن به وسیله این کار انیمیشن procedural (روندی) نامیده میشود و برای انیمیشنهای ساده که شما تنها چند پارامتر برای تعریف رشته دارید به خوبی کار میکند( هر چند کلمه “ تنها چند” به سیستم شما و هدف شما از رشته گرافیکی بستگی دارد).
اغلب انیمیشنها که ما بحث میکنیم در کاربرهای علمی ارائه میدهیم به صورت procedural هستند، که ما موقعیت و رفتار شی را در طول زمان با اصول علمی محاسبه میکنیم و آنها را در حالی که تغییر میکنند نشان میدهیم.
این امر محاسبات خواص هر قاب از انیمیشن را راحتتر میکند.
راه دیگر برای طراحی یک رشته انیمیشن ایجاد قابهای کلیدی یا تصویرهای خاص که میخواهید در یک زمان خاص در نمایش انیمیشن ظاهر شوند است.
انیمیشن که به این روش ایجاد میشود انیمیشن قاب کلیدی نامیده میشود.
دوباره، هر قاب کلیدی میتواند به صورت یک سری پارامترهایی که نمایش را کنترل میکند تعریف شود اما بجای کنترل کردن پارامترها به صورت برنامهریزی شده، پارامترها interpolate شدهاند بین مقادیر موجود در قابهای کلیدی.
و اما نوع سوم انیمیشن، که به نظر نمیآیدکه در موارد قبل به آن فکر شده باشد انیمیشن الحاقی است.
اینجا شما دو مدل را تعریف میکنید و هندسه مدل اول را در هندسه مدل دوم الحاق میکنید.
یک مثال برای این مورفینگ است که در آن شما با یک شیء (صورت، حیوان، ماشین …) شروع میکنید و با یک چیز دیگر تمام میکنید برای تأکید کردن تغییر از یک چیز به چیز دیگر.
این یک رشته از تصاویر را شامل میشود پس این یک انیمیشن است اما این بیشتر نوع تخصصی روند است و بیشتر در اینجا بحث نمیشود.
شاید سادهترین راه رسیدن به انیمیشن تعریف صحنه کلیتان به صورت یک پارامتر منفرد و بروزکردن آن پارامتر هر بار که یک قاب جدید تولید میکنید باشد.
شما میتوانستید فکر کنید که پارامتر زمان است و انیمیشن شما به صورت یک مدل متغیر با زمان است.
این شاید راه رسیدن طبیعی باشد وقتی که شما با یک مشکلات علمی کار میکنید جایی که زمان نقش فعالی را در اکثر مدلینگها ایفا میکند فکر کنید که چقدر غلم سرکار و کار دارد با تغییر در واحد زمان اگر بدانید که چقدر طول خواهد کشید که صحنهتان ایجاد شود شما میتوانید همچنین پارامتر زمان را تغییر دهید.
برای یک مقداری برای هر قاب که بیننده قابها را با سرعتی که زمان واقعی رفتار سیستمی که مدلسازی کردهاید تخمین میزند.
معنی دیگر پارامترها میتواند شماره قاب باشد، رشته شمارههای تصویر خاصی که شما در یک سری قاب که زنجیره انیمیشن را درست میکنند محاسبه کردهاید.
اگر شی با انیمیشنی که با ضبط و پخشکردن در یک rate شناخته شده (معمولاً 24 تا 30 قاب در ثانیه) سروکار دارید، میتوانید شماره قاب را به پارامتر زمان انتقال دهید، ولی این تفاوت در نامها برای پارامترها تفاوت در تفکر را منعکس میکند، چرا که شما به مدت زمان تولید قاب توجه نمیکنید.
یک جنبه کلیدی در تولید انیمیشن در زمان واقعی Frame rate است سرعتی که شما قادرید یک تصویر جدید در زنجیره انیمیشن ایجاد کنید.
همانطور که در بالا اشاره شد، سرعت قاب احتمالاً برای قابهای تولید شده با جزئیات بیشتر نسبت به قابهای مشابه که از قبل محاسبه شدهاند و در دستگاه ویدئوئی دیجیتال یا آنالوگ ذخیره شدهاند کمتر است.
اما در اینجا فرق دیگری هم وجود دارد: سرعت قاب برای تصاویر تولید شده در زمان واقعی.
ممکن است ثابت نباشد.
به هر حال سرعت قاب دقیقاً قابل کنترل است، اگر شما خودتان ویدئوی “hardcopy” انیمیشن خودتان را ایجاد کرده باشد.
مهم نیست تصویر در یک قاب منحصر چه قدر پیچیده باشد.
فصل hardcopy را برای جزئیات بیشتر در این کتاب بخوانید.
انیمیشنkey frame وقتی یک شیء keyframe انجام میدهید تعدادی قاب مشخص بعنوان قابها کلیدی که انیمیشن باید تولید کند مشخص کنید و بقیه قابها را محاسبه کنید تا تصور به صورت نرمی از یک قاب کلیدی به دیگری حرکت کند.
قابهای کلیدی بوسیله شماره قاب مشخص میشوند.
بنابراین پارامترهایی است که شما استفاده میکنید.
که در بالا توضیح دادیم.
در انیمشین نوع کارتون بطور معمول قابهای کلیدی بصورت نقاشیهای کاملاً پیشرفته هستند و برای قابها که باید در فرآیند تولید شود “tweening” نامیده میشود.
تولید قاب بین قابهای کلیدی در این حالت هنرمندانی وجود دارند که قابهای in-between را با re-drawing (دوباره نقاشی کردن) المانهای قاب کلیدی در حالیکه بین قابهای کلیدی در حرکت هستند تولید میکنند.
هرچند ما تصاویر را با برنامهنویسی تولید میکنیم.
بنابراین باید بجای نقاشی با مدلها شروع کنیم.
قابهای کلیدی هر پارامتری که برای تعریف یک تصویر مورد نیاز است را دارند و قابهای in-between مان را برای الحاق این پارامترها ایجاد میکنیم.
انیمیشن ممکن است بعنوان کلکسیونی از رنجیره انیمیشن( در فیلمها، اینها بعنوان shots معروف است)فرض میشود که هر یک از قسمتهای اجزاء، اشیاء، تبدیلات، نورپردازیهای پایهای مشابهی استفاده میکنند.
سپس برای هر زنجیره اجزای یکسان و مجموعه یکسان از پارامترها برای این اجزاء داریم و پارامترها در هنگام عبور از این زنجیره عوض میشوند.
برای هدف انیمیشن خود اجزا مهم نیستند، ما نیاز دایم روی مجموعه پارامترها و راههای تغییر این پارامترها متمرکز شویم.
با انیمیشن keyfrome پارامترها در هنگام تعریف قابهای اصلی ست میشوند و در نوعی حالت در حرکت قابها تجدید میشوند.
برای نمونه مدلی را در نظر بگیرید که در حالتی تعریف شده که این امکان را به ما میدهد که پارامترهایی که رفتارش را کنترل میکنند تشخیص دهیم.
اجازه بدهید که این موضوع را تعریف کنیم… شکل 1-13 شییء که ما animate کردهایم.
برای بحث در مورد روشهای تغییر یک پارامتر برای رسیدن به یک حرکت جرم بین یک قاب اصلی به قاب دیگر نیاز داریم چند اصل را معرفی کنیم اگر مجموعه پارامترها را بعنوان یک بردار واحد فرض کنیم p= آنگاه میتوانیم مجموعه پارامترها را در قاب داده شده M به صورت در نظر بگیریم کار با سکمنت زنجیره قالبهای کلیدی انیمیشینی که با قاب K شروع میشود و به قاب ما میرود.
داریم: و p مقدار بردارهای پارامتر آن دو قاب است در مثالهای بالا میبینیم پارامترها… اولین دستیابی به این الحاق استفاده از الحاق خطی (linear interprotion) مقادیر پارامترها است.
بنابراین اگر ما تعدادی قاب بین این قابهای اصلی داشته باشیم C=L-K است که داریم: برای هر پارامتر و هر عدد صحیح i بین K,L اگر t=i/c باشد میتوانیم معادله را به صورت بنویسیم که راه آشنایی برای بیان الحاق خطی خالص است.
این یک محاسبه مستقیم است و میتواند مقادیر پارامترها با تغییر حرکت قابهای اصلی از این دستیابی اولیه ساده پچیدهتر است.هر چند ما نه تنها حرکت ملایم بین دو قاب کلیدی را میخواهیم بلکه ما باید حرکت قال را قبل و بعد از حرکت ترکیب کنیم.
الحاق خطی توضیح دادهشده در بالا این امر را تأمین نمیکند هر چند بجای آن ما احتیاج داریم که از یک دستیابی الحاقی کلیتری استفاده کنیم که آسانسازی داخل و بیرون حرکت نامیده میشود راه این است که از یک حرکت از نقطه شروع آغاز کنیم و با سرعت بیشتری به وسط برویم و قسمت پایانی را با سرعت کمتری برویم تا جائیکه تغییر پارامترها را متوقف کنیم( و در نتیجه هر حرکتی در تصویر متوقف میشود) وقتیکه در لحظهای که به آخرین قاب زنجیره میرسیم.
در شکل 2-13 مقایسهای بین الحاق خطی ساده درچپ یا الحاق شروع به بالا/ با حرکت کند روبه پائین تدریجی در راست انجام شدهاست.
شکل دست راست که منحنی sinusoidal میتواند با معادله نشان داده شود دیده میشود که در هر دو حالت از t=i/c استفاده میشود مانند پاراگراف بالا بنابراین وقتی t=0 است ما در قاب k هستیم و وقتی t=1 است ما در قاب L هستیم.
شکل 2-13 دو منحنی الحاق: خطی(چپ) و (right)sinusodial درواقع این آسانسازی بداخل و آسانسازی به خارج ممکن است کافی نباشد چرا که برای تأکید به حرکت ممکن است شما بخواهید شییء مورد حرکت قبل از حرکت به جلو به آرامی به عقب حرکت کند.
و مثل از رفتن به بقیه جاها و به پشت جایگاه نهایی برو شما میتوانید ایده بالا را با انجام چنین عملی تطبیق دهید.
برای چنین کاری باید منحنی الحاق را به سمت منفی نمودار ادامه داد.
این نوع حرکت جایی است که انیمیشن تبدیل به هنر شد.
برای تنظیم حرکت آرام در بین قابها همچنان این مشکل وجود دارد که پارامتر میتواند حرکت در یک جهت بالا به قاب اصلی ایجاد کنند و سپس آن حرکت با اثر آن میتواند در هنگام ترک قاب اصلی جهتهای کاملاً متفاوت برو دو به قاب دیگر برود و این در صورتی است که حرکت ما بین قابهای اصلی هنوز آنقدر ملایم نیست برای رسیدن به این موضوع نیاز داریم نوع پیشرفتهتری از الحاق را تهیه کنیم.
اگر ما الحاق درجه دو با درجه سه از معادلات ریاضی در نظر بگیریم که الحاقهای بین تعداتد نقاطی که یکدیگر را قطع میکنند وجود دارد ما نیاز داریم نوعی الحاق که این امکان را میدهد که الحاق هر قاب اصلی را دقیقاً قطع کند به نرمی بین مجموعه قابهای اصلی حرکت کند پیدا کنیم و برای چنین کاری نیاز داریم که بتوانیم پارامترهای هر قاب را بصورتی که دقیقاً به پارامترهای قاب اصلی برسد و بتواند بین مقادیر پارامترها به نرمی حرکت کند مقداردهی کنیم.
از میان انواع مختلف الحاقهای موجود میتوانیم الحاق Catmull-Rom را که در وصل Spline modeling معرفی شدهاست انتخاب کنیم که نوعی از الحاق که در ردیف دوم شکل 3-13 نشان داده شدهاست و کنتراست الحاق نقطه به نقطه در ردیف اول شکل دیده میشود را به ما میدهد.
شکل 3-13 حرکت به داخل و خارج قاب اصلی(چپ و راست تابع زمان است) ردیف بالا: استفاده از الحاق دونقطهای و ردیف پائین استفاده از الحاق چندنقطهای aliasing زمانی: در ایجاد یک انیمیشن شما یک دنباله از تصاویر که حالت مدلتان را در نقاط مشخصی نشان میدهد را ایجاد میکنید.
وقتی این دنباله درست دیده شوند هر چند که شما ممکن است که نتایج را بیابید که تأثیرات شگفتآور بسیاری را که شماگمان نمیکردید نشان دهد بسیاری از این مشکلات ممکن است مربوط به مشکلات سیستمهای گرافیکی باشد.
برای مثال اگر شما یک شیء کوچک دارید آن شیء ممکن است بسیار متفاوت در سایز همچنین در پیکسلهای کمتر یا بیشتر انتخابشده برای شیء بنظر برسد این مشکل aliasing صفحه نمایش است میتواند بوسیله تکنیکهای ضد aliasing برای گنجاندن پیکسلهای portly-coverd در تصویر آدرسدهی نمیشوند.
اما مشکلات دیگر در پردازنده انیمیشن اساسی هستند و نمیتوانند به آسانی حذف شوند شما باید امکان اینکه تصاویرتان در دنباله ممکن است به طور دیگر تغییر شوند نسبت به چیزی که شما تصور کردهاید را تشخیص دهد.
به یک مثال توجه کنید: تصور کنید شما یک شییء چیزی که در شکل 4-13 نشان داده شده دارید( برای مثال این شکل ممکن است پرههای یک چرخ باشد) و این شکل با زمان میچرخد اگر شما شکل را به آرامی بچرخانید چشم بطور طبیعی هر پره را چون درمحل آن تغییر میکند دنبال خواهد کرد زیرا مکان هر پره در frame بعدی چون معادل نزدیکترین پره در frame قبلی است.
اگر شما بخواهید حرکتکردن پرهها را مطابق حرکت عقربههای ساعت نشان دهید و شما شکل را در جهت حرکت عقربههای ساعت به یک زاویه کمتر از 5/22 بچرخانید این حالت اتفاق میافتد مخصوصاً اگر زاویه خیلی کمتر از آن مقدار باشد.
اما اگر شما شکل را یک کم سریعتر بچرخانید با 40 سپس امکان پره در frame بعدی فقط 5 از مکان پره در جهت عقربه ساعت بعدی در fram قبلی خواهد بود و پرهها بنظر میرسد که همانند یک ساعت سرعتسنج میچرخند.
شما ممکن است این اتفاق را در فیلمها یا وقتی یک شییء گردان بوسیله یک نور فرفرهای روشن شدهاست، دیده باشد.
اما مهم این است که بفهیمد این حالت ممکن است و برای ادامه این حالت در کارمان برنامهریزی کنیم.
ساختن یک انیمیشن برقراری ارتباطی که شما بوسیله انیمیشین ایجاد میکنید بسیار شبیه ارتباطی است که یک تهیهکننده ممکن است در یک فیلم از آن استفاده کند فیلم از یک لغتنامه وسیع از تکنیکهای توسعه داده شدهاست که جزئیات انواع اطلاعات انیمیشنها برای برقراری یک ارتباط علمی که میتواند برای اندیشیدن در مورد طرحهایی در محصولات سینمایی مفید باشد خواهد داد اگر شما برای انجام این نوع کار بطور وسیع برنامهریزی کنید شما برای تکنیکهای انیمیشنسازان حرفهای را بخوانید.کتابهایی در مورد انیمیشنها به شما چیزهای بسیاربسیار زیادی را نشان میدهد که شما میتوانید برای پیشرفت نقشهها و کارهایتان آنها را یاد بگیرید در ابتدا شما ممکن است بخواهید انیمیشنهایتان را ساده نگهدارید در یک eyepoint ثابت و نورهای ثابت نگهدارید تنها قسمتهایی از مدل که با زمان برای حرکت در frame هایشان حرکت میکنند آزاد گذاشته میشوند هرچند دقیقاً زمانی که سینما کشف شد ارزش یک دوربین متحرک در یک صحنه متحرک زمانی که آنها تصویر متحرک دوربین و دوربین دستی متحرک را کشف کردند شما ممکن است فهمید که شما بهترین تأثیرها را بوسیله ترکیب یک viewمتحرک با چیزهای متحرک رسیدهاید.
طراحی ارتباط در یک انیمیشن کاملاً متفاوت از مورد مشابه در یک تصویر عادی است رسیدن به یک انیمیشن واقعی درست آزمایش بسیار زیادی میخواهد از جمله تکنیکهای استفاده شده در یک انیمیشن حرفهای storyboard است یک طرح جامع انیمیشن که میگوئیم زمانی که برنامه اجرا میشود چه اتفاقی خواهد افتاد و چه قسمتی از تصاویرمان برای انتقال به viewer در نظر گرفته میشوند.
چند مثال اشیاء متحرک در مدل شما: تا وقتی که انیمیشن شامل حرکت است یک راه برای انیمیشن حرکتدادن چیزهای منفرد در مدلتان است.
ممکن است یک راه ریاضی برای معینکردن مکان یک مکعب در نظر بگیریم برای مثال برای حرکتدادن آن گرداگرد یک فضا این عمل در یک تابع بازگشتی ایدهآل animate( ) که ما در اینجا نمایش میدهیم انجام شده: void annimate (void) { #define deltanTime 0.05 //define position for the cabe by modeling time – based behavior a time += delta time ; if (a time>2.0* PI) a Time -=2.0*PI; cubeX=sin(2.0*aTime); cobeY=cos(3.0*aTime); cube Z= cos ( a Time); glutpostRedisplay( ); این تابع مقادیر سه متغیر که بعضاً بعنوان پارامترها در انتقال به gltranslate*(…) که مکانهای مکعب در فضا هستند استفاده میشوند را جمعآوری میکند.
شما میتوانید بطور مشابه از دیگر انتقالها برای جمعآوری پارامترهای متغیر در جهت سایز یا دیگر خصوصیات اشیاء نیز استفاده کنید.
حرکتدادن قسمتهای از اشیاء در مدلتان: دقیقاً زمانتی که ما کل اشیاء بالا را حرکت دادیم شما میتوانید بخشهای تکی یک مدل heirarahial را هم حرکت دهید.
شما میتوانید مکانهای نسبی زوایای نسبی یا سایزهای نسبی را به وسیله استفاده از متغیرها وقتی که شما مدلتان را تعریف کنید تغییر دهید و سپس مقادیر آن متغیرهارا در یک حالت بازگشتی ایدهآل تغییر دهیم.
شما میتوانید حتی بسیار گمراه شدهباشید و رنگها یا شفافیت را وقتی که آنها به شما کمک میکنند که داستان را بگوئید تغییر کند و شما سعی میکنید با تصاویرتان یک متغیر که به نوبت است استفاده میکند برای جمعآوری یک دوران زاویهای برای جنباندن گوشهای سرخرگوش توصیف شده در بحث مدلسازی وراثتی(hierarchical) استفاده شدهاست.
در این بحث ما شرح گرافی برای سرخرگوش را توسعه دادهایم( شکل 5-13) در اینجا ما توجه داریم که انتقالهایی وجود دارند که مکانهای گوشها روی سر را مشخص میکنند اما ما هنوز آنها را با جزئیات انجام نمیدهیم این کار در کد زیر انجام شدهاست: این کد که یکی از گوشهایی خرگوش را تعریف میکند در زیر آمدهاست.
توجه کنید که تعدادی از انتقالها شامل شده در این پردازه وجود دارند.
اما تنا دوتا از آنها شامل پارامترwiggle که گوشها را از فریم به فریم دیگری حرکت میدهد هستند، بقیه پارامترها انتقالهای ثابت هستندکه از فریم به فریم دیگری تغییر نمیکند: gLpushMatrix( ); // model the left ear gL cdor 3 f(1.0/0.6/0.6); gLRotate f (-10.0*wiggle/0.0/0.0/1.0); gLTranslate f(-1.0/-1.0/1.0); gLRotate f (-45.0/1.0/0.0/0.0); gLTranslate f (0.5/0.0/0.0);//begin gLRotate f(-10.0*.wiggle/0.0/0.0/1.0); gLTranslate f( -0.5/0.0/0.0);//end gL scale f (0.5/0.2.0/0.5); my Quad =gLu New Quadric( ); gLusphere(my Quuad /1.0/10/10); gLpopMatrix( ); یک زاویه بازگشتی (call back) ایدهآل که روی پارامتر wiggle عمل میکند زاویه هر کدام از گوشها را که روی سرگذاشته میشود کنترل میکند بوسیله برنامهریز داده شدهاست: void animate (voide) { #define twori 6.28318 t=+0.01; if( t>twopi)t-=twopi; wiggle= cos (t); glutpostRedisplay( ); } حرکتدادن نقطه دید یا فریم view در مدلتان نوع دیگری از انیمیشن بوسیله یک حرکت کنترلشده گرداگرد یک تصویر برای رسیدن به یک حس کامل از مدل و آزمایش بخشهای ویژه در محلهای ویژه تولید شدهاست.
این حرکت میتواند کاملاً script شدهباشد یا میتواند زیر کنترل کاربر باشد تفکر دومی بسیار مشکل است.
در این مثال چشم از جلوی یک مکعب به پشت یک مکعب حرکت میکند همیشه نگاهکردن به مرکز مکعب است اما یک اثر پیچیده دیگر اگر مسیر دید از میان یک بارزیاب با نقاط کنترلی مشخص شده تعریف شود انجام خواهد شد این ممکن است دوباره وقتی که ما به spline, evalutors نگاه کنیم دید شود.
Voide display(voide) { // use a variable = for the viewpoint , and more it around … gLmatrix Model GL – MODELVIEW; gL LoadIdentity( ); gL uLOOKAT(ep.x,ep.z/0.0/0.0/0.0/0.0/1.0/0.0); }… void anmate(void) { GL float name steps= 100.0/direction [3]={ 0.0/0.0-20} if (ep.z if (ep.z ep.zt=whichway*direction[2]/namsteps; gLutpost Redisplay( ); } هنگامی که شما حرکت میکنید شما نه تنها به کنترل محل نقطه دید نیاز دارید بلکه همچنین به کنترل دید کامل محیط نیز نیاز دارید- در حالتهای ساده لیست کامل پارامتر glut LOOKAT(…) بنابراین نه تنها نقطه دید بلکه همچنین view مرجع نقطهای و بردار بالایی باید در ایجاد یک نقطه view ی متحرک مؤثر پنداشته شود.
بعلاوه هنگامی که شما در اطراف حرکت میکنید شما بعضی وقتها خودتان را در حال حرکت نزدیکتر به اشیاء یا دورتر از آنها پیدا خواهید کرد.
این به این معنی است شما فرصت استفاده از تکنیکهای (level-of-detail) را برای کنترل اینکه چگونه این اشیاء برای بیننده شکل داده شود هنگامی که شما سرعت فریم را به همان زیادی که ممکن است نگهدارید خواهید داشت.
تعداد زیادی کار اینجا برای اینکه همه چیز به درستی انجام شود وجود دارد اما شما میتوانید یک شروع خوب را خیلی آسانتز ایجاد کنید.
تغییردادن ترکیبهای مدلتان: تعداد زیاد دیگری ترکیبات ویژه از مدلهایتان و تصاویرهایتان وجود دارد که شما میتوانید با تغییردادن زمان ارتباط ویژهای خواهید ایجاد کنید.
از جمله آنها شما میتوانید رنگها و خصوصیات نورهایشان، شفافیت سطوح برش دادهشده تیرهشدن نقشههای ترکیبی همچنین روی آنها را تغییر دهید.
همچنین هر چیزی که میتواند با یک متغیر بجای یک مقدار ثابت تعریف شود میتواند ه وسیله تغییرمدل تغییر داده شود.
در یک مثال ویژه برای این تکنیک ما سایز و شفافیت تصویر یک نوع اتم در یک مولکول را تغییر خواهیم داد( ما در شکل 6-13 نشان دادهایم) تغییر در تصویر بوسیله پارامتر t که در یک برنامه بازگشتی (callback) ایدهآل تغییر داده شدهاست تولید شدهاست و پارامتر به نوبت یک تغییر سینوسی در سایز و شفافیت پارامترها در تصویر میدهد.
این به ما برای گذاشتن یک روشنایی برای تأکیدکردن روی این نوع از اتم اجازه خواهد داد.
بنابراین یک کاربر میتواند ببیند که آن نوع اتم با مولکول متناسب است.
این فقط یک شروع کوچک روی همه نوع از چیزهایی است که شما برای متحرکسازی با گذاشتن یک تأکید روی یک قسمت از مدلتان میتوانید انتخاب کنید: Void mollecule(Void) {… j=atoms[I].colindex;//index of color for atom I for( k=o;k {// copy atomcolors[j]adjust alpha by alphamult mycolor[k]=atomcolors[j][k]; } if(j= =CARBON) my color [3]+=alphaAdd; g Lmaterial v(…/mycolor); gLTranslate f (…); if(j= =CARBON) gluspher( atomsphere/sizemult*ANGTOAU(atomsizes[j]/GRAIN/GRAIN; else glusphere(atomsphere/ANGTOAU(atomosizes[j])GRAIN/GRAIN); gLpopMAtrix( ); … } … Void animate(void) { t+=0.1, if (t>2.0*M-PI)t- =2.0* M-PI; sizemult=(1.0+0.5*sin(t)); alphaAdd=0.2*cos(t); g lotpostRedisplay( ); } بعضی نکات قابل ملاحظه وقتی انیمیشنها با openGL انجام میشود.
Void molecule(void) {… j=atoms[i].colidex;//index of color for atom I for(k=o;k {// copy atomcolors[j]odjust alpha by alphaMult mycolor[k]= atomcolors[j][k]; } if(j = =CARBON)mycolor[3]+ =alphaAdd; gLmaterial v (…/mycolor); gLtranslatef(…); if(j = =CARBON) glusphere(atomsphere/sizmult* ANGTOAU(atomsizes[j])/GRAIN/GRAIN); else glusphere(atomsphrer/ANGTOAU(atomsizes[j]/GRAIN/GRAIN); glpopMAtrix( ); … } … void animate(void) { t+ = 0.1;if(t>2.0*M-PI)t- =2.0*M-PI; sizeMult=(1.0+0.5*sin(t)); alphaAdd= 0.2*cos(t); glutpost Redisplay( ); } بعضی نکات قابل ملاحظه وقتی انیمیشنها با openGL انجام میشود.
بعضی چیزها در مورد openGL وجود دارد که برای فهمیدن کاملاً بیشتر آن وقتیکه شما نقطه دیدتان را حرکت دهید نسبت به وقتی که شما بسادگی یک تصویر واحدی ایجاد میکنید نیاز دارید انتقال view بخشی از مدلکردن انتقال جامع است.
اگر شما برای تعریف view هایتان میخواهید از پارامترها استفاده کنید آن نیاز دارد در مکان درست انجام شود.
در تابع display( ) و در viewcube مثال c شما توجه خواهید کرد که مدلکردن انتقال برای یکیبودن جمعآوری شدهاست.
GlutLOOAT(…) تابع فراخوانی شدهاست نتیجه انتقال برای استفاده فرآیند ذخیره شدهاست و سپس پردازشهای دوران فراخوانی میشود.
این انتقال viewiy برای تغییر مکان اشیاء در محل نگهداشته است و سپس یک انیمیشن دقیقاً مشاهده شده نگهداری میشود.
در آخر وقتی شما از نقشههای ترکیبی در انیمیشنها استفاده میکنید دقت کنید همیشه امکان aliasing با نقشههای ترکیبی موجود است وقتی آنها متحرکسازی شوند.
تلاشهای بسیاری در ترکیبات ضد aliasing مخصوصاً در متحرکسازی آنها مهم است.
کد مثالها: همانطور که در بالا ملاحظه کردیم و همانطور که مثالها نشان داد کنترل انیمیشن در ابتدا به وسیله تغییر پارامترهای تصویرتان در یک سیستم بازگشتی (callback) در یک رویداد ایدهآل مدیریت شدهاست.
ما مثالهای مختلفی برای کنترل جنبههای مختلف مدل مشاهده کردیم.
شما باید به همان گستردگی آزمایش کنید شما میتوانید ببینید چه انواعی از چیزها را شما میتوانید کنترل کنید و چگونه شما میتوانید آنها را برای اینکه در یک انیمیشن بعنوان یک ابزار ارتباطی جاری شوند کنترل کنید.
شما باید به ویدئوهای گرافیکی کامپیوتری که برای رسیدن به یک درک کامل از اینکه شما چه کاری میتوانید با این ابزار انجام دهید مشاهده کنید.
بطورکلی هرچند که شما میخواهید از انیمیشنهایی که برروی نمایش متمرکز شده اجتناب کنید و به انیمیشنهای اطلاعاتی نگاه کنید نمایشهای علمی یا کار تکنیکی ایدهآل است.
اما بخاطر داشته باشید که وقتی شما به انیمیشنهای ویدئویی نگاه میکنید شما شاید در حال نگاهکردن به انیمیشنهای سطح نمایش هستید یا کاری که برای تحت تأثیر قراردادن دیگران با مفاهیم انجام شدهاست.
نمایش داده میشود بعضی کارها معمولاً خیلی بسیار طراحی شدهاست و شامل یک تعداد زیادی تفکر است منحرف شده و سیستمهای گرافیکی high-end و ابزارها است کاری که شما در یک روش گرافیکهای کامپیوتری ابتدای کار انجام خواهید داد بسیار بیشتر شبیه انیمیشن peer-level یا personal- level میشود: کاری که برای کشف ایده خود شما یا با همکاری یک دوست یا دانشکده انجام شدهاست.