الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

امثله دايركت اكس للمناقشه

مغلق
بدأه majnona_ في 16 أبريل 2005 · 7 رد · 1,213 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم جميعا

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

اليوم ساضع مثال بسيط ( للمتوسطين والمحترفين) وسنبدا بمناقشته حتى نفهمه جميعا

هذا المثال شرحه مسبقا الاخ HGB ولكني بصراحه لم افهم هذا الشرح 100% ربما فهمت 70% منه ( في اول يوم فهمت 70% :D )

سيكون امثله اخرى غير هذا المثال ولكن سنبدا تدريجيا

المهم :--

المثال هو

#include <d3d9.h>




LPDIRECT3D9             g_pD3D       = NULL;   // Used to create the D3DDevice
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL;      // Our rendering device
LPDIRECT3DVERTEXBUFFER9 g_pVB        = NULL;      // Buffer to hold vertices


struct CUSTOMVERTEX
{
    FLOAT x, y, z, rhw;          // The transformed position for the vertex
    DWORD color;           // The vertex color
};

// Our custom FVF, which describes our custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)




HRESULT InitD3D( HWND hWnd )
{
    // Create the D3D object.
    if( NULL == ( g_pD3D = Direct3DCreate9(D3D_SDK_VERSION ) ) )
        return E_FAIL;

    // Set up the structure used to create the D3DDevice

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    // Create the D3DDevice

    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }

    // Device state would normally be set here

    return S_OK;
}




HRESULT InitVB()
{
    // Initialize three vertices for rendering a triangle

    CUSTOMVERTEX vertices[] =
    {
        { 150.0f,  50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
        { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },
        {  50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
    };

    // Create the vertex buffer. Here we are allocating enough memory
    // (from the default pool) to hold all our 3 custom vertices. We also
    // specify the FVF, so the vertex buffer knows what data it contains.

    if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
                                                  0, D3DFVF_CUSTOMVERTEX,
                                                  D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
    {
        return E_FAIL;
    }

    // Now we fill the vertex buffer. To do this, we need to Lock() the VB to
    // gain access to the vertices. This mechanism is required becuase vertex
    // buffers may be in device memory.

    VOID* pVertices;
    if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
        return E_FAIL;
    memcpy( pVertices, vertices, sizeof(vertices) );
    g_pVB->Unlock();

    return S_OK;
}




VOID Cleanup()
{
    if( g_pVB != NULL )        
        g_pVB->Release();

    if( g_pd3dDevice != NULL ) 
        g_pd3dDevice->Release();

    if( g_pD3D != NULL )       
        g_pD3D->Release();
}





VOID Render()
{
    // Clear the backbuffer to a blue color
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

    // Begin the scene
    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        // Draw the triangles in the vertex buffer. This is broken into a few
        // steps. We are passing the vertices down a "stream", so first we need
        // to specify the source of that stream, which is our vertex buffer. Then
        // we need to let D3D know what vertex shader to use. Full, custom vertex
        // shaders are an advanced topic, but in most cases the vertex shader is
        // just the FVF, so that D3D knows what type of vertices we are dealing
        // with. Finally, we call DrawPrimitive() which does the actual rendering
        // of our geometry (in this case, just one triangle).


        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
        g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

        // End the scene
        g_pd3dDevice->EndScene();
    }

    // Present the backbuffer contents to the display


    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}





LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
          Cleanup();
            PostQuitMessage( 0 );
            return 0;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
}





INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    // Register the window class


    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      "D3D Tutorial", NULL };
    RegisterClassEx( &wc );

    // Create the application's window


    HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 02: Vertices",
                              WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
                              GetDesktopWindow(), NULL, wc.hInstance, NULL );

    // Initialize Direct3D


    if( SUCCEEDED( InitD3D( hWnd ) ) )
    {
        // Create the vertex buffer

        if( SUCCEEDED( InitVB() ) )
        {
            // Show the window

            ShowWindow( hWnd, SW_SHOWDEFAULT );
            UpdateWindow( hWnd );

            // Enter the message loop

            MSG msg;
            ZeroMemory( &msg, sizeof(msg) );
            while( msg.message!=WM_QUIT )
            {
 if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
                else 

               
Render();
            }
        }
    }

    UnregisterClass( "D3D Tutorial", wc.hInstance );
    return 0;
}

اخوتي ارجو ان يقوم احدكم شرح هذا المثال بدقه كي نفهمه جميعا

وارجو التركيز على الاسئله التاليه لكل داله

لماذا نحتاجها؟؟

ما هي برامتراتها ؟؟ واي البرمترات مهم ؟؟

ما هو استخدامها ؟؟

ماذا تفعل( اي ما هو عملها )؟؟ ما هي مهمتها؟؟

وارجو من بقية الاخوه الاضافه

ارجو ان ينال هذا الموضوع رضى الكل وان يتفاعل به اكبر عدد ممكن

وشكرا

تم تعديل هذه المشاركة بواسطة majnona_ في 16 أبريل 2005 في 21:26

#2

اعتذر اخوي عن التفاعل لاني لا اعرف شي عن الدايركت اكس

لكن بانتظار الباقين...

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

السلام عليكم

الشـمري كتب:
اعتذر اخوي عن التفاعل لاني لا اعرف شي عن الدايركت اكس

لكن بانتظار الباقين...

لا بأس اخي وانا ايضا انتظر الباقي

وشكرا...............

#4

السلام عليكم

وين التفاعل يا جماعه

وشكرا...........

#5

السلام عليكم

طبعا الموضوع رائع للمناقشة ... و لكن الDirectX مباشرة !!!

من الأفضل أن ندرس أولا كيفية صناعة المحركات للألعاب و إستعمالها للألعاب بدون إستعمال أي من DX & OGL لكي تستطيع بعدها برمجة محركك بالـ DirectX بسهولة و إن شاء الله يوم الجمعة سنبدأ في برمجة المحركات للألعاب الثائية الألعاب... طبعا مع أمثلة ... و إن شاء الله راح يكون الشرح أحسن من المرات السابقة

و بعد المحركات ندخل في الفيزياء و الرياضيات و برمجة بعض الألعاب مثل RPG ... إن شاء الله

و بعد ذلك ندخل في DirectX

و متأسف جدا إن كان الرد ليس في مكانه

و السلام

#6
GameDev4Arab كتب:
السلام عليكم

طبعا الموضوع رائع للمناقشة ... و لكن الDirectX مباشرة !!!

من الأفضل أن ندرس أولا كيفية صناعة المحركات للألعاب و إستعمالها للألعاب بدون إستعمال أي من DX & OGL لكي تستطيع بعدها برمجة محركك بالـ DirectX بسهولة و إن شاء الله يوم الجمعة سنبدأ في برمجة المحركات للألعاب الثائية الألعاب... طبعا مع أمثلة ...  و إن شاء الله راح يكون الشرح أحسن من المرات السابقة

و بعد المحركات ندخل في الفيزياء و الرياضيات و برمجة بعض الألعاب مثل RPG ... إن شاء الله

و بعد ذلك ندخل في DirectX

و متأسف جدا إن كان الرد ليس في مكانه

و السلام

اولا الرد في مكانه ونصف ونصف ونصف * 10000000000000000000

وذلك لانك نبهتني عن اشياء حقا لا اعرفها

وهي :-

1- هل علينا اولا ان نبدا بالمحركات ولماذا ( اعرف انك قلت السبب ولكن ارجو التوضيح اكثر)؟؟

2- وهل بعد المحركات الفيزياء وبعدها الرياضيات وبعدها برمجة بعض الالعاب ؟؟؟

3- وهو سؤالي الاساسي -----

هل الفيزياء والرياضيات والمحركات قبل الدايركت اكس ولماذا ..... كما وانني اعرف اننا يجب علينا البدا بالدايركت اكس ومن ثم بعدها الامور التي ذكرتها انت

فارجو التوضيح.........................

وان كان هذا ما يفعله الجميع فارجو اعطائي كتاب عن كيفية صناعة المحركات للالعاب ... وشكرا

وشكرا ................

تم تعديل هذه المشاركة بواسطة majnona_ في 17 أبريل 2005 في 16:43

#7

جيد :)

اقتباس
1- هل علينا اولا ان نبدا بالمحركات ولماذا ( اعرف انك قلت السبب ولكن ارجو التوضيح اكثر)؟؟

سأقول لك :

إن بدأت مباشرة بالـ DirectX فستجد صعوب إن أردت أن تبرمج محرك مثلا ::

تخيل أنك تجيد صنع المحركات إلى درجة الإحتراف ... طبعا سيكون هذا رائعا و لن ينقص محركك بعد ذلك إلى القليل من DirectX كي يكون كاملا ...

و تخيل أنك تجيد DirectX إلى درجة الإحتراف و أنك لا تعرف شىء عن برمجة المحركات ... طبعا هذا غير منطقي أصلا و ...

اقتباس
2- وهل بعد المحركات الفيزياء وبعدها الرياضيات وبعدها برمجة بعض الالعاب ؟؟؟

أما الفيزياء و الرياضيات فلا وقت لهما أي يمكنك دراستهما في أي وقت ... و لكن من الأفضل دراستها قبل الدايركت اكس

اقتباس
هل الفيزياء والرياضيات والمحركات قبل الدايركت اكس ولماذا ..... كما وانني اعرف اننا يجب علينا البدا بالدايركت اكس ومن ثم بعدها الامور التي ذكرتها انت

المحركات قبل الدايركت اكس :: بأنها الضرورية و أما عن الفيزياء و الرياضيات فكما قلت لك سابقا

و لا أعرف إن كان الجميع هذه هي طرقتهم و لكنها طريقتي و بالنسبة للكتب راجع موضوع هذا الموضوع : كتب السي++ و أوبن جي إل و ديريكت اكس و برمجة الأ..

#8

شكرا...

هذا الموضوع مغلق.

مواضيع مشابهة