اموزش papervision

javadsava

New Member
برای اینکه پست های من همش خواهش و سوال نباشه این آموزش دست و پا شکسته رو می زارم.

Interactivity

برای ایجاد تعامل فعال بین کاربر و محیط سه بعدی باید از کلاس InteractiveScene3DEvent استفاده کنیم. من در این جا از سورس arjmand200 که تو پست های اولش گذاشته بود استفاده می کنم . توی این سورس ما یک کره در حال گردش می بینیم. حالا می خواهیم وقتی کاربر روی کره کلیک کرد در پانل output یک چیزی نوشته بشه.

در ابتدا باید کلاس InteractiveScene3DEvent رو اضافه کنیم:
import org.papervision3d.events.InteractiveScene3DEvent;

بعد از اون باید interactive متریالی که برای کره استفاده کردیم رو فعال کنیم. برای این کار بعد از تعریف متریال این کد رو اضافه می کنیم:
matrial_bmp.interactive = true;

قدم بعدی اضافه کردن EventListener (که من اون رو گوش دهنده ی رخداد ترجمه می کنم) به کره هست. EventListener دو پارامتر می گیره که اولی نوع رخداد مورد انتظار و دومی تابعی هست که با روی دادن رخداد باید اجرا بشه.
بنابراین بعد از افزودن کره به scene ، کد زیر رو اضافه می کنیم:
sphere.addEventListener( InteractiveScene3DEvent.OBJECT_PRESS, press );

همانطور که می بینید من تابع press رو به عنوان پارامتر دوم معرفی کردم. حالا باید این تابع رو اضافه بکنیم:
function press(e:InteractiveScene3DEvent){

trace("sphere");
}

حالا هر موقع روی کره کلیک کنیم کلمه sphere در پانل output نوشته می شه.

****************************************************************
اساتید محترم اگر جایی رو اشتباه گفتم لطفا تصحیح کنید.
 

arjmand200

Member
با سلام خدمت همه دوستداران فلش در اینجا من به خاطر قولی که داده بودم اموزش papervision رو میخوام بذارم البته نه بصورت کامل بلکه بصورتی که دوستان بتونن کارهای سه بعدی خودشون رو که به صورت ساده هست انجام بدن و برای کارهای پیشرفته بهتون مراجع خارجی رو پیشنهاد میدم .

و اما papervision
دوستان من میخوام در چند جلسه ، اموزش این کلاس رو بزارم و به خاطر اینکه این کلاس خیلی وسیع هستش و اطلاعات ما هم ناقص هر کسی فکر میکنه میتونه کمک کنه بیاد و در نوشتن این پست یاریمان کنه من در اول میخوام در مورد این کلاس و تعاریف و در جلسات بعدی اموزشهای اون رو بزارم البته برای این که بتونین این اموزشها رو خودتون انجام بدین زیاد لازم نیست که as3 بلد باشین و اشنایی کم هم میتونه کارتون رو راه بندازه اما برای کارهای حرفه ای همیشه به دانسته های حرفه ای نیاز هست خوب من برای شروع بگم که من این کلاس رو در همین انجمن واسه دانلود گذاشتم این هم لینکش


اینم اولش بگم که هر گونه اشتباه تایپی که باشه به خاطر اینه که بنده عجله دارم

و اما شروع :

ببینید دوستان اونایی که با فلش مدتی هستش کار میکنن اکثرشون از اینکه فلش بهشون اجازه نمیداد که بعد سوم رو در کارشون وارد کنن خیلی شاکی بودن بعضی از این گروه که یکم ریاضیشون خوب بود خودشون تونستن این مشکل رو تا یه جای حل کنن اما دسته دیگه مثل من که ریاضیشون ضعیف بود نمیتونستن این مشکل رو حل کنن برای همین سراغ این کلاسهای سه بعدی رفتن اما از طرف دیگه این کلاس صرفا برای بعد سوم نبود و خصوصیات زیادی داشت مثل موتور رندر ، قابلیت تکسچر گذاشتن ، قابلیت نور و سایه و موتور فیزیکی این کلاس که خوب باری هر حرفه ای در فلش ساختن این چیزها زیاد اسون نبود و واسه همینه که این کلاس اینقدر پیشرفت کرد

خوب تعارف papervision :

قبل از اینکه شما بتونین با این کلاس کار کنین باید چندتا تعریف رو بدونین تا بتونین باهاش کار کنین و اما تعاریف :

1) Scene:
ببیند Scene یا چشم انداز که در فلش 9 به بعد معرفی شد البته به عنوان کلاس چون قبلا در خود فلش بود ولی نه به عنوا کلاس در اکشن اسکریپت ، همون فضایی هستش که تمامی عناصر شما در اونجا هستش یه شما یه فضای سه بعدی رو فرض کنین که در این فضا هر عنصری هست (یعنی موی کلیپ ، sprite ، text ، video ) و غیره
این فضا همون Scene هستش
شما میتونین هر عنصری رو که در به این فضا اضافه کنین همون طور که در فلش با addChild هر ابجکتی رو به stage وارد میکردین در این جا هم میتونین با addChild هر عنصری رو که میخواین به Scene وارد کنین و خوب به تبع هر چی رو که وارد کنین باید ازش یه رندر بگیرین (قابل توجه دوستان سه بعدی کار ) البته با این تفاوت که همه ابجکتهای شما در این Scene علاو بر متد هایی که قبلا داشت چند متد دیگه بهشون اضافه شده مثل ( z , rotationX , rotationY , rotationZ و ]چند متد دیگه که در ادامه مباحث خواهم گفت
اینم واسه اینکه بدونین منظورم چیه

projfilm.jpg


2) Viewport
Viewport یا فضایی که نشون داده میشه و اصلا سه بعدی نیست و دوبعدیه
یه مثال برای اینکه دقیق منظور رو از Viewport بدونین چیه همان صفحه مانیتور ، این صفحه یک Viewport هستش که البته داخلش یه Scene هستش که میتونین هر چیزی رو ببیند این Viewport متد زیاد خاصی نداره و اکثرا برای کنترل طول و عرض و کنترل بر امدگی و چندتا متد دیگه هستش که بعد اونا رو میگم
این قسمت هم در عکس کاملا مشخصه

3) Renderer
Renderer یا موتور رندر papervision که قسمتی هستش که هر چی رو که شما در Scene دارید بسته به نوع زاویه Camera رندر میکنه و 3 نوع داره که عبارتند از BasicRenderEngine، LazyRenderEngine ،
QuadrantRenderEngine که بعدا میگم چه نوع موتوری رو باید بسته به کارتون انتخاب کنین البته اخری که مشخصه یه موتور حرفه ای که قدرت تصویر کردنش زیاده

4)Camera
Camera یا دوربین که کاملا مشخصه چیه و مثل یه دوربین میتونه قسمتی از کار رو که جلوی لنز هست رو نشون بده این دوربین هم 4 توع هستش که عبارتند از
1) Target
2)Free
3)Debug
4)Spring
که این ها رو هم در جلسه بعدی خواهم گفت که جه دوربینی بیرای چه کاری خوب هست

4) materials
papervision این قابلیت رو به شما میده که هر ابجکتی رو که دارین بهش متریال بدین این متریال همه چی میتونه باشه عکس ، ویدیو و فایل swf و color و انواع زیادی داره که عبارتند از
BitmapAssetMaterial
BitmapColorMaterial
BitmapFileMaterial
BitmapMaterial
BitmapViewportMaterial
BitmapWireframeMaterial
ColorMaterial
MovieAssetMaterial
MovieMaterial
VideoStreamMaterial
WireframeMaterial
و یه قابلیت دیگه برای سایه زنی برای هر ابجکت که عبارتند از
CellShader
EnvMapShader
FlatShader
GouraudShader
ILightShader
IShader
LightShader
PhongShader
ShadedMaterial
Shader
ShaderCompositeModes
البته قول نمیدم همشو توضییح بدم ولی تا یه جاهایی رو توضییح میدم چون واقعا خودم هم با همشون کار نکردم بخصوص این اخریا واسه سایه زنی که خیلی سنگینه و واسه سیستم من که خیلی زغالی کاربرد نداره

البته papervision چندتا قابلیت دیگه برای متریال سازی پیشرفته داره که فقط اسمشون رو میذارم
BitmapParticleMaterial
CompositeMaterial
FogMaterial
Letter3DMaterial
LineMaterial
MovieAssetParticleMaterial
MovieParticleMaterial
ParticleBitmap
ParticleMaterial
VectorShapeMaterial
که این partical متریالها واقعا استثنایی هستن ئ در همه موتورهای سه بعدی نیست فکر کنم حتی تو نرمافزارهای سه بعدی هم این امکانات نیستن

خوب این جلسه تموم شد تا جلسه بعد
موفق باشین
 

arjmand200

Member
خوب جلسه دوم رو شروع میکنم احتمالا تعاریف در این جلسه خاتمه پیدا کنه و در جلسات اینده نحوه استفاده رو بهتون میگم
خوب در جلسه اول با متریالها بحث رو تموم کردم حالا با متریالها شروع میکنم و انواع اونها رو میگم

1) Bitmap materials
همونطور که از اسمش برمیاد برای اینه که برای هر ابجکتی که درست میکنین یک متریال با عکس استفاده کنین یعنی فقط از نوع bitmap ، اگه با bitmap در as3 کار کرده باشین میتونین 2 نوع bitmap داشته باشین یا اون رو با کلاس bitmapData , Bitmap خودتون تولید کنین یا از بیرون یه عکس رو لود کرده یا عکس رو از کتابخانه لود کنین سخن کوتاه کنم که در هر صورت با این کلاس فقط میتونین متریال از نوع bitmap رو بر روی ابجکت ست کنین

2)Color materials
این هم برای ست کردن متریال از نوع color هستش که میتونیه هم از نوع solid یا از نوع gradient باشه

3) Movie materials
میتونه از نوع فایل swf که از خارج لود میشه و یا از نوع movieClip که ازداخل تولید میکنین

4) Shaded materials
قبلیت جدیدی در papervision که از ورژن دو به بعد معرفی شد و اما برای توضییح میتونم این رو بگم که یک نوع از متریال از نوع های بالا هستش که میتونه بسته به محل قرار گرفتن light سایه رو ابجکت ایجاد بشه عینا مثل حالت طبیعی که باهاش روبرو میشین و 4 نوع داره که میتونین با عکس کاملا منظورم رو متوجه بشین

1) Cell

CellMaterial.JPG


2)Flat Shade

FlatShadeMaterial.JPG


3 )Gouraud

GouraudMaterial.JPG


4) Phong

PhongMaterial.JPG


===============================================

البته یه نوع از متریال هست که از نوع videoStream هستش که کاملا مشخصه که میتونین ویدیو هایی که از بیرون لود میکنین به صورت Stream به عنوان متریال به ابجکت ست کنین این دیگه خیلی جالبه

یه نوع WireframeMaterial هم هستش که متریال نیست و ابجکت رو به صورت برهنه نشون میده

متریالهای از نوع partical ها هم بمونه واسه اخر چون خیلی درکشون مشکله و پیچیده هستن

در اینجا میشه گفت که تعاریف تموم شده در جلسه بعدی به انواع اشکال در papervision میپردازم و چند مبحث دیگه
 

arjmand200

Member
خوب به نام خدا
در این جلسه که فکر کنم اخرین جلسه برای تعاریف هست مباحثی که از تعاریف مونده رو توضییح میدم تا بریم برای کار با 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 که این مقدار مقدار جمع شدگی این نوع بعد رو میگه این عکس رو ببینین کامل منظورم رو متوجه میشین

3d_projection.jpg


4)  useCulling که مال همون متد در viewport و میگه ایا باید از این قابلیت استفاده بشه یا نه
5 ) useProjectionMatrix همون نوع دوم دوربین که باید از این دوربین استفاده کنه یا نه

کلاس Scene هم مانند هم نوع خودش در as3 متدی نداره و بدون متد هست
کلاس BasicRenderEngine مثل Scene متدی نداره

در اخر باید viewport رو به لیست نمایش add کنیم
PHP:
addChild(viewport);

اگه در اینجا در پنل 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);

بالاخره تموم شده تا جلسه بعدی
 
آخرین ویرایش:

arjmand200

Member
خوب جلسه چهارم رو شروع میکنم
این جلسه رو با ادامه مباحث جلسه قبل شروع میکنم جلسه قبل ما موفق شدیم یه ابجکت از نوع Sphere ایجاد کنیم حالا میخوام این کار رو تکمیل کنم و نحوه اضافه کردن متریال و چندتا نقطه دیگه رو بگم .

خوب برای شروع میخوام چند نقطه در مورد انواع ابجکتها و متدهای این ابجکتها بگم

دوستان من در جلسه قبلی با استفاده از این کد یه کره ساختم در حالی که این تابع برای ایجاد کره چند متد داشت که اونجا نگفتم ولی میخوام تو این جلسه توضییح بدم

PHP:
var sphere:Sphere = new Sphere();

این تمامی متدهای ابجکت Sphere هستش :

PHP:
public function Sphere( material:MaterialObject3D=null, radius:Number=100, segmentsW:int=8, segmentsH:int=6 )

1) material : خوب پارامتر اول material که از نوع MaterialObject3D هستش برای اینه که شما بتونین برای این ابجکت یه متریال بسازین که در ادامه نحوه ساختن رو میگم

2) radius شعاع کره
3) segmentsW و segmentsH دوستان مقدار segment در دو راستای horizental و vertical هستش که اجزایی که باید کره ما رو تشکیل بده مشخص میکنه ، هر چه این سگمنتها بیشتر باشه کره کاملتر و دقیقتر و هر چه کم باشه کره دارای دقت کمی خواهد بود

خوب حالا برای اینکه بتونیم یه متریال به ابجکتمون نسبت بدیم باید این متریال رو بسازیم برای اینکار میتونیم از متریالهایی که گفتم استفاده کنیم که اوناع مختلفی داره من میخوام از نوع BitmapMaterial استفاده کنم

برای شروع باید این خط کد رو رو اضافه کنیم :
PHP:
import org.papervision3d.materials.BitmapMaterial;

چون ما هنوز کلاس BitmapMaterial رو وارد پروژه نکرده بودیم در مرحله بعد با این خط کد یه نمونه از این کلاس رو میسازیم :

PHP:
var bmp:BitmapData = new BMPMaterial(800,600)
var matrial_bmp:BitmapMaterial = new BitmapMaterial(bmp)
 

دوستان کلاس BitmapMaterial دوتا ورودی میگیره :

PHP:
public function BitmapMaterial( asset:BitmapData=null, precise:Boolean = false)

asset : همونطور که مشخصه یه نمونه از کلاس BitmapData که اگه اشنایی دارین یه کلاس هستش که میتونین با اون یه DisplayObject از نوع Bitmap رو بسازین

**** من در اینجا این نقطه رو میگم که مخاطب این اموزشها کسایی هستن که حداقل با این کلاسها در فلش کار کردن و اشنایی دارن وگرنه بدون درک مفاهیم اساسی در فلش نمیشه این اموزشها رو درست یاد گرفت ****

من در اینجا یه عکس رو وارد کتابخانه فلش کردم و اون رو با linkage به نام BMPMaterial به اکشن اسکریپت ایمپورت کردم حالا شما با استفاده از این کد میتونین این عکس رو به عنوان یه متریال به BitmapMaterial ست کنین

تا یادم نرفته این رو هم بگم که اون پارمتر دوم هم دقت متریال رو افزایش میده
حالا کار ما تموم شد ما با این کد این متریال رو به کره نسبت میدیم

PHP:
var sphere:Sphere = new Sphere(matrial_bmp,550,40,40);

من برای اینکه بتونیم تمام اطراف کره رو ببینیم با این خط کد کره رو میچرخونم

PHP:
addEventListener(Event.ENTER_FRAME , mainFun)
function mainFun(e:Event){
	
	sphere.rotationY +=10
	
	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;
import org.papervision3d.materials.BitmapMaterial;

//در اینجا از این کلاسها یه نمونه میسازم
var viewport:Viewport3D = new Viewport3D(800,600);
var scene:Scene3D = new Scene3D();
var camera:Camera3D = new Camera3D();
var renderer:BasicRenderEngine = new BasicRenderEngine();
var bmp:BitmapData = new BMPMaterial(800,600)
var matrial_bmp:BitmapMaterial = new BitmapMaterial(bmp,true)


//بدنه اصلی پروژه هم اینجاست
addChild(viewport);
var sphere:Sphere = new Sphere(matrial_bmp,550,40,40);
sphere.x =0
sphere.y = 0
scene.addChild(sphere);
addEventListener(Event.ENTER_FRAME , mainFun)
function mainFun(e:Event){
	sphere.rotationY +=10
	renderer.renderScene(scene, camera, viewport);
}



 
 

پیوست ها

  • sample tutorial.zip
    600.4 کیلوبایت · بازدیدها: 257
آخرین ویرایش:

arjmand200

Member
خوب جلسه بعدی چون هر روز دو جلسه داریم

*** خوب این نقطه رو هم بگم دوستان اگه پیشنهادی یا انتقادی دارن مطرح کنن تا از نظرات دوستان هم استفاده کنیم هر کسی هم که میتونه کمک کنه بسم الله ....

خوب در این جلسه میخوام کار با primitives ها و یه مقداری هم کار با متریالها رو بگم

primitives


خوب همونطور که گفتم ما 7 نوع primitives داریم که نوع Sphere رو گفتم و 6 نوعش موند

1) Cone :  مثل Sphere هستش با یه متد اضافی :

PHP:
public function Cone( material:MaterialObject3D=null, radius:Number=100, height:Number=100, segmentsW:int=8, segmentsH:int=6 )

2) Cube

PHP:
public function Cube( materials:MaterialsList, width:Number=500, depth:Number=500, height:Number=500, segmentsS:int=1, segmentsT:int=1, segmentsH:int=1, insideFaces:int=0, excludeFaces:int=0 )

1 ) materials:MaterialsList : خوب دوستان MaterialsList چیه ؛ دوستان مکعب ما یه ابجکت 6 وجهی که هر وجهش باید یه متریال داشته باشه برای اینکار ما با متریال لیست میتونیم برای هر وجه مکعب یه متریال ست کنیم نحوه کار با اونهم خیلی ساده هست

اینم یه نمونه کد واسه متریال لیست ، البته در مورد MovieAssetMaterial جلسه بعدی توضییح میدم
برای تست این کد هم باید یه موی کلیپ بسازین و در کتابخانه اون رو با نام CUbeMat به اکشن اسکریپت export کنین


PHP:
// من کلاسهایی رو که در این پروزه لازمه رو در اینجا وارد میکنم
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.MovieAssetMaterial;

//در اینجا از این کلاسها یه نمونه میسازم
var viewport:Viewport3D = new Viewport3D(800,600);
var scene:Scene3D = new Scene3D();
var camera:Camera3D = new Camera3D();
var renderer:BasicRenderEngine = new BasicRenderEngine();

var material:MovieAssetMaterial = new MovieAssetMaterial("CUbeMat", true, true);
material.doubleSided =true;
var material_list:MaterialsList = new MaterialsList();
material_list.addMaterial(material, "all");

//بدنه اصلی پروژه هم اینجاست
addChild(viewport);
var sphere:Cube = new Cube(material_list,550,550,400,20,20,20,2,2);
sphere.x =0;
sphere.y = 0;
scene.addChild(sphere);
addEventListener(Event.ENTER_FRAME , mainFun);
function mainFun(e:Event) {
	sphere.rotationY +=10;
	renderer.renderScene(scene, camera, viewport);
}



2) width , height , depth , segmentS , segmentH و SegmentT رو که هم مشخصه

3) excludeFaces : وجهایی که نباید باشه
4) اونیکی هم برعکس اینه

در اخر یه نمونه از این ابجکت میزارم

//////////////////////////////

3) Cylinder متهدهای این ابجکت هم اینجاست و کاملا مشخصه و چیزی واسه گفتن نداره

PHP:
public function Cylinder( material:MaterialObject3D=null, radius:Number=100, height:Number=100, segmentsW:int=8, segmentsH:int=6, topRadius:Number=-1, topFace:Boolean=true, bottomFace:Boolean=true )

4)PaperPlane خیلی ساده ست همون هواپیما که بچگی ها میساختیم :wink:

PHP:
public function PaperPlane( material :MaterialObject3D=null, scale :Number=0 )

5) Plane

PHP:
public function Plane( material:MaterialObject3D=null, width:Number=0, height:Number=0, segmentsW:Number=0, segmentsH:Number=0 )

خوب ابجکتها تموم شدن

6) Arrow اینم که خیلی ساده

PHP:
public function Arrow( material:MaterialObject3D=null )


خوب ابجکتها هم تموم شد

--------------------------------

متریالها

خوب همون طور که گفتم ما 11 تا متریال داشتم که عبارتند از :

BitmapAssetMaterial
BitmapColorMaterial
BitmapFileMaterial
BitmapMaterial
BitmapViewportMaterial
BitmapWireframeMaterial
ColorMaterial
MovieAssetMaterial
MovieMaterial
VideoStreamMaterial
WireframeMaterial

اون 6 تای اولی میشه گفت شبیه هم هستن
متریال نوع Color ساده ترین نوع از متریالهاست
MovieAssetMaterial تقریبا شبیه BitmapAssetMaterial هستش با این تفاوت که از نوع موی کلیپ هستش
VideoStreamMaterial یکم پیچیدس ولی با یه مثال میشه اون رو هم فهمید
WireframeMaterial هم مثله Color متریاله با این تفاوت که ابجکت رو به صورت برهنه نشون میده

این جلسه هم تموم شده انشالله در جلسه بعدی مفصل در مورد متریالها بحث خواهد شد
پس تا جلسه بعدی
 

BioDread

Banned
سلام
در Primitives و در Cube میشه بیشتر راجع به دو پارامتر آخر توضیح بدی

من این طوری فهمیدم که excludeFaces برای وجه های بیرونی هست و InsideFace برای وجه های درونی!!!


درسته؟


پس چرا من وقتی مقدار excludeFaces رو برابر با 6 و مقدار insideFace رو برابر با 0 میزارم دو تا از وجه های خارجی حذف میشن


لطفا راجع به این دو پارامتر بیشتر توضیح بده!!!
 

arjmand200

Member
اره یکم عجله کردی
چون میخواستم امروز در مورد متریال لیست صحبت کنم
ولی حالا که پرسیدی جوابت رو میدم .
ببین درسته که insideFaces برای وجه داخلی ولی ما که نمیتونیم یه متریال یا موی کلیپ بسازیم که دو طرف داشته باشه البته در اکشن اسکریپت منظورم نیست یعنی با اکشن اسکریپت میشه این متریال رو ساخت که دو تا وجه داشته ولی با خود ابزارهای رسم منظورمه که در موردش توضیح میدم
ببین کلا insideFaces رو هر عددی بزاری تغیری حاصل نمیشه یعنی اصلا ما متریالی نداریم که یه صفحه پشتی داشته باشه شما میتونی فقط excludeFaces رو تغیر بدی یعنی میتونی بعضی از وجهای بیرونی رو حذفش کنی ولی نه با این اعداد چون درسته کد excludeFaces مقدار init میگیره ولی این نوع اعداد رو نه بلکه این اعداد رو قبول میکنه :

PHP:
static public var FRONT  :int = 0x01;
	
		/**
		* Back face selection
		*/
		static public var BACK   :int = 0x02;
	
		/**
		* Right face selection
		*/
		static public var RIGHT  :int = 0x04;
	
		/**
		* Left face selection
		*/
		static public var LEFT   :int = 0x08;
	
		/**
		* Top face selection
		*/
		static public var TOP    :int = 0x10;
	
		/**
		* Bottom face selection
		*/
		static public var BOTTOM :int = 0x20;

ولی کار با این اعدا شاید واست سخت باشه به خاطر همین من با این روش که میگم کار کن
ببین ما 6 وجه بیرونی داریم که عبارتند از (front , top, bottom,left,right,back) درسته حالا شما میخوای وجه (Top,left,right) رو نداشته باشی پس در پارامتر excludeFaces این کد رو وارد کن
ببین این روش راحته یا نه

PHP:
Cube.RIGHT+Cube.LEFT+Cube.TOP

این کد میگه ما وجهای top , left , right رو نمیخوایم


Cube.face not view​

اینم نمونه رو هم میذارم تا خودت یکم باهاش کار کنی تا منظورمه بفهی
 

پیوست ها

  • material.rar
    244.9 کیلوبایت · بازدیدها: 103

BioDread

Banned
مرسی از راهنماییت
ببین در MovieMaterial در پارامتر جهارم precise هست که تو گفتی برای بالابردن کیفیت متریال هست (حتما هر کسی که می خواد متریالی رو بندازه روی شی ای با بالاترین کیفیت می خواد ولی در همه موارد مقدار precise برابر با false هست)

چرا شما true نمیزاری این مقدار رو؟
 

fafa^mx

Member
هنوزم اتفاقات جالب اینجا میفته! چه جوونای خوبی! نه عزیزم هر کسی Material رو با بهترین کیفیت نمی خواد بسته به نوع و حجم Process کار این قضیه متفاوت! و البته precise هم برای بالا بردن کیفیت نیست به صورت مستقیم برای انجام محاسبات به صورت دقیق تره که در نهایت باعث میشه که segment ها مرتبطر و منطبق تر با perspective قرار بگیرند.
 

arjmand200

Member
هنوزم اتفاقات جالب اینجا میفته! چه جوونای خوبی! نه عزیزم هر کسی Material رو با بهترین کیفیت نمی خواد بسته به نوع و حجم Process کار این قضیه متفاوت! و البته precise هم برای بالا بردن کیفیت نیست به صورت مستقیم برای انجام محاسبات به صورت دقیق تره که در نهایت باعث میشه که segment ها مرتبطر و منطبق تر با perspective قرار بگیرند.

ممنون از شما دوست عزیز
خوشحال میشم با هم این تایپیک رو ادامه بدیم

ببینید چندتا دلیل داره که یکیش اینه که سیستم من ضیعیفه ، دومیش مال اینه که من میخوام هر کسی که خواست بتونه این فایلها رو تست ، اگه قرار بر این بود که من بهترین کیفیت فایلها رو بزارم من میتونستم موتور رندر رو عوض کرده و از موتور QuadrantRenderEngine استفاده میکردم و سگمنتهای ابجکت رو هم افزایش میدادم که کار سختی هم نیست ولی من این کار رو نکردم تا اینکه همه بتونن از کدها استفاده کنن در ضمن من اولش عرض کردم من از موتور رندر BasicRenderEngine استفاده میکنم و قرار دادن precise بروی true زیاد فرق نمیکنه و اصلا اگه روی true هم بذاری با این موتور تغییر زیادی حاصل نمیشه در ضمن افزایش دقت material زیاد با تغییر این پارامتر فرق نمیکنه بلکه به چندتا پارامتر از جمله camera , renderer و چند تا پارامتر دیگه هم بستگی داره که بعدا توضییح میدم

زیاد عجله نکنین !!!!!!
 

BioDread

Banned
هنوزم اتفاقات جالب اینجا میفته! چه جوونای خوبی! نه عزیزم هر کسی Material رو با بهترین کیفیت نمی خواد بسته به نوع و حجم Process کار این قضیه متفاوت! و البته precise هم برای بالا بردن کیفیت نیست به صورت مستقیم برای انجام محاسبات به صورت دقیق تره که در نهایت باعث میشه که segment ها مرتبطر و منطبق تر با perspective قرار بگیرند.
به به به
آره هنوز اتفاقات خوبی میوفته
نمونش شما که بعد چند وقت یه پست دادی!!!
اگه اشتباه نکنم اسمت فرید بود نه؟
این FAPE چی شد - قرار نیست تکمیلش کنید؟

آقا چی شد یادی از فقیر فقرا کردی؟
میگم همه آدرس گم میکنن شما آدرس اشتباهی زدی :lol:
 

BioDread

Banned
ممنون از شما دوست عزیز
خوشحال میشم با هم این تایپیک رو ادامه بدیم

ببینید چندتا دلیل داره که یکیش اینه که سیستم من ضیعیفه ، دومیش مال اینه که من میخوام هر کسی که خواست بتونه این فایلها رو تست ، اگه قرار بر این بود که من بهترین کیفیت فایلها رو بزارم من میتونستم موتور رندر رو عوض کرده و از موتور quadrantrenderengine استفاده میکردم و سگمنتهای ابجکت رو هم افزایش میدادم که کار سختی هم نیست ولی من این کار رو نکردم تا اینکه همه بتونن از کدها استفاده کنن در ضمن من اولش عرض کردم من از موتور رندر basicrenderengine استفاده میکنم و قرار دادن precise بروی true زیاد فرق نمیکنه و اصلا اگه روی true هم بذاری با این موتور تغییر زیادی حاصل نمیشه در ضمن افزایش دقت material زیاد با تغییر این پارامتر فرق نمیکنه بلکه به چندتا پارامتر از جمله camera , renderer و چند تا پارامتر دیگه هم بستگی داره که بعدا توضییح میدم

زیاد عجله نکنین !!!!!!
الان متوجه شدم
باشه
 

جدیدترین ارسال ها

بالا