PDA

مشاهده نسخه کامل : برنامه نویسی DirectX با #C :



K A S R A
28-04-08, 02:01
برنامه نویسی DirectX با C# :

سلام به دوستان گلم . :give_rose:

مدتی هست که دارم روی Game Programing کار می کنم ...
انصافا توی این زمینه منبع و Ebook فارسی واقعا نایابه ... هر چی هست همگی لاتین .

تو این مدت به یه نتایجی تو زمینه Game Programing رسیدم . :great:
که می خوام توی این تاپیک مطرح کنم و روشون بحث کنیم . :1. (40):

پروژه های DirectX در مقایسه با برنامه های معمولی به قدرت پردازشی بیشتری برای اجرا نیاز دارند ,
البته پیچیدگی این برنامه ها ذاتا بیشتر تر از برنامه های Win App معمولیه ,
اونم به خاطر ریاضیاتی هست که توشون به کار میره ...بیشتر برنامه های DirectX بازیها هستند , ولی قدرت DirectX فقط محدود به بازی نمیشه ...

توی این برنامه ها قبل از هرچیزی باید سادگی برنامه رو مد نظر داشت ,

کارایی برنامه توی پروژه های بزرگ و پیچیده اهمیت بیشتری داره .برای پروژه های DirectX به دو تا نرم افزار یا Toolkit نیاز هست : Vstudio.net و DirectX SDK .

شکی نیست که قدرت زبان C++ برای نوشتن هوشمندی اشیا موجود در بازی بیشتر از C# هست ,
اما نوشتن کلاسهای پنجره و API های DirectX توی این زبان واقعا کار سختیه .

من خودم عاشق ++C هستم اما باید قبول کرد نوشتن برنامه های کاربردی ویندوزی با ++C کار طاقت فرساییه

به نظر من با C# هم میشه کارای بزرگی در حد C++ انجام داد
ضمن اینکه به جای گیر کردن توی کد نویسی می تونیم زمان بیشتری رو صرف ارتباط با Framework بکنیم .

این تاپیک ان شالله با جزییات خیلی خیلی بیشتری ادامه پیدا می کنه ...


موفق باشید

:11():

MoBiN.R
28-04-08, 12:32
عالی بود کسری جان .. انشالا ادامه داشته باشه . نمیدونم چرا دکمه تشکر ارور میده . در ضمن یه کاری واسه دانلود DirectX SDK بکن یا اگه میتونی بگیر تیکه تیکه کن فایلشو و واسه دانلود بزار ..

K A S R A
30-04-08, 17:42
سلام دوستان : :give_rose:

نکته : ( الان امکانات Editori همگی غیر فعال هستند واسه همینم این پست به ساده ترین شکل ممکن نوشته شده ... ولی در اولین فرصت Edit میشه )

یه توضیحی راجع به DirectX SDK بدم که بیشتر فایلهاش DLL. هست و سرفایل هاشم خیلی زیاده .
توی هر پروژه ی DirectX هم از تعداد خیلی زیادی سرفایل استفاده میشه که اکثرشون هم DLL هستند .
تازشم قبل از استفاده از DirectX Library باید اونو به Visual Studio معرفی کرد تا سرفایل هاش معتبر بشن ...

خلاصه اینکه هیچ راهی نیست باید دانلود بشه .

توی این تاپیک راه انداختن یک پروژه خالی Empty Project رو برای شروع کار برنامه نویسی DirectX به اضافه تنظیمات اولیه برای استفاده از DX SDK رو میگم .

قدم اول راه اندازی Vstudio 08 .... ( بذارید یکم سریعتر جلو برم )
.
.
.
قدم آخر : ایجاد یک پروژه Win App ساده با زبان #C ...

خب این پروژه های #C به صورت پیشفرض اسمشون Class1.cs هست ... میتونید هر اسمی رو واسش انتخاب کنید . اسمش مهم نیست .

دو تا فضای نام اساسی برای پروژه های DX رو باید به فایل سورس اضافه کنید ...
1 - using Microsoft.DirectX
و 2 - using Microsoft.DirectX.Direct3D هست ...
می دونید که فضای نام ها توی #C همگی به صورت فایلهای Dll هستند .

قسمت مهم کار اینجاست :

از منوی Project گزینه Add Refrence رو انتخاب می کنیم .

توی کادر محاوره ای که باز میشه دکمه Browse رو می زنیم .

آدرس شاخه ای که DX SDK اونجا نصب شده رو پیدا می کنیم .
فولدر Developer Runtime رو پیدا می کنیم .
به همین ترتیب ادامه میدیم تا به این شاخه برسیم ... x86->DirectX for Managed Code

این چند تا فایل رو پیدا می کنیم ...

Microsoft.DirectX.Direct3D.DLL
Microsoft.DirectX.Direct3DX.DLL
Microsoft.DirectX.DLL
System.Drawing
System.Windows.Forms ...

خب بعدش دکمه OK رو می زنیم .

این چند تا Dll به عنوان Refrence های برنامه ما به Vstudio معرفی شدن .

با انجام این تنظیمات رسیدیم به نقطه شروع کار برای DX Programing With #C ...

ادامه دارد ...

:11():
کسری
:11():

K A S R A
02-05-08, 23:17
یک برنامه بسیار ساده DirectX :

برنامه ای که با Render کردن پیاپی صفحه نمایش ( فرم اصلی برنامه ) اجرا میشه و تا زمانی که باز باشه ... این کار رو ادامه میده . ..

با این دستور برنامه کار رو شروع میکنیم :




Device DX_Device = null; // Drawing device
این دستور متغیر DX_Device را مقدار دهی اولیه می کند .

به بیان ساده این متغیر همون Virtual VGA هست که توی برنامه ما ازون استفاده می کنیم .

خب برای پنجره برنامه یه سری اطلاعات نیاز هست که اونارو اینجا وارد می کنیم :



public UsingDirectX()
{

this.ClientSize = new Size(800,600); // Specify the client size

this.Text = "DirectX Program "; // Specify the title

{
دستورات بالا به قدر کافی خوانا هستند و احتیاج به توضیح اظافه ندارن .


خب در قدم بعدی باید به Device بگیم که چجوری صفحه نمایشگر رو Render کنه .



public bool InitializeDirect3D()
{
try
{
PresentParameters pps = new PresentParameters();
pps.Windowed = true; // Specify that it will be in a window
pps.SwapEffect = SwapEffect.Discard; // After the current screen is drawn, it will be automatically // deleted from memory
DX_Device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, pps); // Put everything into the device
return true;
}
catch(DirectXException e)
{
MessageBox.Show(e.ToString(), "Error"); // Handle all the exceptions
return false;
}
}
قسمت بعدی برنامه روش و مکانیزم رندر کردن صفحه نمایش رو توضیح میده ...



private void Render()
{
if(DX_Device == null) // If the device is empty don't bother rendering
{
return;
}

DX_Device.Clear(ClearFlags.Target, Color.White, 1.0f, 0); // Clear the window to white
DX_Device.BeginScene();

// Rendering is done here

DX_Device.EndScene();
DX_Device.Present();
}



اینم قسمت آخر برنامه همون تابع Main عزیز که همه دستورات اجرایی برنامه تو این تابع اتفاق می افته ...



static void Main()
{

UsingDirectX form = new UsingDirectX(); // Create the form
if (form.InitializeDirect3D() == false) // Check if D3D could be initialized
{
MessageBox.Show("Could not initialize Direct3D.", "Error");
return;
}
form.Show(); // When everything is initialized, show the form
while(form.Created) // This is our message loop
{
form.Render(); // Keep rendering until the program terminates
Application.DoEvents(); // Process the events, like keyboard and mouse input
}
}



ساختار این برنامه بسیار ساده می تونه ایده شروع برنامه نویسی DirectX رو در بر داشته باشه .

ساختار تابع Render
حلقه Message Loop
مقدار دهی متغیر DX_Device
فضا های نام برنامه
ایجاد و مقدار دهی پنجره اصلی برنامه
و
توابع Direct3D به کار رفته در کد برنامه ...
همشون می تونن به برنامه نویس ایده بدن . :cool:

موفق باشین
:11():

K A S R A
19-07-08, 03:08
سلام گرم به همه دوستان :give_rose:
توضیح چند اصطلاح :

Vertex :
در گرافیک سه بعدی هر شئ از مولفه هایی تجزیه ناپذیری تشکیل می شود . این مولفه ها , نقاطی در فضای سه بعدی هستندکه دارای سه مولفه ی x, y, z می باشند و اصطلاحا به آنها گره یا Vertex گفته می شود .

VertexBuffer :
بافر گره قسمتی از حافظه کارت گرافیک است که در آن مختصات گره های سازنده اشیا و مدل های گرافیکی قرار دارد . توضیح اینکه این فایل ها قبلا توسط نرم افزار های گرافیکی در قالب فایل های خاصی ساخته شده اند .

Texture :
در لغت به معنی بافت می باشد در اینجا اصطلاحا به معنی بافت اطلاعات تصویری دو بعدی است . تصویری که بر روی اشیا سه بعدی قرار می گیرد را Texture گویند .

TextureMapping :
عملیات بافت زنی به فرایند نگاشت تصاویر بر روی اشیا و مدل های سه بعدی به منظور واقعی جلوه دادن و جنسیت دادن به اشیا.

Render :
در لغت به معنی پرداخت می باشد و اصطلاحا به فرآيند ساخت تصاوير دو بعدي از روي اجسام سه بعدي اطلاق ميشود که شامل عمليات تبديل هندسي ، نور پردازي و برش ميباشد .

Material :
رنگ یک شئ در دنیای واقعی در اثر انعکاس نور از خود شئ می باشد , مثلا یک توپ قرمز رنگ , قرمز است چون تمامی رنگ های نور را جذب می کند به جز قرمز . در نتیجه قرمز از توپ منعکس می شود و سبب می شود توپ به این رنگ دیده شود.
در Direct3D مکانیزم مشابهی برای جنسیت بخشیدن به اشیا به کار رفته و ما میتوانیم برای سطح شئ یک Material ماده تعریف کنیم . این Material کمک می کند که نحوه انعکاس نور از شئ برای LighingEngine تعریف شود .

mbs_saeed
22-05-09, 17:37
سلام
خسته نباشید. این تاپیکتون فوق العده است وخیلی به دردم خورد .
من پروژه ی پایانیمو یه بازی سه بعدی انتخاب کردم میخواستم بدونم که برای ایجاد object های سه بعدی به چه روشی از object های سایر نرم افزار های سه بعد ی ساز مثل Maya و 3dsmax استقاده کنم؟
ممنون

pilomax2
23-07-09, 21:39
سلام بچه ها حالتون خوبه من pilomax2 هستم من Direcx كار كردم تا دلتون بخاد يه جزوه دارم به زبان فارسي كه كلي آموزش ميده در حد اين كه يه بازي جنگي مثل حتي CALL of Duty يا جيوه سرخ يا خيلي بازي هاي دگه درست كنيد
همچي تو دستاي شماست
200 صفحه است البته زبان اطليش رو هم دارم 700 صفحه اگه خواستيد بهم ايميل بزنيد
:wink:shikago_compiler@yahoo.com

™Ali
24-07-09, 17:49
سلام بچه ها حالتون خوبه من pilomax2 هستم من Direcx كار كردم تا دلتون بخاد يه جزوه دارم به زبان فارسي كه كلي آموزش ميده در حد اين كه يه بازي جنگي مثل حتي CALL of Duty يا جيوه سرخ يا خيلي بازي هاي دگه درست كنيد
همچي تو دستاي شماست
200 صفحه است البته زبان اطليش رو هم دارم 700 صفحه اگه خواستيد بهم ايميل بزنيد
:wink:shikago_compiler@yahoo.com

شخصا با این کار که ایمیل برنید به من موافق نیستم!

اگر چیزی دارید بذارید اینجا تا همه استفاده کنند! الان باید بری سایت یاهو، ایمیل باز کنی، تایپ کنی و ایمیل بزنی! و معلوم نیست کی جواب بگیری! و منم حوصله این کارا رو ندارم :1. (38):

به هر حال اگر کسی از ایشون این مقاله رو گرفت اینجا واسه همه بذارند :1. (21):

vahidarr
19-10-10, 20:55
سلام آقا کسری من در یه در دنبال کتاب انگلیسی در باره این موضوع هستم لطفا منبع بذاربد

ghalibaie
17-12-10, 12:10
سلام به دوستان گرامی
از pilomax2 عزیزخواهش می کنیم که مطالب مفیدشونو اینجا بذارن

™Ali
20-12-10, 00:33
سلام به دوستان گرامی
از pilomax2 عزیزخواهش می کنیم که مطالب مفیدشونو اینجا بذارن

برادر تاریخ تاپیک رو ظاهرا ندیدی ! Only the registered members can see the link