directx i c#

0

Witam. Jestem początkującym programistą, jeśli chodzi o directx i c#. Chciałbym wyświetlić prosty trójkąt i zastosować na nim jakąś prostą transformację (np rotację).

Najpierw robię formularz z palca, następnie ustawiam dla niego urządzenie directx. Mam dwa problemy. Jednym z nich jest to że metoda OnPaint nie jest w normalnym trybie wywoływana, przez co scena się nie odświeża. Metoda jest wywoływana gdy wyjadę oknem poza ekran monitora i faktycznie trzeba odrysować okno.
Zastosowałem np po wciśnięciu klawisza Invalidate, ale pojawiają się takie dziwne pasy. Jak to lepiej / odpowiednio zrobić?

Drugim problemem jest to że mój trójkąt się nie obraca, a stosuję rotację. Stosuję vertexy positioncolored. Za wszystkie pomocne odpowiedzi dziękuję :)

              device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, 800 / 600, 1f, 50f);
            device.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, 30), new Vector3(0, 0, 0), new Vector3(0, 1, 0));

            device.RenderState.Lighting = false;
            device.RenderState.CullMode = Cull.None;
            device.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);

            device.BeginScene();
            device.Transform.World = Matrix.Identity;
            device.Transform.World.RotateZ(angle);
            device.Transform.World.Translate(new Vector3(angle, angle, angle));
            device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices);
            device.EndScene();

            device.Present(); 
0

Kiedyś tam tworzyłem przykładową aplikacje w DirectX. Możesz ją pobrać ze strony:
http://www.wrzucaj.com/690634

0

Dzięki. Okazało się że okno musi mieć
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);

a świat (World) najlepiej modyfikować przez
device.Transform.World = Matrix.Rotation * Matrix.Translation.

0

Moze Cie zainteresuje: Direct3D . W pierwszym kroku jest to, co sprawilo Ci poblemy w Twoim kodzie (SetStyle).

1 użytkowników online, w tym zalogowanych: 0, gości: 1