Hej,
mam pewien problem z transformacją siatek (Mesh z biblioteki Direct3D). Otóż, wszystko działa zgodnie z opisami w tutorialach, ale dla jednego obiektu... a ja mam ich kilka. Konkretniej w liscie 'objects' przechowuję siatki (te standardowe z klasy Mesh, a wiec Mesh.Box, Mesh.Torus, Mesh.Sfere itd..), a w obiekcie 'activeObject' trzymam aktualnie wybrana siatke (wybieram z poziomu klawiatury 1,2,3...). Nastepnie na niej operuje i przesuwam sobie ja strzalkami (uzyskujac wektor 'move'). Fragment kodu wyglada tak:
foreach (GeometricObject obj in this.objects)
{
if (obj != this.activeObject)
{
obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Yellow, device);
}
else
{
obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Green, device);
obj.GeometryMatrix.Translate(this.move);
}
device.Transform.World = obj.GeometryMatrix;
obj.Mesh.DrawSubset(0);
}
(jak widać podświetlam sobie jeszcze na zielono aktywną siatkę). Klasa GeometricObject opakowuje po prostu klasę directx-ową Mesh). Nie działają mi jednak dobrze (tak jak chcę) te transformacje, a mianowicie po każdej zmianie obiektu (zmianie activeObjectu) zmienia mi się widok (jakby orientacja na ekranie), a jak w ogóle przeskoczę sobie przez wszystkie obiekty (siatki) po kolei... to na końcu wszystkie mi sie pokrywaja znajdujac w jednym miejscu na ekranie, a przecież powinno działać, skoro widok mam ustawiony cały czas tak:
device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 2.0f, -25.0f), // Camera position
new Vector3(0.0f, 0.0f, 0.0f), // Look-at point
new Vector3(0.0f, 1.0f, 0.0f)); // Up vector
Zetknął się z Was z tym ktoś kiedyś? nie wiem gdzie może być problem...o czym zapominam? (aha, podmiana kolorów siatek go bynajmniej nie stanowi).
PS: Zadałem to pytanie również na stackoverflow:
ale mam wrażenie, że w gąszczu innych pytań...zaginęło. Może tutaj będzie łatwiej?
GeometricObject? Jakiego typu jestGeometricObject.GeometryMatrix? Czy to Twoje własne typy, czy coś DirectX'owego? Co dzieje się w kodzie poza tym, co wkleiłeś? – vigrid Mar 8 at 12:19