سؤال

أريد أن أرسم نموذجا في XNA. لقد قمت بتأجيلها وأنتجها في خلاط وتصديرها إلى تنسيق ملف FBX بحيث يمكن أن يعمل خط أنابيب المحتوى معه. ما الرمز الذي يجب أن أضيف إليه إلى طريقة السحب () الخاص بي Windowsgame ()؟ لقد جربت ما يلي ولكن كل ما أحصل عليه هو شاشة رمادية (رمادي غير أزرق، وهو اللون الواضح، مانع لك) يتم استيراد النموذج مع المحتوى. تحميل، وهذا يلقي أي خطأ، اتصلت به "وعاء" وبعد

هل يمكن لأحد أن يقول لي لماذا هذا هنا لن يعمل؟

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            BasicEffect b = new BasicEffect (graphics.GraphicsDevice, new EffectPool ( ));
            foreach (ModelMesh m in Bowl.Meshes)
            {
                b.View = Cam.mView;
                b.Projection = Cam.mProj;
                b.World = mWorld;
                b.EnableDefaultLighting ( );
                b.Begin ( );
                m.Draw ( );
                b.End ( );
            }

            base.Draw(gameTime);
        }

لقد لاحظت للتو أن هذا يعادل القتل من حيث الكفاءة لكنني جربت أشياء كثيرة، إلا أنني بحاجة إليها للعمل قبل تحسينه.

هل كانت مفيدة؟

المحلول

مشكلة مشتركة حقا عندما تحاول أولا تقديم شيء ما هي أن الكاميرا لا تنظر إلى ما تعتقد أنه ينظر إليه. قضية أخرى محتملة هي أن النموذج ليس على نطاق كنت تتوقعه. لذلك على سبيل المثال، إذا كانت الكاميرا هي 5 وحدة مرة أخرى على Z، ولكن النموذج هو 10 وحدات واسعة، فإن الكاميرا الخاصة بك بفعالية داخل النموذج.

بقدر ما يذهب سؤال التقديم، فإن Microsoft لديها مستندات جيدة جدا على هذا: http://msdn.microsoft.com/en-us/library/bb203933.aspx.

يمكنك استخدام هذا القصاص كمساعد:

private void DrawModel(Model m)
{
    Matrix[] transforms = new Matrix[m.Bones.Count];
    float aspectRatio = graphics.GraphicsDevice.Viewport.Width / graphics.GraphicsDevice.Viewport.Height;
    m.CopyAbsoluteBoneTransformsTo(transforms);
    Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
        aspectRatio, 1.0f, 10000.0f);
    Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, 50.0f, Zoom), Vector3.Zero, Vector3.Up);

    foreach (ModelMesh mesh in m.Meshes)
    {
        foreach (BasicEffect effect in mesh.Effects)
        {
            effect.EnableDefaultLighting();

            effect.View = view;
            effect.Projection = projection;
            effect.World = gameWorldRotation * transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Position);
        }
        mesh.Draw();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top