[java3d] Rozmieszczenie

0

Czy da się jakoś ustawić bezwzględne położenie np. kilku kul na planszy o zadanym rozmiarze [w x h]? Np. dla planszy 100x100 jedna kula miała środek w punkcie [5,5] itp.
Dodam, że moja klasa dziedziczy po Applet. Rozwiązanie za pomocą Transform3D.setTranslation(...) http://download.java.net/media/java3d/javadoc/1.5.0/javax/media/j3d/Transform3D.html#setTranslation(javax.vecmath.Vector3d) mnie nie satysfakcjonuje. (ustawianie floatów/doubli w zakresie [-1.0;1.0])

0

Nie wierzę, aby nikt nie korzystał z java 3d. Proszę o krótką odp. Tak czy nie? A jeśli tak, to jak?
Dodam, że potrzebne mi to do bilardu. (Nie będę ustawiał floatów z zakresu [-1.0;1.0]!)

Pozdrawiam,
pavl

0

Współrzędne wektora nie muszą być od -1 do 1, a mogą mieć dowolną wartość. Oznaczają przesunięcie kolejno względem osi x, y i z. Jak chcesz, to możesz podawać liczby całkowite. Zostaną one automatycznie zamienione na floaty.

Transform3D transform3D = new Transform3D();
transform3D.set(new Vector3f(-2, 3, -0.4f));
TransformGroup transformGroup = new TransformGroup(transform3D);
transformGroup.addChild(OBIEKT_DO_PRZESUNIECIA);
scene.addChild(transformGroup);
0

Chodziło mi o przesunięcie bezwzględne tj. o zadaną liczbę pikseli. Tutaj mały aplet:

  • http://pastebin.com/m7bd90059
    I zmieniając pozycję dla sześcianu (42. linijka) z 1 na 2, nie widzę minimalnej różnicy przesunięcia o jeden piksel (sześcian znika). A 1 i tak jest traktowana jako 1.0f. Dziwnie by było, jakby nie było tak traktowane. Chodzi mi o prostą metodę przesunięcia od środka układu w R^3 o zadaną liczbę pikseli. Jak to zrobić? Mogę floatami ustawiać za pomocą dzielenia, stałych BOARDHEIGHT etc. Czy to byłoby dobre rozwiązanie? Przy niedużych wymiarach planszy float'y dla obiektów o różnicy w pozycji względem siebie jednego piksela byłyby inne, tak myślę.
0

W 3D raczej nie posługuje się pojęciem pikseli. Lepiej myśleć o odległościach. Prawie zawsze w programach 3D użytkownik ma możliwość ruchu, więc liczenie w pikselach nie jest dobrym pomysłem.

Ruch za pomocą klawiatury (strzałki, page up, page down) najłatwiej wprowadzić tak:

KeyNavigatorBehavior keyNavBeh = new KeyNavigatorBehavior(universe.getViewingPlatform().getViewPlatformTransform());
keyNavBeh.setSchedulingBounds(new BoundingSphere(new Point3d(), 1.0));
group.addChild(keyNavBeh); 

Przy starcie użytkownik widzi 1 jednostkę w lewo, 1 w prawo, 1 w górę i 1 w dół. Jeżeli chcesz, aby na początku użytkownik widział wszystkie elementy planszy, to musisz ręcznie wyliczyć odległości, aby wszystko zmieściło się w widoku 2x2.

Btw. w zeszłym roku napisałem grę Snake 3D, gdzie wąż składał się z poprzesuwanych sześcianów i właśnie tak to zrobiłem. Plansza była 20x20, wyliczyłem ile musi zajmować pojedyncze pole planszy i wszystko odpowiednio poprzesuwałem.

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