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

انشاء الثلوج وتحريكها

مغلق
بدأه DXProg في 23 مايو 2005 · 19 رد · 1,204 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

انا اليوم دخلت في كيفية انشاء الثلوج وتحريكها وحسب ما فهمت من الكود الموجود معي

فان احد الطرق من بين الكثير لانشاء الثلج هي

1- انشاء النقاط D3DPT_POINTLIST

2- تحريك هذه النقاط حسب تغيير موقعهن ....

هل هذه الطريقه صحيحه وهل مفهومي للكود صحيح ؟؟؟

وارجو من احدكم اعطائي كود حسب هذه الطريقه .... وذلك لام الكود الموجود في الكتاب مبعثر وغير متصل ببعضه يعني باختصار لم استطع فهمه مئه بالمئه فلهذا هل يمكن لاحد اطائي كود

ويكون سالم

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#2

انت ماشاء الله سريع للغاية ؟؟

لم اتوقع ان تصل الى مثال الثلوج بهذه السرعة ؟؟؟

لكن بالنسبة للمثال .. هو لايفيد اذا كنت تريد معرفة صنع ثلج ..

الهدف منه هو معرفة كيفية انشاء نظام الجزيئات .. ماهي الجزيئات ..

ماء نار ثلج انفجار ..... نافورة ماء ..

انت تتعلم الفكرة الاساسية من الجزيئات بعدها تتسطيع عمل ماتريد من التأثيرات ..

للاسف انا لا اعرف الكثير عن كيفية انشاء نظام الجزيئات ..

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

اولا واخرا الحمدلله

ولكن هل طريقتي وفهمي للكود صحيح ؟؟

1- انشاء النقاط وتلوينها باللون الابيض

2- تحريك النقاط .... ( تغيير موقعهن كي يتحركن)

ولكن اخي الشمري والاخوى الباقون اذا كان لديكم كود ولو طويل ولكن عن طريقتي وليس طريقه اخرى لانني لم ادخل بالعميق بعد .. فارجو وضعه لي لاني اريد فهمه كوديا وبعدها تطبيقه ...

وشكرا

تم تعديل هذه المشاركة بواسطة DXProg في 23 مايو 2005 في 22:00

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#4

السلام عليكم

" ولكن هل طريقتي وفهمي للكود صحيح ؟؟

1- انشاء النقاط وتلوينها باللون الابيض

2- تحريك النقاط .... ( تغيير موقعهن كي يتحركن) "

نعم يا أخي طريقتك صحيحه

ولكن كما قال الأخ الشمري "انت تتعلم الفكرة الاساسية من الجزيئات بعدها تتسطيع عمل ماتريد من التأثيرات .."

وماقلته أنت هو الفكره الأساسية

واذا فهمت الفكرة الأساسية ما راح يكون في فرق بين التأثيرات غير في كود الحركة وكود التسارع

تحياتي

#5

بالنسبة لحركة الثلج ، أعذرني لا أملك الكود الان

ولكن بامكانك استخدام دالة الجيب أو جيب التمام ( sin or cos ) بتسارع بطئ فهي تعطي نتيجه تشبه حركه الثلج

بالتوفيق ان شاء الله

تم تعديل هذه المشاركة بواسطة الكاسح في 24 مايو 2005 في 03:45

#6

ويمكن أستخدام أيضاً ظل الزاويه أخى Tan وهى أحسنهم فى التزايد البطىء B)

#7

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

واكون شاكرا لكم

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#8

الحركة ببطيء ؟؟

يعني إيه ؟؟؟

يعني هتقلل السرعة ؟؟؟

قلل السرعة -- Velocity ؟

و قلل شوي من الجاذبية Gravity ؟

معلومة :

كل نظام للجزيئات

يجب ان تكون هناك

كتلة mass ، سرعة Velocity ، كمية تحرك Momentum ، جاذبية Gravity ، موضع له " متجه موضع " Position ، عجلة Acceleration

غير في هذه الكميات .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#9

يا خبر :s دانا أفتكرتها أسهل من كده بكتير :lol:

#10
ringojet كتب:
يا خبر  :s  دانا أفتكرتها أسهل من كده بكتير  :lol:

لا تخف طريقة احمد صالح للمتقدمين قليلا

فلا تخف منها استخدم الطرق الاساسيه وهي مثل طريقتي

وشكرا لك احمد صالح

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#11

انا قمت بانشاء النقاط ولكني عجزت عن كيفية حركتهن ....

فساضع الكود هنا وارجو منكم وضع دالة الحركه للنقاط

وشكرا

#include <Windows.h>
#include <mmsystem.h>
#include <d3dx9.h>
#include <strsafe.h>





LPDIRECT3D9             g_pD3D       = NULL; 
LPDIRECT3DDEVICE9       g_pd3dDevice = NULL; 
LPDIRECT3DVERTEXBUFFER9 g_pVB        = NULL; 



struct CUSTOMVERTEX
{
    D3DXVECTOR3 position; 
    DWORD color;   
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)




HRESULT InitD3D( HWND hWnd )
{
    
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

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

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

  
    g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

    
    g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );

    return S_OK;
}




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


    CUSTOMVERTEX* pVertices;
    if( FAILED( g_pVB->Lock( 0, 0, (void**)&pVertices, 0 ) ) )
        return E_FAIL;
    for( DWORD i=0; i<10; i++ )
    {
        FLOAT theta = (2*D3DX_PI*i)/(10-1);
        pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),0.0f, cosf(theta) );
        pVertices[2*i+0].color =D3DCOLOR_XRGB(255,255,255);
        pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 0.3f, cosf(theta));
        pVertices[2*i+1].color=D3DCOLOR_XRGB(255,0,255);
           
    }
    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()
{
    
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,
                         D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
    

        g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
        g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
        g_pd3dDevice->DrawPrimitive( D3DPT_POINTLIST, 0, 2*10-2 );

        g_pd3dDevice->EndScene();
    }

   
    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 )
{
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      "D3D Tutorial", NULL };
    RegisterClassEx( &wc );


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


    if( SUCCEEDED( InitD3D( hWnd ) ) )
    {
        
        if( SUCCEEDED( InitGeometry() ) )
        {
           
            ShowWindow( hWnd, SW_SHOWDEFAULT );
            UpdateWindow( hWnd );

            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;
}

انا اعرف الفكره ولكني مش عارفه اطبقها 100%

اي يمكنني ان اغير الموقع كي تتحرك النقاط ولكن كيف استطيع تحريكها بشكل مستمر وكيف استطيع ان ابدا النقاط من منطقه علويه على شكل ثلج ؟؟؟ وكيف استطيع ان اجمع النقاط العشره مع بعض ليصبح شكل افضل وتقريب للثلج ؟؟

ارجو ايضا وضع كود الحركه بشكل مستمر وتعديل الكود بحيث تبدأ النقاط من منطقه علويه على شكل ثلج ويضا ان تكون نقاط مجموعه ليصبح شضكل مقارب للثلج عند تساقطه

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

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

وشكرا ..

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#12

اي يمكنني ان اغير الموقع كي تتحرك النقاط

D3DXVECTOR3 position;

position ( 50.0f,23.0f,43.0f ) ; ضع متجه الموضع عن النقطة ..

وكيف استطيع ان ابدا النقاط من منطقه علويه على شكل ثلج

غير خامة الجسيمات إلي خامة الثلج

وكيف استطيع ان ابدا النقاط من منطقه علويه على شكل ثلج

اجعل اولاً الصادي لهم ب 0

position.y = 0 ;

D3DXVECTOR3 Velocity(0,0,0); السرعات الابتدائية علي جميع المحاور بصفر

float gravity = 1.1;

position.y = position.y +velocity.y

velocity.y = velocit.y + gravity;

بعد الجاذبية محاكاة لها

وكيف استطيع ان اجمع النقاط العشره مع بعض ليصبح شكل افضل وتقريب للثلج ؟؟

ضع بعد العشوائية بنسبة صغير علي المحور س و صادي للثلج

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#13

تسلم اخي احمد

ولكن هل تستطيع ان تضع هذه المعلومات على شكل كود داخل داله اسمها مثل update()

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

واكون شاكرا لك

تم تعديل هذه المشاركة بواسطة DXProg في 25 مايو 2005 في 14:32

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#14

و ماذا استفدته انت ؟

ستري الكود شغال و بعد ؟

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#15
احمد صالح كتب:
و ماذا استفدته انت ؟

ستري الكود شغال  و بعد ؟

ليست مشكلتي بفهم الطريقه وما عليه عمله ..!

مع شكري لشرحك اخي ولكن انا فاهم بعض الاشياء التي شرحتها انت والبعض الاخر فاستفدته منك ولكن بالاساس انا اريد تطبيق كودي لاني وبصراح احاول ولا تنجح محاولتي يعني عندما اضع موقع النقاط الذي اعطيتني اياه انت فلا تظهر النقاط ابدا

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

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

وشكرا

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#16

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

وايضا ارجو التعديل في الكود الذي وضعته ( ارجعو لردين الى الوراء) كي تبدا النقاط العشر من مكان واحد وبالاخر نشرها في كل الفضاء وذلك بسبب حركتها .. احمد صالح ارجو ان تقوم بذلك ان كان لك الوقت وارجو من باقي الاعضاء بافادتي بكود حتى لو كان كود جاهز فانا فاهم الفكره وكيفية تنفيذها ولكن مش عارف كيف اتطبقها فكل مره لا انجح وينقصني الكثير فقد تشتت افكاري

حيث ارجو افادتي وشكرا

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#17

انا انتظر

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#18

كنت اتمنى مساعدتك لكن لا اظن انه يوجد من يساعدك .. على الاقل في هذه الجزئية .. لان المحترفين قليل .. ولكن حاول ان تبحث عن دروس عن الجزيئات في مواقع برمجة الالعاب ... اتمنى لك التوفيق ..

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#19

ولكن هذه مجرد طريقه يستطيع اي احد التفكير بها وفهمها

لا اظن انها للمتوسطين حتى

انها مجرد انشاء النقاط وتحريك النقاط

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#20
الشـمري كتب:
كنت اتمنى مساعدتك لكن لا اظن انه يوجد من يساعدك .. على الاقل في هذه الجزئية .. لان المحترفين قليل .. ولكن حاول ان تبحث عن دروس عن الجزيئات في مواقع برمجة الالعاب ... اتمنى  لك التوفيق ..

ظن ان كلامك صحيح

والدليل هو عدم التفاعل الى من الاخ احمد .. كما وارجو ان يفيدني الاخ احمد

وشكرا

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

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

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