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

كيفية انشاء تطبيق يهيئ Direct3d

بدأه 852147 في 29 يوليو 2008 · 11 رد · 3,014 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا أخب time1

بعد المعركة الطاحنة في قسم c++ والذي كان بطله أنا ضد ربط ملفين منفصلين :P :blush: :blush: :blush:

ومع تدخل الجنرالان :lol: :lol: :lol: فهد الشلوي و time1خرجت رابحا لكن بخسارة كبيرة هذيان واحتراق الدارات الدماغية

المهم اقترح على أخي time 1

انشاء تطبيق لم أفهم منه شيئا يقول لي ا لمف كذا والآخر كذا ودالات الرسم

ممكن يشرح لي طريقة انشاء مشروع متكامل لتهيئة direct3d

وشكرا

تم تعديل هذه المشاركة بواسطة 852147 في 29 يوليو 2008 في 21:37

#2

اهلين اخي ,

نفس المثال CreateDevice الموجود مع امثلة الـ SDK , تستطيع ان تفصل فيه اكثر , على سبيل المثال سأقسم المشروع إلى ثلاثة ملفات :

الاول: Direct3DPreparation.h

#ifndef Direct3DPreparation.H
#define Direct3DPreparation.H

#include<string>
#include<d3dx9.h>

namespace d3d
{
	bool InitD3D(HINSTANCE hInstance ,int ,int,
		bool ,D3DDEVTYPE ,IDirect3DDevice9 **);

LRESULT CALLBACK WndProc(HWND hwnd ,UINT msg,WPARAM wParam,LPARAM lParam);

int MsgLoop(bool(*)(float),bool *);

template<class T> void Delete(T t)
	{
		delete t;
		t=0;
	}

template<class T> void Release(T t)
	{
		t->Release();
		t=0;
	}
}

#endif

الثاني :

Direct3DPreparation.cpp

#include"Direct3DPreparation.h"

bool d3d::InitD3D(HINSTANCE hInstance ,int width,int height,bool windowed,D3DDEVTYPE deviceType,IDirect3DDevice9 ** MyDevice)
	{

		Direct3DCreate9(D3D_SDK_VERSION)


		CreateWindow


		D3DPRESENT_PARAMETERS


		WNDCLASS 


		GetDeviceCaps

		CreateDevice
	}

///////////////////////////////////////////////////////////////////


	d3d::MsgLoop(bool(*ptr)(float td),bool *level);
	{


	/////CODE/////


	}

الثالث :

Main.Cpp

#include"Direct3DPreparation.h"
IDirec3DDevice9 *MyDevice;

bool Preparation()
{
	//Code
	return true;
}

void Cleanup()
{
	//Code
}

bool Draw(float td)
{

	//Code
	return true;
}
LRESULT CALLBACK d3d::WndProc(HWND hwnd ,UINT msg,WPARAM wParam,LPARAM lParam)
	{
		switch(msg)
		{
		case WM_DESTROY:
			::PostQuitMessage(0);
			break;
		case WM_KEYDOWN:
			if(wParam==VK_ESCAPE)
				::DestroyWindow(hwnd);
			break;
		}
		return ::DefWindowProc(hwnd,msg,wParam,lParam);
	}

int WINAPI WinMain(HINSTANCE hinstance,
				   HINSTANCE prevInstance, 
				   PSTR cmdLine,
				   int showCmd)
{
	d3d::InitD3D(hinstance,Width, Height, true, D3DDEVTYPE_HAL,
		&MyDevice));

Preparation();
	bool action=true;
	d3d::MsgLoop( Draw,&action );

	Cleanup();

	MyDevice->Release();

	return 0;
}

لاحظ بان اي دوال رسم تستطيع ان تضيفها إلى الملف Main وتبقى الملفان "Direct3DPreparation.h" و "Direct3DPreparation.cpp" من اجل التهئية فقط , مثل الاكواد السابقة , بالاضافة إلى انك تستطيع ان تضيف تعريف الالوان وبنية الرئوس داخل "Direct3DPreparation.h"

تحياتي . . . :blush:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#3

يا اخي لما التعب ؟ انظر الي محرك الخط الاحمر في القسم و ستجد قالب بسيط لذلك :(

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#4

المشكلة ليست في انني لااعرف الكود الذي يقوم بتهيئة direct3d

بل المشكلة هي في ربط الملفات

فكرتي هي كالتالي

انشئ نافذة في ملف وحده

ثم class لتهيئة في ملف آخرdirect3d

مثلا دوال الرسم في ملف آخر

ودوال تحميل المراحل والشخصيات في ملف آخر

ثم أضع ملف واحد أستخدم الدوال التي أريدها

هذه هي الفكرة

مثل المثال emtyproject

في direct3d sdk

ممكن الطريقة وليس الكود

يعني طريقة ربط الملفات مع بعضها البعض

أرجو ألا أكون أثقلت عليكم بطلبي هذا فانا الآن منذ اسبوع

وانا أحاول ولم أفلح

#5

81 قراءة ولا رد واحد ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#6

اعمل ملف main.cpp و خليه فيه الgame loop و تحميل النافذه و اعدادتها

و اعمل ملف تاني فيه اعدادات الرسم و كل حاجه تخص بالرسم مثل graphics.cpp و ملف تعاريف graphics.h

و كذلك في الصوت و الادخل و الاخراج

و من ثم حين تستخدم اي شىء في المكتبة graphics داخل الملف الاساسي main.cpp تقوم بعمل Include لها في الملف main.cpp اي تكتب

#include "graphics.h"

و كمثال لذلك انظر محرك الخط الاحمر

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#7

عفوا لكن يبدوا انني لم افهمك جيدا , ماذا تقصد في ربط الملفات ؟

بصورة اخرى : " ماهي المشكلة التي تواجهها ؟ , لانه من مثالي السابق ومن المثال الذي اوضحه الاستاذ احمد صالح , ارى بأن الصورة واضحة.

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#8

المشكلة في ربط الملفات

#9

اهلا بك اخي العزيز

اولا كنت اقصد من سؤالي عن المشكلة , اي ماهي المشكلة التي تواجهها في ربط الملفات , على العموم مو مشكلة , راح ابدأ معاك من جديد

اخي اولا قم بإنشاء ملف رأسي .h ولنفرض اسمه a.h وعرف فيه الدوال جميع الدوال التي تقوم بإنشاء النافذه .

انشأ ملف آخر اسمه a.cpp وهذه المره قم بتعريف جسم الدوال السابقة .

قم بإنشاء ملف البرنامج الرئيسي , واستدعي الملف a.h داخله ,

#include"a.h"

وضع في هذا الملف الدالة الرئيسية ودالة الرسم .

اذا كنت تريد ان تفصل دوال الرسم بملف آخر , فقم بإنشاء ملف رئسي Draw.h مثلا , وداخله قم بتعريف دوال الرسم , وانشأ ملف آخر Draw.cpp وداخله عرف جسم الدوال السابقة .

الان انت امام خيارين :

الاول : اذا كنت تحتاج في ملف الرسم أي من الدوال المعرفة في ملف a.h عندها قم باستدعاء الملف a.h داخل ملف Draw.h

وفي الملف الرئيسي قم فقط باستدعاء الملف Draw

الثاني : اذا لم تكن تحتاج في ملف الرسم Draw.h اي داله من دوال a.h عندها في الملف الرئيسي قم باستدعاء الملفين a.h و Draw.h

على كل حال ساكون متواجد في القسم بأكبر قدر ممكن رغم تردي مستوى خدمة الانترنت وانا حاظر لاستفساراتك .

تحياتي . . .

تم تعديل هذه المشاركة بواسطة time1 في 4 أغسطس 2008 في 19:08

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#10

شكرا لكم جميعا وقد أخذت بنصائحكم وقد حللت المشكلة

وآسف لاني أتعبتكم معي

وان شاء الله تحسب في ميزان حسناتكم

وشكرا مجددا

#11

ألف مبروك اخوي ,,

تصدق من امس وانا افكر فيك , كل شوي اسأل اقول يا رب انحلت المشكلة عنده .. . :blush:

عموما اهلا فيك معنا .

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#12

شكرا مجددا

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