سؤال

وحاولت أن أكتب وظيفة TransformMesh. وظيفة تقبل كائن Mesh وكائن Matrix. والفكرة هي لتحويل شبكة باستخدام مصفوفة. للقيام بذلك، أنا مؤمن المخزن المؤقت قمة الرأس، ودعا Vector3 :: TransformCoordinate على كل قمة. فعلت <م> لا نتائج المتوقعة. وكانت شبكة الناتجة لا يمكن التعرف عليها.

وماذا أفعل الخطأ؟

// C++/CLI code. My apologies.
int n = verts->Length;
for(int i = 0; i < n; i++){
        verts[i].Position = DX::Vector3::TransformCoordinate(verts[i].Position, matrix);
}
هل كانت مفيدة؟

المحلول

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

      // Clear the backbuffer to a Blue color.
  device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue,   
     1.0f, 0);

  // Begin the scene.
  device.BeginScene();

  device.Lights[0].Enabled = true;

  // Setup the world, view, and projection matrices.
  Matrix m = new Matrix();

  if( destination.Y != 0 )
     y += DXUtil.Timer(DirectXTimer.GetElapsedTime) * (destination.Y 
          * 25);

  if( destination.X != 0 )
     x += DXUtil.Timer(DirectXTimer.GetElapsedTime) * (destination.X 
          * 25);

  m = Matrix.RotationY(y);
  m *= Matrix.RotationX(x);

  device.Transform.World = m;
  device.Transform.View = Matrix.LookAtLH(
      new Vector3( 0.0f, 3.0f,-5.0f ),
      new Vector3( 0.0f, 0.0f, 0.0f ),
      new Vector3( 0.0f, 1.0f, 0.0f ) );   
  device.Transform.Projection = Matrix.PerspectiveFovLH(
      (float)Math.PI / 4, 1.0f, 1.0f, 100.0f );

  // Render the teapot.
  teapot.DrawSubset(0);

  // End the scene.
  device.EndScene();

وتؤخذ هذه العينة من هنا .

نصائح أخرى

وبدون كود السياقية حول ما تقومون به، وأنه قد يكون من الصعب معرفة المشكلة بالضبط. كيف يتم إنشاء شبكة؟ كيف يتم VERTS [] قراءة، وكيف هو مكتوب؟ هل تحاول قراءة من الكتابة عازلة قمة الرأس فقط؟

وتوصيتي ستكون في محاولة مع مصفوفة ترجمة بسيطة جدا أولا وتصحيح رمز ورؤية المدخلات والمخرجات قمة الرأس. انظر إذا كنت تتلقى بيانات جيدة، وإذا هو تحويله بشكل صحيح. إذا كان الأمر كذلك، فإن المشكلة تكمن في خطوة قمة الرأس، وإعلان تيار أو أي شيء آخر أعمق في خط أنابيب دايركت.

وكما قلت، ستكون هناك حاجة إلى مزيد من رموز لتحديد أصل المشكلة.

وأوصي لاستخدام D3DXConcatenateMeshes وظيفة. تمرير شبكة واحدة ومصفوفة واحدة. سيتم تحويل نتيجة شبكة. فمن السهل للغاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top