خوب به نام خدا
در این جلسه که فکر کنم اخرین جلسه برای تعاریف هست مباحثی که از تعاریف مونده رو توضییح میدم تا بریم برای کار با papervision
Primitives
primitives یا اشکال در فلش یه سری از اشکال پیش ساخته در papervision هستن که مثل نرمافزار های سه بعدی که این اشکال رو داخلشون دارن
خوب این primitives زیاد هم نیست و کلا هفت تا هستش که عبارتند از :
1 ) Arrow
2)Cone
3)Cube
4)Cylinder
5)PaperPlane
6)Sphere
7)Plane
البته همه اشکال اینها نیستن بلکه میشه با به ارث بردن بعضی خواص و متد از این اشکال اشکال پیچیده هم ساخت که زیاد سخت هم نیست فکر کنم یه نمونه هم از اینا بزارم
خوب اینم از تعاریف در papervision که تموم شد البته تعاریف زیاده در papervision ، چون فکر میکنم میتونه بعضی از تعاریف درکشون مشکل باشه به خاطر همون اونا رو به بعد میزارم
شروع کار
برای شروع کار میتونین باید کلاس papervision که در پست اول گذاشتم دانلود کنین و در کنار پروزه بزارین
خوب برای اولین کار میخوام نحوه کد نویسی و استفاده از این کلاس رو بگم که یعنی چطوری باید Scene و viewPort و Camera رو ایجاد کرد و ازشون رندر گرفت
مراحل کار
خوب در اول کار ما محیط رو اماده کنیم تا بتونیم یه فضای سه بعدی رو ایجاد کنیم برای شروع ما به این کدها نیاز داریم که همشون رو توضییح میدم
PHP:
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
خوب همانطور که گفتم برای اینکه بتونیم فضای سه بعدی رو تعریف کنیم به چیز زیادی احتیاج نداریم جز یه Scene که فضا و چارچوب کلی هستش یه موتور رندر ساده یک viewport یا پنجره دید و یه دوربین که بتونه کل Scene رو ببینه همین من در این خط کدها هم همینا رو نوشتم خوب برای مرحله اول از هر کدام یه نمونه میسازم
PHP:
var viewport:Viewport3D = new Viewport3D()
var scene:Scene3D = new Scene3D()
var camera:Camera3D = new Camera3D()
var renderer:BasicRenderEngine = new BasicRenderEngine()
و اما متدهایی که این کلاسها اوتا رو قبول میکنه
1) ViewPort
PHP:
public function Viewport3D(viewportWidth:Number = 640, viewportHeight:Number = 480, autoScaleToStage:Boolean = false, interactive:Boolean = false, autoClipping:Boolean = true, autoCulling:Boolean = true)
ViewPort ما مثل هر کلاسی چندتا پارامتر داره که باید اونا رو بگم
viewportWidth = عرض صفحه ای که دراین میبینین - اشتباه نکنین این عرض با عرض فایل swf برابر نیست میتونه با اون برابر باشه و میتونه هم نباشه بستگی به فاصله دوربین از Scene و viewport داره
مثال : شما یه پنجره دارین که با اون پنجره میتونین بیرون رو ببینین این پنجره واسه خودش یه عرض و یه طول داره چشم شما به عنوان دوربین به ازای فاصله ای که از پنجره داره میتونه یه عرض و یه پهنا از محیط بیرون رو ببینه و به ازای یه فاصله مشخص از viewport یه عرض و طول مشخص از Scene رو میبینین
2) viewportHeight = طول viewport
3 ) autoScaleToStage که بسته به اندازه stage فضای دید رو scale کنه یا نه همون مقادیر autiscale فلش
4) interactive یه مقدار boolean مبنی بر اینکه ایا فضای سه بعدی باید با موس یا کیبرد کنترل بشه یا نه
5)autoClipping یه مقدار boolean به معنی اینکه ایا فقط مقدار درون viewport دیه بشه یا نه خارج از این محدوده هم دیده بشه که مشخص میکنه اگه true باشه موتور رندر باید محیط خارج از دید رو هم باید رندر کنه و بر عکس
6) autoCulling که مشخص میکنه ایا ابجکتی که پشت یه ابجکت دیگه هست باید رندر بشه یا نه
متدهای camera
PHP:
public function Camera3D(fov:Number=60, near:Number=10, far:Number=5000, useCulling:Boolean=false, useProjection:Boolean=false)
1) far : نمیدونم چطوری این رو بگم به طور کلی دورترین فاصله از دوربین شما اون عکسی رو که گذاشته بودم رو فرض کنین فاصله صفحه پشتی اون مکعب از دوربین همین مقدار far هستش
2) near فاصله نزدیکتین نقطه از دوربین
3) orthoScale اگه با نرم افزارهای سه بعدی کار کرده باشین ما دو نوع دوربین داریم یکی پرسپکتیو و یکی هم orthographic که این مقدار مقدار جمع شدگی این نوع بعد رو میگه این عکس رو ببینین کامل منظورم رو متوجه میشین
4) useCulling که مال همون متد در viewport و میگه ایا باید از این قابلیت استفاده بشه یا نه
5 ) useProjectionMatrix همون نوع دوم دوربین که باید از این دوربین استفاده کنه یا نه
کلاس Scene هم مانند هم نوع خودش در as3 متدی نداره و بدون متد هست
کلاس BasicRenderEngine مثل Scene متدی نداره
در اخر باید viewport رو به لیست نمایش add کنیم
اگه در اینجا در پنل output این متن رو دیدین بدونین که تا اینجا درست اومدین
PHP:
INFO: Papervision3D Public Beta 2.0 - Great White (December 3rd, 2008)
خوب کار ما در ایجاد محیط سه بعدی تموم شد حالا هر ابجکتی رو که میسازین باید به داخل Scene اضافه کنیم
من برای اتمام کار یه ابجکت از نوع Sphere داخل Scene اضافه میکنم
PHP:
var sphere:Sphere = new Sphere();
scene.addChild(sphere);
در اخر هم باید از پروزه رند بگیرین
PHP:
renderer.renderScene(scene, camera, viewport);
و اینم تمام کدها :
PHP:
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
var viewport:Viewport3D = new Viewport3D();
var scene:Scene3D = new Scene3D();
var camera:Camera3D = new Camera3D();
var renderer:BasicRenderEngine = new BasicRenderEngine();
addChild(viewport);
var sphere:Sphere = new Sphere();
scene.addChild(sphere);
renderer.renderScene(scene, camera, viewport);
بالاخره تموم شده تا جلسه بعدی