View Full Version : آموزش DirectX 10
mahdi1373
جمعه 19 شهریور 1389, 16:29 عصر
سلام،
تصمیم گرفتم آموزش DirectX 10 رو برای شما دوستان بگذارم و سعی می کنم آموزشم مفید و کاربردی باشه.
زبان برنامه نویسی استفاده شده C++ و ترجیحا از Visual Studio 2008 استفاده کنید.
نکته:تصاویر استفاده شده در این آموزش و برخی مطالب از کتاب: Introduction to 3D game programming with DirectX 10
نوشته: Frank D. Luna
است.
نکته مهم: استفاده از این مطلب با ذکر منبع آزاد است.
لطفا با نظراتتون به من دلگرمی بدین تا آموزش رو ادامه بدم.:قلب:
لطفا در این تاپیک از بحث و جدال بپرهیزید!
mahdi1373
جمعه 19 شهریور 1389, 16:55 عصر
1.مقدمه:
1.1 چرا DirectX؟
-DirectX عمومی تر است و اغلب نرم افزار های 3 بعدی از آن استفاده می کنند.
-DirectX سریع ترین رابط با سخت افزار گرافیکی است.
-DirectX بار ها استفاده و تست شده است. علاوه بر آن مرتبا در حال بروز شدن است و نسخه های جدید آن ساخته می شود.
2.1 پیش نیاز ها:
برای شروع کار شما به یک کامپایلر C++ (ترجیحا Visual Studio 2008) و DirectX 10 SDK (ترجیحا آخرین نسخه آن یعنی June 2010) نیاز دارید.
آخرین نسخه (Direct X SDK (June 2010 که شامل DirectX 9 , 10 , 11 SDK میباشد.
میتوانید از این لینک دانلود کنید:
http://www.microsoft.com/downloads/d...2-438a3ba730ba (http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba)
برای راحتی کار بعضی از دوستان که نمیتونند این رو دانلود کنند و نمونه برنامه ها هم به دردشون نمی خوره، فایل های Lib , Include رو آپلود کردم.
اینم لینک دانلودش:
حجم فایل: حدود 20 MB
لینک دانلود:
http://rapidshare.com/files/41622602...June_2010_.rar (http://rapidshare.com/files/416226025/Microsoft_DirectX_SDK__June_2010_.rar)
3.1 مستندات و نمونه برنامه ها:
توابع موجود در DirectX و ثابت های آن بسیار گسترده اند. به همین علت ما نمی توانیم همه آن ها را بررسی کنیم. در صورت نیاز به یاد گیری بیشتر هر بخش می توانید به مستندات دایرکت ایکس رجوع کنید و مطلب مورد نظر را جستجو نمایید. مستندات در داخل DirectX SDK و در پوشه Documentation قرار گرفته است.
شکل 1. استفاده از فهرست موضوعی DirectX SDK
http://www.omran-golestan.com/files/images/udixw596lbktqcea45i5.jpg
شکل 2. استفاده از جستجو برای پیدا کردن یک تابع
http://www.omran-golestan.com/files/images/0mnk3v9bme6sze8ctocu.jpg
mahdi1373
شنبه 20 شهریور 1389, 17:29 عصر
خوب، نمونه برنامه ها هم که مشخصه، میتونید از اون ها هم استفاده کنید. در ضمن DirectX یک ابزار برای بررسی راحت تر نمونه برنامه ها به نام SampleBrowser گذاشته که از توی اون میتونید سطح و توضیحات و زبان و .. هر نونه برنامه رو ببینید. این ابزار و تمام نونه برنامه ها توی پوشه Samples در محل نصب DirectX SDK موجوده.
1.4 آماده کردن محیط کار:
به منظور نوشتن برنامه های DirectX باید محیط کار رو برای نوشتن آماده کنید. یعنی باید کتابخانه ها و فایل های هدر رو به برنامه لینک کنید.
khorzu
شنبه 20 شهریور 1389, 17:36 عصر
DirectX سریع ترین رابط با سخت افزار گرافیکی است.
می شه یه منبع که این مطلبو تایید کنه هم معرفی کنید .
mahdi1373
یک شنبه 28 شهریور 1389, 02:19 صبح
می شه یه منبع که این مطلبو تایید کنه هم معرفی کنید .
بیخشید، شاید من در این باره زیاده روی کردم. من منبع خواصی ندارم. من اینو از این جمله کتاب گفتم:
D3DX is fast, at least as fast as general functionality can be.
دعوای DirectX و OpenGL یه دعوای همیشگی بوده. خواهشا تو این تاپیک در باره اش حرف نزنید...
(آقای khorzu شما رو نمیگم ها...!)
Alireza_Iload
جمعه 02 مهر 1389, 02:21 صبح
سلام
من خیلی ممنونم که یکی پیدا شده به ما آموزش بده ! ولی یه نکته : نمیشه dx11 آموزش بدید ؟
ممنون:خجالت:
sia abedi
سه شنبه 13 مهر 1389, 17:10 عصر
آقا پس چی شد؟؟
hi.alir
جمعه 23 مهر 1389, 22:55 عصر
تموم شد؟ :متفکر:
mahdi1373
دوشنبه 26 مهر 1389, 19:12 عصر
از تاخير چند روزه ام عذر خواهي مي کنم، ادامه آموزش:
بعدا راجع به آماده کردن محيط کار مفصلا توضيح ميدم.
2.پيش نياز هاي رياضي:
1.2 بردار ها:
بردار ها يکي از پر استفاده ترين ابزار در برنامه هاي DirectX هستند. بردار پاره خط جهت داري است در فضا. مختصات يک بردار در فضا تعريف نميشد، چون بردار تنها اندازه و جهت دارد و براي مشخص کردن يک بردار همين ها کافي است.
شکل 2-1:
http://www.omran-golestan.com/files/images/pzjrabllbdp6z9nh3h.jpg
1.1.2 تساوي بردارها
با اين تعريف ما از بردار، دو بردار مساوي بردار هايي هستند که اندازه و جهت يکسان دارند. دوباره تاکيد مي کنم: بردار در فضا مختصات ندارد.
نگاهی به شکل 2-1 بندازین. در قسمت الف می بینید که در 3 بردار در صفحه رسم شده اند. در این شکل می توانیم بگوییم بردارA= بردارC. زیرا در شکل، 2 بردار هم جهت و هم اندازه اند.
1.1.3 تعریف بردار
در اینطورت ما می توانیم بردار را با مختصات یک نقطه درفضای 3بعدی مشخص کنیم.
سوال:یعنی چی؟ این که شد نقطه!؟
خیر. همانطور که گفتم بردار در فضا مختصات ندارد. یعنی فرقی نمی کند که از چه نقطه ای شروع شود. یعنی فرقی ندارد که راسش کجا باشد. مهم محل انتهای بردار است نسبت به راس (نقطه شروع ) آن.
در DX3D برای تعریف یک بردار فقط کافی است مختصات انتهای آن را بدانیم. در این صورت بردار از مبدا شروع شده و به مختصات انتهای بردار که شما آن را وارد کرده اید، خاتمه می یابد. در اینصورت هم جهت بردار مشخص شده و هم اندازه اش.
اگه کسی نفهمید بگه!
بنابراین دو بردار مساوی بردار هایی اند که مختصات نقاط انتهایشان یکسان باشد.
در شکل 2-1 نظر کنید! در قسمت ب ، برداری با مختصات (X, Y) رسم کرده ایم که آن را با A= Xi + yj نشان میدهند. توضیحات بیشتر از این رو باید از زمان مدرسه یادتون باشه، من نمیتونم بیشتر توضیح بدم.
1.1.4 تعریف بردار در DX3D:
برای تعریف بردار در DX3D از کلاس D3DXVECTOR3 استفاده می کنیم.
این کلاس به صورت زیر است:
typedef struct D3DXVECTOR3 : public D3DVECTOR
{
public:
D3DXVECTOR3() {};
D3DXVECTOR3( CONST FLOAT * );
D3DXVECTOR3( CONST D3DVECTOR& );
D3DXVECTOR3( CONST D3DXFLOAT16 * );
D3DXVECTOR3( FLOAT x, FLOAT y, FLOAT z );
// casting
operator FLOAT* ();
operator CONST FLOAT* () const;
// assignment operators
D3DXVECTOR3& operator += ( CONST D3DXVECTOR3& );
D3DXVECTOR3& operator -= ( CONST D3DXVECTOR3& );
D3DXVECTOR3& operator *= ( FLOAT );
D3DXVECTOR3& operator /= ( FLOAT );
// unary operators
D3DXVECTOR3 operator + () const;
D3DXVECTOR3 operator - () const;
// binary operators
D3DXVECTOR3 operator + ( CONST D3DXVECTOR3& ) const;
D3DXVECTOR3 operator - ( CONST D3DXVECTOR3& ) const;
D3DXVECTOR3 operator * ( FLOAT ) const;
D3DXVECTOR3 operator / ( FLOAT ) const;
friend D3DXVECTOR3 operator * (FLOAT, CONST struct
D3DXVECTOR3& );
BOOL operator == ( CONST D3DXVECTOR3& ) const;
BOOL operator != ( CONST D3DXVECTOR3& ) const;
} D3DXVECTOR3, *LPD3DXVECTOR3;
لازم به ذکر است که این کلاس از کلاس D3DVECTOR ارث برده:
typedef struct _D3DVECTOR {
float x;
float y;
float z;
} D3DVECTOR;
لطفا اگه سوالی دارید یا جایی رو نفهمیدید بگین توضیح بدم.
در قسمت بعد نحوه ساخت یه برنامه کنسول که توش از کلاس بالا استفاده بشه و همچنین یه سری توابع مربوط به اون رو توضیح میدم.
نظر بدین!
hi.alir
دوشنبه 26 مهر 1389, 21:21 عصر
مگه typedef struct هم class حساب میشه؟
khorzu
سه شنبه 27 مهر 1389, 11:25 صبح
ممنون.
تمامی این قسمت های کتاب توی ترجمه فارسی کتاب برای نسخه 9 انجام شده . به نظرم اگه این بخش ها رو یه لینک ساده بدید به کتاب انتشارات ناقوس و زود تر به DX10 API و خروجی برسیم بهتر می شد.
m54007
سه شنبه 27 مهر 1389, 11:35 صبح
سلام دو ستان
یک سوال داشتم
آیا امکان این هست تا یک بازی که از : DirectX 8 استفا ده می کند را ار تقا به : DirectX 10 یا DirectX 9 دا د ؟
در صور ت جو اب مثبت آیا کسی می تو اند این کار را انجام دهد ؟
با کمال تشکر
hi.alir
سه شنبه 27 مهر 1389, 13:00 عصر
ممنون.
تمامی این قسمت های کتاب توی ترجمه فارسی کتاب برای نسخه 9 انجام شده . به نظرم اگه این بخش ها رو یه لینک ساده بدید به کتاب انتشارات ناقوس و زود تر به DX10 API و خروجی برسیم بهتر می شد.
تایید می شود.
mahdi1373
سه شنبه 27 مهر 1389, 20:49 عصر
ok
پس توابعش رو iهم بگم که تموم شه:
طول بردار:
فرمول:
http://www.omran-golestan.com/files/images/91tkbamwny6ac7rgxon.jpg
تابع:
FLOAT D3DXVec3Length( // Returns ||v||
CONST D3DXVECTOR3 *pV); // Input v مربع طول بردار:
فرمول:
||u||²تابع:
FLOAT D3DXVec3LengthSq( // Returns ||v||2
CONST D3DXVECTOR3 *pV); // Input v نرمال کردن بردار:
فرمول:
http://www.omran-golestan.com/files/images/8qunr9rs76ispwac6q7r.jpg
تابع:
FLOAT D3DXVec3Dot( // Returns v1 · v2
CONST D3DXVECTOR3 *pV1, // Input v1
CONST D3DXVECTOR3 *pV2); // Input v2 ضرب نقطه ای بردار:
فرمول:
u · v = ||u|| ||v||cos θ = uxvx + uyuy + uzvz تابع:
FLOAT D3DXVec3Dot( // Returns v1 · v2
CONST D3DXVECTOR3 *pV1, // Input v1
CONST D3DXVECTOR3 *pV2); // Input v2 ضرب برداری بردار:
فرمول:
u × v = (uyvz − uzvy, uzvx − uxvz, uxvy − uyvx)تابع:
D3DXVECTOR3 *D3DXVec3Cross( D3DXVECTOR3 *pOut, // Returns v1 × v2
CONST D3DXVECTOR3 *pV1, // Input v1
CONST D3DXVECTOR3 *pV2); // Input v2
hi.alir
شنبه 08 آبان 1389, 17:05 عصر
گمونم اگر بخواید این جوری ادامه بدید، ندیده هامون بتونند یه مربع با directx بکشند :لبخند:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.