نمایش نتایج 1 تا 9 از 9

نام تاپیک: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

  1. #1
    کاربر دائمی
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    مازندران
    پست
    449

    Question ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    سلام بر دوستان
    کسی میتونه بنده رو در مورد ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX راهنمایی کنه اگر نمونه ای هم مثال بزنید بسیار ممنون میشم
    با تشکر از همه اساتید

  2. #2

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    اين يه مثال تو vb6

    ساخت يک موتور گرافيکي سه بعدي

    مباحث جديد برنامه نويسي Direct3D
    اين engine داراي دو کلاس است :
    1 – کلاس MainD3D
    2 – کلاس D3Dobject
    در کلاس MainD3D متغيرها و توابع لازم براي ساخت يک device سه بعدي ، تنظيمات ماتريسي ، تابع رندر و غيره موجود مي باشد .
    متغيرهاي عمومي اين کلاس عبارتند از :
    Public g_DX As New DirectX8
    Public g_D3D As Direct3D8
    Public g_D3DX As New D3DX8
    Public g_D3DDevice As Direct3DDevice8
    Public NTextures As Long
    روتين ها و توابع اين کلاس عبارتند از :
    1 - InitD3D : اين روتين ، اشيا D3D و D3Ddevice را مي سازد و پارامترهاي آنها را تنظيم مي کند .
    2 – ApplyCameraChanges : روتين ايجاد ماتريس View
    3 – SetupMatrices : روتين ايجاد ماتريس Projection
    4 – StartRender : در اين روتين عمليات لازم براي شروع عمل رندر صورت مي گيرد .
    5 – RenderObject : اين تابع ، يک شي سه بعدي از نوع کلاس D3Dobject را مي گيرد و بردارهاي مورد نياز و نيز بافت شي را تنظيم مي کند و در پايان شي را ترسيم مي کند .
    6 – FinishRender : در اين روتين به عمليات رندر پايان داده مي شود .
    7 – Cleanup: روتين از بين بردن اشيا Direct3D
    8 – CreateVector : تابع ساخت يک بردار سه بعدي
    9 – CreateTextures : روتين ساخت يک بافت جديد
    10 – InitTexture: تابع مقداردهي به يک بافت
    در کلاس D3Dobject متغيرها و توابع لازم براي ايجاد يک شي سه بعدي و اختصاص بافت به آن موجود مي باشد .
    در اين کلاس دو type عمومي تعريف شده است :
    1 - NormalVERTEX
    2 - TeturedVERTEX
    همچنين روتين ها و توابع اين کلاس عبارتند از :
    1 – InitObject : تابعي که تنظيمات اوليه vertex ها و بافت شي را انجام مي دهد .
    2 – Vertex : روتين ايجاد vertex هاي مورد نياز
    3 – GetRenderingMode: تابعي که مد رندر را مشخص مي کند .
    و نيز يکسري تابع ساخت vertex نرمال و ساخت vertex داراي بافت و غيره

    اين دو کلاس در يک پروژه ويژوال بيسيک قرارداده شده و پروژه با نام D3Dengine.dll کامپايل شده است .
    حال با استفاده از اين engine مي خواهيم يک منظره سه بعدي را ايجاد کنيم :
    اين منظره شامل سه object است : ديوار ، آسمان و زمين.




    ابتدا بايد يک شي از کلاس MainD3D تعريف کنيم :

    Dim D3D8Main As MainD3D8

    در متد Form Load نيز سه شي Floor ، Sky و Wall را بصورت زير تعريف مي کنيم :

    Dim Floor As D3DObject
    Dim Sky As D3DObject
    Dim Walls As D3Dobject


    سپس اين سه شي را به اضافه شي D3D8Main ، ايجاد مي کنيم :

    Set D3D8Main = New D3DEngine.MainD3D8
    Set Floor = New D3DEngine.D3DObject
    Set Sky = New D3DEngine.D3DObject
    Set Walls = New D3DEngine.D3Dobject

    در ابتدا شي MainD3D را Initial مي کنيم و سپس بافتهاي مورد نيز خود را مي سازيم :

    D3D8Main.InitD3D True, Me.hWnd
    D3D8Main.CreateTextures 3
    D3D8Main.InitTexture 1, App.Path + "\floor.jpg"
    D3D8Main.InitTexture 2, App.Path + "\sky.bmp"
    D3D8Main.InitTexture 3, App.Path + "\wall.bmp"


    حال به سراغ ايجاد و مقداردهي vertex هاي floor مي رويم . floor شامل شش vertex مي باشد و بنابراين دو face مثلثي دارد :

    Floor.InitObject 6, 2, TriangleList, True, 1

    Floor.Vertex 0, -55, -2, -55, vbWhite, 0, 10
    Floor.Vertex 1, 55, -2, -55, vbWhite, 10, 10
    Floor.Vertex 2, 55, -2, 55, vbWhite, 10, 0
    Floor.Vertex 3, -55, -2, -55, vbWhite, 0, 10
    Floor.Vertex 4, 55, -2, 55, vbWhite, 10, 0
    Floor.Vertex 5, -55, -2, 55, vbWhite, 0, 0

    سپس به سراغ ايجاد و مقداردهي vertex هاي wall مي رويم . wall شامل بيست و چهار vertex مي باشد و بنابراين هشت face مثلثي دارد :

    Walls.InitObject 24, 8, TriangleList, True, 3

    Walls.Vertex 0, -55, -2, -55, &HBCE8FC, 0, 1
    Walls.Vertex 1, 55, -2, -55, &HBCE8FC, 5, 1
    Walls.Vertex 2, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 3, -55, -2, -55, &HBCE8FC, 0, 1
    Walls.Vertex 4, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 5, -55, 8, -55, &HBCE8FC, 0, 0

    Walls.Vertex 6, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 7, 55, -2, 55, &HBCE8FC, 5, 1
    Walls.Vertex 8, 55, 8, 55, &HBCE8FC, 5, 0
    Walls.Vertex 9, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 10, 55, 8, 55, &HBCE8FC, 5, 0
    Walls.Vertex 11, -55, 8, 55, &HBCE8FC, 0, 0

    Walls.Vertex 12, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 13, -55, -2, -55, &HBCE8FC, 5, 1
    Walls.Vertex 14, -55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 15, -55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 16, -55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 17, -55, 8, 55, &HBCE8FC, 0, 0

    Walls.Vertex 18, 55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 19, 55, -2, -55, &HBCE8FC, 5, 1
    Walls.Vertex 20, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 21, 55, -2, 55, &HBCE8FC, 0, 1
    Walls.Vertex 22, 55, 8, -55, &HBCE8FC, 5, 0
    Walls.Vertex 23, 55, 8, 55, &HBCE8FC, 0, 0


    حال به سراغ ايجاد و مقداردهي vertex هاي sky مي رويم . sky شامل شش vertex مي باشد و بنابراين دو face مثلثي دارد :

    Sky.InitObject 6, 2, TriangleList, True, 2

    Sky.Vertex 0, -55, 8, -55, &HBCE8FC, 0, 1
    Sky.Vertex 1, 55, 8, -55, &HBCE8FC, 0, 1
    Sky.Vertex 2, 55, 8, 55, &HBCE8FC, 0, 1
    Sky.Vertex 3, -55, 8, -55, &HBCE8FC, 0, 1
    Sky.Vertex 4, 55, 8, 55, &HBCE8FC, 0, 1
    Sky.Vertex 5, -55, 8, 55, &HBCE8FC, 0, 1


    در پايان تابع رندر را صدا مي کنيم . البته در هر بار عمل رندر کردن ، دوربين يک درجه در صفحه X-Z دوران مي کند تا کل ديوار قابل مشاهده باشد :

    Dim Angle As Double
    PI = 3.1415
    Angle = 0
    Do
    DoEvents
    D3D8Main.StartRender vbBlack
    D3D8Main.RenderObject Sky
    D3D8Main.RenderObject Floor
    D3D8Main.RenderObject Walls
    D3D8Main.FinishRender
    If Sqr(Angle ^ 2) = 360 Then Angle = 0
    Angle = Angle + 1
    D3D8Main.CamLookAtX = Sin((Angle * 2 * PI) / 360)
    D3D8Main.CamLookAtZ = Cos((Angle * 2 * PI) / 360)
    D3D8Main.ApplyCameraChanges
    loop

  3. #3
    کاربر دائمی
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    مازندران
    پست
    449

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    از دوستان کسی میتونه بنده رو در مورد Open GL راهنمایی کنه؟؟؟

  4. #4
    کاربر دائمی
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    مازندران
    پست
    449

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    دوست عزیز من نمی خوام گرافیک بزنم در واقع می خواهم 3D Max رو توی برنامم فراخوانی کنم
    این طور که من متوجه شدم شما یک محیط گرافیکی میسازید ولی من فقط می خوام فرا خوانی
    کنم و ازش استفاده کنم
    اگر برداشت نادرستی از کد هاتون داشتم خواهشن بهم بگید و راهنمایی کنید با کمال تشکر.

  5. #5

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    شما بايد از بخش Add Refrence منابع Com منابع مربوط به 3dmax رو به برنامه اضافه كرده با Object browser بايد كلاس ها و متدها رو ببينيد و كلاس ها و توابع مورد نيازتون رو انتخاب كرده و به راحتي روش استفاده از اون كلاس يا متد رو توي اينترنت مي تونين پيدا كنين موفق باشين.

  6. #6
    کاربر دائمی
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    مازندران
    پست
    449

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    میشه بیشتر راهنمایی کنید ؟ ممنون میشم

  7. #7

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    دقيق تر بگين كجاش مبهمه

  8. #8
    کاربر دائمی
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    مازندران
    پست
    449

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

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

    و نکته مهم تر اینکه بر نامم سنگین نشه یعنی روی سیستم های خونگی مختلفی درست کار کنه

  9. #9

    نقل قول: ارتباط بین #C و یک برنامه گرافیکی مثل 3D MaX

    طبیعی که برنامه شما بسته به عملکرد مورد نظر سنگین می شه و اما درمورد سوال شما ، بعد از افزودن رفرنس ها در سلو شن ( یعنی مرحله ای که قبلا توضیح دادم ) شما باید کلاس مورد نظر رو در لیست Namespase ها وارد کرده و خیلی معمولی از متد ها و کلاس های موجود در اون استفاده کنین موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •