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

كيف أستخرج الface من ملف مجسم X.

بدأه crazy Programm2007er في 7 أكتوبر 2008 · 11 رد · 2,330 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف أستخرج الـfaces من ملف مجسم X.

c++

أعرف أن أسئلتي كثرت في الأونه الأخيرة أسف إذا أزعجت أحد

#3

هل تريد عدد الاوجه ؟

int numFaces = PMesh->GetNumFaces();

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

IDirect3DVertexBuffer9* vb = 0;
Mesh->GetVertexBuffer( &vb );
IDirect3DIndexBuffer9* ib = 0;
Mesh->GetIndexBuffer( &ib );

مع الاعتبار ان الMesh هي من نوع ID3DXBaseMesh

بعد ذلك اذا كنت تريد ان تقرأ من الوعاء يحب ان تعمل lock للbuffers اولا ثم تقرآ ثم تغلق unlock

HRESULT ID3DXMesh::LockVertexBuffer(DWORD Flags, BYTE** ppData);
HRESULT ID3DXMesh::LockIndexBuffer(DWORD Flags, BYTE** ppData);
HRESULT ID3DXMesh::UnlockVertexBuffer();
HRESULT ID3DXMesh::UnlockIndexBuffer();

دوال مساعدة

DWORD GetFVF();—
DWORD GetNumVertices();
DWORD GetNumFaces();—

ارجوا قراءة الSDK DOCs .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#4

لأنني سأستخدمها في أحد المحركات الفيزيائية أرجو أن فهمت قصدي

تم تعديل هذه المشاركة بواسطة crazy Programm2007er في 8 أكتوبر 2008 في 19:54

#5

ما هي دي الدوال اخي

و هذا تطبيق

// HR ( ) IS A MICRO
			IDirect3DVertexBuffer9* vb = 0;
			IDirect3DIndexBuffer9* ib = 0;
			HR(mMesh->GetVertexBuffer(&vb));
			HR(mMesh->GetIndexBuffer(&ib));

			HR(gd3dDevice->SetIndices(ib));
			HR(gd3dDevice->SetVertexDeclaration(VertexPNT::Decl));
			HR(gd3dDevice->SetStreamSource(0, vb, 0, sizeof(VertexPNT)));

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#6

شكرا على الرد

أنا أعمل الأن على لعبة سأضيفها قريبا في المنتدى بالديركت إكس مع السي بلس بلس مع المحرك الفيزيائي newton

حيث هناك في المحرك كي تستخدم TreeCollsion

توجد دالة وهي

NewtonTreeCollisionAddFace

لكن أنا لا أستطيع إستخدام ماكتبته في ردك مع إحترامي لك

حيث كي تقوم بإضافة TreeCollsion لمجسم mesh يجب أن تضيف جميع الfaces الخاصة بالمجسم فيNewtonTreeCollisionAddFace

أرجو أن تكون قد فهمتني

#7

لماذا لا تستطيع ؟

و هل فهمت الكود اللي كاتبه انا ؟

و ما هي بارامترات الدالة بتاعت نيوتن ؟

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#8
احمد صالح كتب:
و هل فهمت الكود اللي كاتبه انا ؟

طبعا

اقتباس
و ما هي بارامترات الدالة بتاعت نيوتن ؟

شاهد الصوره في المرفقات

post-114540-1223499782_thumb.jpg

#9

اول بارمتر خاص بالمحرك لا علينا منه

ثاني بارمتر هو عدد الروؤس و ياتي من

DWORD GetNumVertices();

ثالث بارمتر و هو مؤشر إلي الروؤس كيف نآتي به ؟

		// Yes, draw the picked triangle in solid mode.
			IDirect3DVertexBuffer9* vb = 0;
			IDirect3DIndexBuffer9* ib = 0;
			HR(mMesh->GetVertexBuffer(&vb));
			HR(mMesh->GetIndexBuffer(&ib));

			HR(gd3dDevice->SetIndices(ib));
			HR(gd3dDevice->SetVertexDeclaration(VertexPNT::Decl));
			HR(gd3dDevice->SetStreamSource(0, vb, 0, sizeof(VertexPNT)));

و قمنا بحفظ الروؤس في الهيكل VertexPNT

struct VertexPNT
{
	VertexPNT()
		:pos(0.0f, 0.0f, 0.0f),
		normal(0.0f, 0.0f, 0.0f),
		tex0(0.0f, 0.0f){}
	VertexPNT(float x, float y, float z, 
		float nx, float ny, float nz,
		float u, float v):pos(x,y,z), normal(nx,ny,nz), tex0(u,v){}
	VertexPNT(const D3DXVECTOR3& v, const D3DXVECTOR3& n, const D3DXVECTOR2& uv)
		:pos(v),normal(n), tex0(uv){}

	D3DXVECTOR3 pos;
	D3DXVECTOR3 normal;
	D3DXVECTOR2 tex0;

	static IDirect3DVertexDeclaration9* Decl;
};

رابع بارمتر هو رقم الstride في المصفوفة

خامس بارمتر رقم الاوجه ( يعني اول وجه ، ثاني وجه ) ..إلخ

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#10

شكرا لقد أتعبتك معي

ولكن

اقتباس
رابع بارمتر هو رقم الstride في المصفوفة

خامس بارمتر رقم الاوجه ( يعني اول وجه ، ثاني وجه ) ..إلخ

لم أفهمها أرجو التوضيح لو سمحت

لو سمحت إذا لم تكن عليك كلفة أن تضيفها بالستخدام

NewtonTreeCollisionAddFace

لأني أواجه صعوبة في ذلك مثلا:

for (int i=0;i<length;i++){

NewtonTreeCollisionAddFace(1,2,3,4,5);
}

تم تعديل هذه المشاركة بواسطة crazy Programm2007er في 9 أكتوبر 2008 في 11:28

#11
http://www.mvps.org/directx/articles/mesh_subset.htm

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…