結局全訳



 前回の流れを見ると、セッティングの解説ページをよく読むと進んでいる。ということは、拾い読みではなくちゃんと全文を訳してやらねば駄目なのではないか?と思って、訳してみた。この間(5月28日)は、

SVNのチェック方法
SVNリポジトリをチェックするとワークスペースに"Xith3D"と"Xith-tk"という名前のプロジェクトが自動的に作られる。(ソースを見るためにはNetBeansのバージョニングという機能を使うらしいが今の所どうでもいい。)

まず"Xith3D"ですべきことは、"https://xith3d.svn.sourceforge.net/svnroot/xith3d" を "RepositoryURL"として登録する。"User"、"Password"、"Save..."オプションは空、[Next](次へ)を押したら、・・・

 までだったのでその続きから。


 しかしYAHOO翻訳は実にバカだな。でも使っちゃうけど。

Clean the "Password" field too and uncheck the "Save..." opition if necessary. After clicking on [Next] we are presented with the form to specify the local target folder, where the sources will reside.

                                                                                      • -

「パスワード」フィールドもきれいにして、必要に応じて「セーブ」opitionのチェックをはずしてください...。[次へ]をクリックした後に、我々はローカル目標フォルダを指定するために書式を提示されます、そこ(ローカルフォルダ)に、関係者(訳注:ソース)は住み(訳注:存在し)ます。

Enter "trunk" in the "Reporitory Folder" field and choose the target location in the "Local Folder" field. Make sure you have "xith3d" appended there to not flood your projects directory. Check the "Skip 'trunk' ..." and "Scan for Netbeans Projects ..." options and hit [Finish]. IMPORTANT: double check, that you have enabled the "Skip 'trunk' and checkout only its content"-option. Otherwise the "xith-tk" project will not find the core library later.

                                                                                      • -

「Reporitoryフォルダ」フィールドに「トランク」を入力して、「ローカルフォルダ」フィールドで目標場所を選んでください。「xith3d」をあなたのプロジェクトディレクトリを洪水に『しないために』そこで追加したか、確認して下さい。「『トランク』をスキップする...」、そして「Netbeans Projectsのための走査...」オプション、をチェックしてください、そして[完了]と打たれた。重要:あなたが「『トランク』をスキップと、その内容だけをチェックアウト」-オプションを可能にした『か、』再確認。さもなければ、「第xiのtk」プロジェクトは、後で中心的な図書館を見つけません。

Now Netbeans will copy the sources from the SVN server. You can watch the progress in the Output panel. Don't hold your breath, this will take a while. When finished, the IDE will present you with the notifier you see to the left. Just hit [Open Project] and this step is done.

                                                                                      • -

現在(訳注:さあこれで)、Netbeansは源(訳注:ソース)をSVNサーバーからコピーします。あなたは、Outputパネルにおける進歩を見ることができます。息を殺さないで(訳注:あまり期待しないで)ください、これに間がかかります。終わるとき、IDEはあなたが左に見る通知であなたを紹介します。ちょっと(訳注:つべこべ言わずに)[Projectを開けます]を打ってください、そして、このステップはされます。

The next thing we need to do is to repeat the steps to checkout "xith-tk" by connecting to the repository "https://xith-tk.svn.sourceforge.net/svnroot/xith-tk" and using a folder named "xith-tk" right besides the already checked out "xith3d" project on the same directory level. Specify "trunk" as well for "Repository Folder" and make sure the "Local Folder" ends with "xith-tk". Again double check you enabled the "Skip 'trunk' option". After finishing the download, you will again be presented with the "Open Project" message.

                                                                                      • -

我々がする必要がある次のことは貯蔵所(訳注:リポジトリ)「https://xith-tk.svn.sourceforge.net/svnroot/xith-tk」につながることによって「第xiのtk」に対するチェックアウトするステップを繰り返すこと、そして、同じディレクトリレベル上ですでにチェックされた「xith3d」外へ突出します(訳注:プロジェクト)のすぐ横で、「第xiのtk」という名前をつけられたフォルダを使用することです。「貯蔵所フォルダ」のために『したのと』同様に「トランク」を指定して、「ローカルフォルダ」が「第xiのtk」で終わることを確認してください。あなたが「『トランク』をスキップするオプション」ことを可能にしたことをまた二倍に確認(訳注:ダブルチェック)してください。ダウンロードを終えた後に、あなたは「Projectを開ける」というメッセージを再び贈られます。

The last thing you have to do is to run a specific ant target that creates a distribution file set you can use for your project. Go to the "Files" tab and expand the "xith-tk" explorer node. You will see folders like "src" and "test-resource" and the "build.xml" file. Just select this one so the "Navigator" panel shows the available targets. Search for the target named "default" (it should be bold) and run it.

The build process will take a while and will present you with some (javadoc-) warnings. Just ignore them as long as you get "BUILD SUCESSFULL" in the end

                                                                                      • -

あなたがしなければならない最新流行(訳注:最後の事)は、あなたがあなたのプロジェクトのために使うことができる配布ファイルセットを作製する特定のアリ(訳注:Ant = 一連の処理を自動化するためのツール)目標を走らせることになっています。「ファイル」タブへ行って、「第xiのtk」探検家(訳注:エクスプローラー)ノードを拡大してください。あなたは、フォルダが「src」と「テスト-資源」と「build.xml」ファイルを好むの(訳注:のようなファイル)を見ます。「ナビゲーター」パネルが利用できる目標を示すように、ちょっとこれを選んでください。「デフォルト」(それは大胆でなければなりません)という名前をつけられた目標を捜して、それを走らせてください。


造り(訳注:ビルド)プロセスに間がかかって、あなたにいくらかの(javadoc-)警告を示します。あなたが結局は「BUILD SUCESSFULL」を得る限り、ちょっと彼らを無視してください

ここまで、SVNの設定。今の所読む必要はないが、ダウンロード方式がダメだったら切り替える時に必要だから無駄ではないかも知れない。
ああそして、ここから下の文は読む必要があったな。

Setting up a new project
Now you have a distribution file set downloaded or created yourself from SVN, you can create your first Xith3D gem: a textured Cube Cool

Start up the "New Project" wizard and create a Java Application named "MyFirstShape". Specify "org.myorg.myfirstshape.Main" or whatever you like in "Create Main Class" and check the "Use dedicated Folder for storing libraries" option if not already checked. Hit [Finish]

                                                                                      • -

新しいプロジェクトを準備すること
あなたが配布ファイルをダウンロードされてセットしておくか、SVNからあなた自身をつくった今、あなたはあなたの最初のXith3D宝石をつくることができます:きめのある(訳注:テクスチャーのある)Cube(キューブ)

「新しいProject」ウィザードを始めて、「MyFirstShape」という名前をつけられるJava Applicationをつくってください。「org.myorg.myfirstshape.Main」を、さもなければ、あなたが「Main Classをつくります」の中で好きであるものは何でも、指定してください。そしてチェックは、「図書館を保存するために、専用のフォルダを使う」ことが、もしすでにチェックしましたでなければオプションをつける。打たれます[完了]

 ここから以下は昨日訳した。訳したところからさらに下にもまだ文が残っているが、とりあえず無視する。


 で、新しいProjectで「org.myorg.myfirstshape.Main」を試してみたがダメだった。おんなじエラーが出る。

no jogl in java.library.path

だ。どういうことなの?|||orz|||


 と、絶望した時にたけチン氏から救いの手が5月29日のコメントに!!

たけチン 『Djava.library.path="${libs.xith3d.natives.classpath}" は、NativeLibの場所を指定しているので、関連するDLLやSOのある場所を設定する必要があります。環境変数「libs.xith3d.natives.classpath」が未定義なら、直接的に書いてらどうでしょうか?
Djava.library.path="C:\usr\lib\xith3d\native"』(2009/06/01 11:34)



 ・


 ・・


 ・・・


 「NativeLib」って・・・何?


 ・・・(つづく)

諦め切れずに食らいついてみる


 openmaliってのはこれもJavaのプロジェクトらしい(Open Math Library)が・・・っておい、これどうやってインストールするんだ?
もーワケ分からん!やめた!

と言ったが、念のためNetBeans6.5で再試行。もしかして6.5にはopenmali標準装備かも!


 失敗!


 甘かったね。|||orz|||


 で、上記のサイトを良く見てみるとvechmathのjarファイルがいくつか落ちている。
 とりあえず、「Subvertion」とかは無視して、「ドキュメント」の中に唯一あるvecmath-kh 1.0(=vecmath-kh.jar)をダウンロード。へぇ、khってKenji Hiranabeの意味なんだ。開発者に日本人名が見えなかったけど頑張ってるね日本人!とりあえず、Xith3Dと同じ場所に放り込む。(おや?もともとvecmath.jarってのは有るんだな。)そしてファイル実行。・・・変化なし。
 はい、NetBeans再起動!


 ・・・変化なし!


 ・・・まてよ?もともとvecmath.jarがあったのなら、vecmath-kh.jarをそれに上書きすればうまくいくかも。もちろん上書きはせず、古い方は退避させておく。で、ファイル実行。
・・・変化なし。
 はい、NetBeans再起動!


 ・・・変化なし!(じゃあ戻す・・・と。)


 うーん、じゃあ、Xith3Dの他のコマンドと同じようにimportしてやらないといけないのかな?
 でもそれは変だよね。サンプルでXith3Dはimportしないといけないのにその前提となるベクトル関数がサンプルコードにimportされてないんだから、更に追加しなければいけないなんてありえない。でも試す。

import org.openmali.types.twodee.ExtPositioned2i;

と、追加したが、赤字の所でNetBeans6.5.1がパッケージorg.openmali.types.twodeeは存在しませんと言ってきた。


 ハイお手上げです。


 ・・・ありえないよねー、絶対おかしいよ。これ壊れてるんじゃね?と言いながらセッティングのページを「openmali」で検索してみる。
 うおぃ、openmaliあるやんけ!

Since the generated project is just a regular java application, we need to add support for Xith3D to th project by specifying the dependencies and the runtime parameters needed for a Xith3D appliction to run properly. First add a new Library to your project by right-clicking the "Libraries" node of your project and choose "Add Library...". Click on [Create] and enter "xith3d" as "Library Name" and hit [OK]. Add the jars from the "libs" and "third-party" directory in "xith-tk/dist/release" (when using SVN) or in the downloaded release. Here is the list to add:

[path to the release]/libs/xith3d.jar
[path to the release]/third-party/jagatoo.jar
【省略】
[path to the release]/third-party/math/openmali.jar
【省略】
[path to the release]/third-party/xml/jibx/jibx-run.jar

                                                                                                        • -

 発生されたプロジェクトがちょうど普通のジャバアプリケーションであるので、我々は属国(訳注:依存関係)を指定することによってXith3Dに対する支持(訳注:サポート)をXithプロジェクトに加える必要があります、そして、実行時パラメータはXith3D applictionのきちんと走るために必要がありました。最初はあなたのプロジェクトの「図書館(訳注:ライブラリ)」ノードを右クリックすることによって新しい図書館をあなたのプロジェクトに加えて、選択をします「図書館を加えます...」。[つくります(訳注:作成)]にクリックして「図書館Name」として「xith3d」に入って、[OK]を打ってください。「xith-tk/dist/release」(SVNを使うとき)で、または、ダウンロードされたリリース(訳注:今回ダウンロードしたXith3Dのzipを解凍したモノ)内の、「解放(訳注:libs)」と、「第三者の(訳注:third-party)」ディレクトリから、ジャー(訳注:jar)を加えてください。加えるリストは、ここにあります:
【リスト省略】

 うーむ。SVNの説明の続きだと思って無視していたのだが、ダウンロードとSVNの両方に必要な作業のようだ。やっぱり思い込みは良くないね。ちゃんと目を通さないと・・・。


 つまり俺のミスか!orz


 まあ、いつのものパターンなわけだが。
 さて、Xith3D.jarも入っているので、前回「C:\Program Files\Java\jdk1.6.0_07\jre\lib\ext」に放り込んだjarファイルを一時退避させてとりあえず必要なXith3D.jarとopenmali.jarのみを加えて様子を見る。

Exception in thread "main" java.lang.NoClassDefFoundError: org/jagatoo/datatypes/Enableable
at java.lang.ClassLoader.defineClass1(Native Method)
【以下長いので省略】

 うお!いっぱいエラー出た。む、jagatooは上のセッティングのページでライブラリに加えるように出てたjarファイルのアドレスにあったな・・・。やっぱりリスト全部のjarファイルを加えないとだめか。
 なんと既に新規作成した「xith3d」ライブラリにjarファイルを追加することはできないらしく、一旦削除(ツール→ライブラリで)して「xith3d」ライブラリを作り直さなければいけない羽目に陥った。という訳で横着はいけないという教訓の下、ライブラリを再設定。*1そして実行・・・やっぱりライブラリエラーが出るのでNetBeans再起動。


 あれ?

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
【以下省略】

 ええええ?jogl.jarならばさっきライブラリに入れたぞ!プロジェクトノードのライブラリにもちゃんと載ってるのに!?


 もーやだ!もーわからん!


 と、思ったが、最後の気力を振り絞ってセッティングページを読み下したら、

Now if you try to run this code you will get an Error like this:

Exception in thread 'main' java.lang.UnsatisfiedLinkError: no jogl in java.library.path
                                                                                                • -

現在、あなたがこのコードを走らせようとするならば、あなたはこのようにErrorを得ます:
【エラー省略】

 おおう、まったく同じ症状じゃないか!おのれもっと早く気付いてれば余計な試行錯誤もなかったのに・・・orz。
 どれどれ対策は?

Now we have to use the abused "xith3d.natives" library as java.library.path. To do this, select the "Projects" tab and right-click on your projects root node. Select "Properties" and navigate to the "Run" category.On the panel you see several options regarding the configuration of your application. One of them is "VM Options. Fill in the following line

-Djava.library.path="${libs.xith3d.natives.classpath}"



(including the quotes!) and hit [OK]

                                                                                                • -

現在、我々はjava.library.pathとして罵倒(訳注:誤用)された「xith3d.natives」図書館を使わなければなりません。こうするために、「プロジェクト」タブを選んで、あなたのプロジェクト根ノードを右クリックしてください。「特性(訳注:プロパティ)」を選んで、「動く(訳注:実行)」カテゴリーに操縦してください。パネルの上で、あなたはあなたのアプリケーションのコンフィギュレーションに関して、いくつかのオプションを見ます。彼らのうちの1人は、VMオプションです。以下の線の一杯(訳注:以下ように行を満たす)

-Djava.library.path="${libs.xith3d.natives.classpath}"

(引用を含むこと!)そして、打たれます[OK]

 言われたとおりにしたが、実行しても結果は変わらず。しょうがないのでNetBeans6.5を再起動。しかしやっぱり結果は同じ。セッティングページにもこれについてはもう何も書いてないし・・・ダメかorz。(ガックリ)

*1:良く考えたらツール→ライブラリでXith3Dライブラリを編集可能じゃないか・・・アホだなぁ俺

「install」って訳すと「取り付け」



DocumentationInstallationのページ

  • YAHOO翻訳してそのまま掲載したが、あまりにアホな訳と語順だけは修正

How to install Xith3D from SVN?
The Download section has a short tutorial, how to setup Eclipse to checkout the projects.
A Wiki artitle is up to replace it.
Or use this nice tutorial.


NetBeans 6.1 users please visit this blog article about how to install it in NetBeans 6.1.

                                                                                      • -

どのように、SVNからXith3Dをインストールするために?
Download部は短いチュートリアルを持っています。そして、プロジェクトをチェックアウト(訳注:点検?)するためのEclipseへのセットアップ方法。
Wiki 記事は、それを取り替えるために、上へあります。(訳注:ここだけ意味不明)
または、この素晴らしいチュートリアルを使ってください。


NetBeans6.1のユーザーは喜び(訳注:どうぞ)、NetBeans 6.1にそれをインストールする方法に関するこのブログ記事を訪問して下さい。

ハイハイ、訪問しますよ。

Cylabs development blog
Setting up Xith3d in Netbeans 6.1

というページです。非常に詳細に書いてあるので全文を訳したら大変な事になるので要点だけ。

  • Xith3DはNetBeans 6.1より以前のバージョンではサポートされないか動作しない。
  • Xith3D取得のお勧め方法は二つ。

 (1)http://xith.org/index.php?switch=downloadから「latest cooker版」をダウンロード
 (2)SVNをチェックして最新・最大版を使う


SVNのチェック方法

  • (その前にSVNについて勉強しなければならないがそれはまた別のお話)

SVNリポジトリをチェックするとワークスペースに"Xith3D"と"Xith-tk"という名前のプロジェクトが自動的に作られる。(ソースを見るためにはNetBeansのバージョニングという機能を使うらしいが今の所どうでもいい。)
まず"Xith3D"ですべきことは、"https://xith3d.svn.sourceforge.net/svnroot/xith3d" を "RepositoryURL"として登録する。"User"、"Password"、"Save..."オプションは空、[Next](次へ)を押したら、・・・

 なんか面倒そうなのでSVNは使わない事にする。
 NetBeans6.1(1)でダウンロードしてJava3Dと同様に・・・と思ったがJava3Dと違って、latest cooker版は自動でインストールしてくれないのでライブラリをJavaフォルダに置いて、ツール→ライブラリでXith3DとXith3D-sourceを追加してもサンプルソースコードのインポートがエラーのまま。「パッケージorg.xith3d.loopは存在しません」とか言ってくる。認識してくれないのか・・・。

(赤字の所がNetBeans6.1がエラーと言って来る所)
package javaapplication5;

//package org.xith3d.xin;

import org.xith3d.loop.RenderLoop;
import org.xith3d.render.Canvas3D;
import org.xith3d.render.Canvas3DFactory;
import org.xith3d.base.Xith3DEnvironment;

/**
* XIN - "Our fisrt Empty Scene" example coding.
*
* @author Marvin Froehlich (aka Qudus)
*/
public class Chapter01a
{
public Chapter01a()
{
Xith3DEnvironment env = new Xith3DEnvironment();

Canvas3D canvas = Canvas3DFactory.createWindowed( 800, 600,
"My empty scene" );
env.addCanvas( canvas );

RenderLoop rl = new RenderLoop();
rl.setMaxFPS( 120f );
rl.setXith3DEnvironment( env );

// never forget to start the RenderLoop!
rl.begin();
}

public static void main( String[] args )
{
new Chapter01a();
}
}

 ぬう、どのページもSVNからの導入の仕方を丁寧に説明しているが(1)でダウンロードしたライブラリの導入方法がまるで書いてない。こいつ等にとっては常識なのか?俺は知らんがな・・・!
 という訳で「Java ライブラリ インストール」検索すると15個目に外部ライブラリのインストールが。

外部ライブラリ(*.jar)を置くべき場所は、開発環境(JDK)の場合は jre/lib/ext、実行環境(JRE)の場合は lib/ext です。

 あーそうそう。確かそうでした。はるか昔にやりましたねこれ。

 常識でした(恥)orz。

 じゃあ早速
C:\Program Files\Java\jdk1.6.0_07\jre\lib\ext
にXith3D.jarとXith3D-source.jarをコピーっと・・・やっぱり認識してくれないのでNetBeans6.1を再起動・・・成功!エラーが消えました!

package javaapplication5;

/**
 *
 * @author akabane
 */

//package org.xith3d.xin;

import org.xith3d.loop.RenderLoop;
import org.xith3d.render.Canvas3D;
import org.xith3d.render.Canvas3DFactory;
import org.xith3d.base.Xith3DEnvironment;

/**
 * XIN - "Our fisrt Empty Scene" example coding.
 * 
 * @author Marvin Froehlich (aka Qudus)
 */
public class Main
{
    public Main()
    {
        Xith3DEnvironment env = new Xith3DEnvironment();
        
        Canvas3D canvas = Canvas3DFactory.createWindowed( 800, 600,
                                                          "My empty scene" );
        env.addCanvas( canvas );
        
        RenderLoop rl = new RenderLoop();
        rl.setMaxFPS( 120f );
        rl.setXith3DEnvironment( env );
        
        // never forget to start the RenderLoop!
        rl.begin();
    }
    
    public static void main( String[] args )
    {
        new Main();
    }
}

 うむ。ではさっそく実行。・・・あれ?

C:\Documents and Settings\akabane\My Documents\NetBeansProjects\JavaApplication5\src\javaapplication5\Chapter01a.java:32:
org.openmali.types.twodee.ExtPositioned2i にアクセスできません。
org.openmali.types.twodee.ExtPositioned2i のクラスファイルが見つかりません
env.addCanvas( canvas );
エラー 1 個
構築失敗 (合計時間: 1 秒)

 ん?
 なんじゃこりゃ〜!?
 openmaliってのはこれもJavaのプロジェクトらしい(Open Math Library)が・・・
必要なら先に言え!
・・・っておい、これどうやってインストールするんだ?
もーワケ分からん!やめた!
という訳で次回は(2)の方法を試す。

まずはキスから



Xith3Dホームページはこちら


 「Xith」って「キス」って発音するんでしょうか?
 それはともかく、まずは完全JavaライブラリらしいXith3Dを研究する。でも大丈夫かなぁ?Open−GLが使われているらしいので、前回同様レイヤーウィンドウに乗せたらはみ出したりして。まあ、実験あるのみです。
 とりあえず、上記のホームページを読んでみる。左肩にメニューとして

General
Home
Feature(特徴)
Download
Credits

Discussion
Boad
(Forums)
Blog

Documentation
Wiki
XIN(Xith In ナットシェル)
Installation
Development
JavaDoc

Source
xith3d@sf.net
Browse xith3d source code
xith-tk@sf.net
Browse xith-tk source code

Misc(雑多な事)
Archive

と、ある。まあこの辺は一部を除いて訳す必要もないだろう。しかし本文はそうはいかない。
 さっそくHomeから訳そう。(なぜわざわざ訳すのかって?それは俺が英語苦手だからだよ!訳してもすぐ忘れちゃうから残しておきたいのさ!)

  • YAHOO翻訳してそのまま掲載したが、あまりにアホな訳と語順だけは修正

Welcome,
to the home of the Xith3D project, a modern, feature-rich and very fast scenegraph-engine. Its purpose is to deliver a toolkit for the creation of interactive 3D environments using the graphic-hardware of common desktop computers.


With Xith3D you can


 * develop games
 * visualize data
 * prototype 3D environments


just to name some examples. A good impression on what can be achieved give those promising projects. The engine is written in the Java programming language, which allows for implementation on any Java enabled computer-platform, which has a OpenGL-capable graphics hardware. As a result all applications developed with Xith3D will be inherently portable to those computer-platforms. Xith3D has been successfully installed on Linux, Windows, MacOSX and many other *nix operating systems. Its complete feature-set can be found here.

                                                                                      • -

ようこそ!
Xith3Dプロジェクトの本場に。これは、最新で、特徴の豊富で、非常に速いシーングラフ-エンジンです。その目的は、一般のデスクトップコンピュータのグラフィックハードウェアを使っているインタラクティブ3D環境の作成のためにツールキットを届けることです。


あなたはXith3Dで以下の事が出来ます。


 *ゲーム開発
 *データを視覚化
 *3D環境を試作


ちょうど若干の例を上げる。成し遂げられるものへの良い印象がこれらの将来有望なプロジェクトを与えています。このエンジンはJavaプログラミング言語(それは全てのJava対応コンピュータ-プラットホームで実施が可能で、そのPCはOpenGL対応のグラフィックスハードウェアを持っています。)で記述されています。その結果、Xith3Dで開発されるすべてのアプリケーションは、それらのコンピュータ-プラットホームに本質的に移植可能です。Xith3Dは、LinuxWindowsMacOSXと他の多くの*nixオペレーティングシステム上にうまくインストールされています。その完全な特徴-セットは、ここで見つかります。

Scenegraph in a Nutshell
Most graphic boards used today can be programmed to display 3D objects. The programming interfaces provided for this purpose are rather low-level: OpenGL and DirectX. Using those interfaces the programmer has to cope with a lot of technical details, which are often not directly related to the task at hand.
3D engines like Xith3D strive to ease this burden. A programmer, who uses Xith3D can describe the contents of a 3D scene as tree-like structure of Java-objects, i.e. the scenegraph. Xith3D then uses OpenGL to render the scenegraph. The programmers focus shifts from technical aspects to the organization of the contents of a scene. On the right-hand side you can see a screenshot of the earth orbiting the sun.

                                                                                      • -

堅果の殻の中の(=簡潔な)シーングラフ
 今日使われる大部分のグラフィックボードは、3D物体を表示するようにプログラムされることができます。このために提供されるプログラミングインターフェースは、より低レベルの:OpenGLDirectXです。それらのインターフェースを使用して、プログラマーは多くの技術的な詳細に対処しなければなりません。それはしばしば手近の仕事に直接関連がない。
Xith3Dのような3Dエンジンは、この重荷をゆるめるよう努めます。Xith3Dを使うプログラマーは誰でも、3D場面の内容をJava-オブジェクトの木のような構造(すなわちシーングラフ)に記述できます。それから、Xith3DはシーングラフをレンダリングするためにOpenGLを使用します。プログラマーの集中は、技術面から場面の内容の組織へ交替します。右側で、あなたは地球のスクリーンショットが太陽を軌道に乗って回っているのを見ることができます。

Such a scenario can be created with a scenegraph that looks like this. If you decide to develop a first-person-shooter of the next generation with Xith3D, this means that you'll spend more time creating "tasty" maps than wondering, why the sky gets rendered over your anti-terrorist models.


Articles about scenegraphs can be found here:
http://www.realityprime.com/scenegraph.php
http://en.wikipedia.org/wiki/Scenegraph
http://xith.org/downloads/docs/SceneGraph/Xith3D Tutorial - SceneGraph.pdf


This book covers programming in Java3D. As the concepts of Xith3D are very similar to Java3D it is a good doc to start with:
http://www.oreilly.com/catalog/killergame/index.html

                                                                                      • -

そのようなシナリオは、これのように見えるscenegraphで作成されることができます。あなたがXith3Dで次世代の最初の-人-銃(訳注:FPS=一人称視点シューティング)を開発することに決めるならば、(これは以下の事を意味する。あなたが迷うことよりも多くの時間を「おいしい」地図を作成して過ごす)なぜ、空はあなたの対テロリストモデルが治ったようになりますか。(訳注:ここだけ意味不明)


シーングラフに関する記事は、ここで見つかります:
http://www.realityprime.com/scenegraph.php
http://en.wikipedia.org/wiki/Scenegraph
http://xith.org/downloads/docs/SceneGraph/Xith3D Tutorial - SceneGraph.pdf


この本は、Java3Dでプログラミングをカバーします。Xith3Dの概念がJava3Dと非常に類似しているので、それはまず第一に良い医者(訳注:文章)です:
http://www.oreilly.com/catalog/killergame/index.html

Objectives and Community
The project was initiated by David Yazel to create a lean and fast scenegraph and renderer while at the same time, allowing for extensions and enhancements to all stages of the rendering pipeline.
Porting code from Java3D to Xith3D is fairly straight-forward since it's designed on the same basic architecture.
An active and friendly community has taken up the project and is now contributing greatly. And, of course you're welcome, if you want to do join! If you have anything to contribute, please post on the board. This board is also the best place to keep informed of Xith3D progress and talk with other programmers.

                                                                                      • -

目的とコミュニティ
一方同じ時刻に、プロジェクトはスリムで速いscenegraphシーングラフと与える人(訳注:レンダラー)をつくるためにデイビッド・ヤぜルによって始められました。そして、翻訳(訳注:レンダリング)パイプラインのすべてのステージに対する拡張と強化を考慮に入れました。
それが同じ基礎建築に関して設計される時から、Java3DからXith3Dまでコードを運ぶことはかなり直接です。
活発で親しみやすいコミュニティは、プロジェクトを始めて、現在大いに貢献しています。そして、あなたが接点(訳注:加入)をしたいならば、もちろん、あなたは歓迎です!あなたが貢献する何かを持つならば、の上に掲示してください。この板は、Xith3D進歩で博識にしていて、他のプログラマーと話すための最高の場所でもあります。

Licensing
Xith3D is released under the BSD license making its use feasible for both commercial and non-commercial (freeware/open-source) projects.

                                                                                      • -

ライセンス
Xith3Dは、その使用を商業的で非商業的な(フリーウェア/オープンソース)プロジェクトに適当にしているBSD許可(訳注:BSDライセンス)の下でリリースされます。

 OpenGLDirectXを使っているとか非常にヤバそうな感じである。そこでレイヤーバグの検証のため次回は早速Xith3Dをダウンロードしてインストールする予定である。

重いコンポ>軽いコンポ(z軸的意味で)



 前回の記事で発覚したJava3Dの不具合であるが、回避策がないのか探してみた。
 大胆に「Java3Dはswingと相性が悪い」でググってみる。
 当然の如く自分のブログがトップに来たw。それはともかく、
安藤ゆきお氏のJava3DのFAQ

[Q] SwingでJava3Dは使えますか?
 
 Java3D の Canvas3D は Light-weight コンポーネントではないため、
 描画がおかしくなる場合があります。
 現時点では AWT を使うのが無難です。
 Sun (JavaSoft) は Java3D と Swing をうまく共存させるよう努力中のようです。
 考えられる方法としては、
 (1) Java3D の改良。オフスクリーン・レンダリングなどを使い、Light-weight コンポーネントの中でも Java3D が描画出来るようにする。
 (2) Swing の改良。Swing の中で Java3D のような Heavy-weight コンポーネントをうまく描画出来るようにする。
 の2通りの方法を考えているようです。(1)は描画のパフォーマンスが悪いかも知れません。

 ああ、この文読んだ記憶がある。”場合があります”って言うからたまに起こるのかと思ってナメていた。
 
2chのスレッド「【徹底討論】Java3Dの可能性について考える」

440 :デフォルトの名無しさん:04/05/14 23:44
 今からJava3Dやるなら、Xith3Dがいいかも。
 http://www.xith.org/tiki-index.php
 
446 :デフォルトの名無しさん:04/05/16 22:12
 >>444
 jGL
 http://www.cmlab.csie.ntu.edu.tw/~robin/JavaGL/index-j.html
 
 使ったこと無いけど全部Javaで書いたOpenGL実装らしい
 
451 :デフォルトの名無しさん:04/05/17 22:43
 >>441
 お互い依存はしていないんだけど、シーングラフのクラス構造がほぼ
 同じなので、どちらかを覚えればもう一方も割合楽に組めます。
 
 Xith3Dの利点は
 ・速い。ゲームを前提としているので、Java3Dに比べてパフォーマンスに優れている。
 ・Java3Dは公式といいながらも、開発はほぼストップしている(らしい)のに比べて、Xith3Dは活発に開発が進められている。
 
 でも、勉強がてらなら、日本語ドキュメントが充実してるJava3Dの方が
 やりやすいかもしれんね。
 
453 :デフォルトの名無しさん:04/05/18 00:46
 >>451
 うへぇ、Java3D、開発ストップしてるのかよ。
 SGIっていま参加してないんだっけ?
 というかSGI自体がもう3Dやってないのかな。
 
454 :デフォルトの名無しさん:04/05/18 03:56
 >>453
 止まってはいない。
 でも非常に遅い。
 かつ、JOGL等別の動きがある。
 http://www.j3d.org/

 様々な新しい動きがあるらしい。知らんかった。常に一定のリサーチを続けるべきだという教訓だな。
MSN相談箱 MenuItemがcanvasの下に潜り込む

MenuBarにMenuからMenuItemがプルダウンされるとき,canvasの下にMenuItemがもぐりこんでしまいます。
MenuItemがふつうに画面上に見えるようにしたいのですが,
どうしたらいいでしょうか。
 
私の4年ぐらい前の知識では、当時はSwingとの相性が悪いらしく
 java.awt.MenuBar
 java.awt.MenuItem
を使う方法しかなかったと思います。
しかしながら、この情報も公式には全く報告されていなかったと思いますし、関連書籍等にもこういった記載は一切ありませんでした。(赤字は管理人着色)
 
この様なこともあり、Java3D人口はすっかり減ってしまったと思います。
現状でも、AWTを使う以外に方法がないのかどうかは、残念ながら解りませんが、
とりあえず、AWTのメニューを使えばうまく良くと思います。
ご確認ください。

 また、”相性”かよ。し俺の症状と似たような症状だな。まさか俺のもswingやめてawtにすれば解決!なんじゃないだろうな?やだよそんなの・・・。せっかく統一イメージの画面になると思ってたのに・・・。awtつかったらOS毎に部品の形が変わっちゃうじゃん。
 そもそも、swingで一貫性のある表示をしたいのだから、それをAwtで書いたら、後々swingに書き直す作業が生じるだろ?それはwrite once に反するからやりたくねー。それにしても赤字の部分はひでー話だな。俺は泥船に乗っかっちまったてことかよ。
 
[http://www.javaopen.org/j3dbook/mlarchive_3/msg00152.html:title=[Java3Djp:00152] Interpolator の CPU 占有率を落とすには?]
というJava3Dメーリングリストの記事の
フォローアップ記事

上記にSwingとJava 3Dの記事があります。

SwingはLightweight Component(軽量コンポーネント)と呼ばれ、
OSの資源を使わずにJava側だけで描画します。
 
Java 3DはOS側のOpenGLDirectXを利用して描画します。
 
http://java.sun.com/products/jfc/tsc/articles/mixing/index.html
 
これらを混在させるための一般的な留意点が上記のSunの記事にあります。

というので見てみたら、
Mixing heavy and light components


 (英文でした。)

おお!これだこれ、俺の症状の一つはこれだ。上になってるはずのフレームが3D画面の下に潜り込むっての。
・・・イヤン、俺英語読めないんだけど。しょうがないなぁYahoo翻訳で、


 
 Guideline No. 3
 ガイドライン番号。 3
 
 Do not place heavyweight (AWT) components inside a JInternalFrame.
 ヘビー級(AWT)構成要素をJInternalFrameに入れないでください。

 なにぃぃぃ!?
 おいおい、どうすんだこりゃ?ここの書き方だとOSの資源を使うdirectXOpenGLもヘビー級だよな。つまりそもそも不可能なことをやろうとしてたってことかよ。
こういう大事なことは初めに言ってくれよ!


 ・・・しかしひどいなぁ。難しいんじゃなくて出来ないのかよ。ガイドラインは「入れないで下さい。」って泣けてくるわ。なになに?このページ2003年から更新されてないの?うわー、5年間も動きなしか。放置と思われても仕方ないね。こりゃJava3D改善の見込み無いわ。プラグインの選択間違ったかー。Java3Dの本とか(4200円+1900円)買ったのに・・・。無駄だったかorz。


 さて、では何を選ぶべきか・・・。

今の所の候補(どれも全く知らない)

  • Xith3D
  • jGL
  • JOGL

JInternalFrame+Java3Dの怪

 ゲームを作ろうとしているわけだが、表示したいモノごとにフレーム(というかウィンドウ)をいくつも作るのはスマートではない。一つのフレーム内の複数のレイヤーで表現するのが適当だろう。
 おお!JDesktopPaneと、JInternalFrameという仕組みがあるのか!これはカッコイイ。あとはJInternalFrameにJava3Dを表示させられれば行けるね。
という訳で、JInternalFrameにJava3Dを組み込んでみた。Java3Dの教科書

Java3D教科書 (I・O BOOKS)

Java3D教科書 (I・O BOOKS)

から、キューブが回転するだけのクラスを持ってくる。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package testdesktop;

import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.*;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.*;
import javax.swing.JFrame;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.vecmath.*;

/**
 *
 * @author akabane
 */
public class TestDesktop extends JFrame{
  public static void main(String[] args){
    TestDesktop frame = new TestDesktop();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 500, 400);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  TestDesktop(){
    JDesktopPane desktop = new JDesktopPane();

    JInternalFrame iframe1 = new JInternalFrame();
    iframe1.setSize(150, 100);
    iframe1.setLocation(10, 10);
    iframe1.setVisible(true);

    IFrame2 iframe2 = new IFrame2();
    //Java3D組み込みのためクラス化した。

    desktop.add(iframe1);
    desktop.add(iframe2);

    getContentPane().add(desktop, BorderLayout.CENTER);
  }
}


class IFrame2 extends JInternalFrame{
   public IFrame2()  {
       
        //getContentPane(). //←これをつけても結果は同じ
                setLayout(new BorderLayout());
        GraphicsConfiguration config
         = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);
        //getContentPane(). //←これをつけても結果は同じ
                add(canvas,BorderLayout.CENTER);
        SimpleUniverse universe 
         = new SimpleUniverse(canvas);
        universe.getViewingPlatform().setNominalViewingTransform();
        
        BranchGroup root = new BranchGroup();
        Color3f lightColor = new Color3f(1.0f, 1.0f, 1.0f);
        BoundingSphere bs = new BoundingSphere();
        Vector3f lightDirection 
         = new Vector3f(4.0f, 5.0f, -10.0f);
        DirectionalLight light 
         = new DirectionalLight(lightColor, lightDirection);
        light.setInfluencingBounds(bs);
        root.addChild(light);
        
        TransformGroup tg = new TransformGroup();
        ColorCube cube = new ColorCube(0.5f);
        tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        Alpha alpha = new Alpha(-1,3000);//無限回数3秒1回転
        RotationInterpolator rip 
         = new RotationInterpolator(alpha, tg);
        rip.setSchedulingBounds(bs);
        tg.addChild(cube);
        tg.addChild(rip);
        root.addChild(tg);
        universe.addBranchGraph(root);
       
        setSize(350, 300);
        setLocation(30, 30);
        setVisible(true);
    }
}

↓結果

 ぎょわぁぁぁ!?
 一瞬だけレイヤーに表示されて、すぐにフレーム(というかウィンドウ)の外で回転を始めたぞ!?
 なんじゃこりゃぁぁぁぁぁ!?
 おまけに一つ目のレイヤーを選択すると、二つ目のレイヤーの(枠とかツールバーとかの)上にはなるが、Java3D表示部分の方が更に上になってしまってる。レイヤーの上下関係がおかしなことになってるぜ!!

 ”Java3Dはswingと相性が悪い”って聞いてた(冒頭の教科書で言ってました)けど、これ程とはっ・・・!
 それとも、swingと組み合わせるためにはそれなりの修正をしないといけないのか?そりゃ、以前さんざんこき下ろした教科書からソース持ってくる俺も節操がないが、一応swing対応のコードを持ってきたんだけどな・・・。


 だからさぁ、こういう「応用をしようとすると途端にうまく行かなくなる」の、どうにかしてくれないかなぁ。
 初心者の登山ガイドブックには、山の道筋だけじゃなく
・冷えるから防寒着必須
・水場が無いから水必須
・山の天気は変わり易いから麓での観天望気で中止も視野に
 とか書いてあるわけでしょ?
 でもプログラミングの教科書ときたら道筋どころか
「必要な装備品」
「坂道・岩場の歩き方」
「ヤマビコの時ヤッホーと言う時には両手を口に添える」
 とかそういう事しか書いてないんだよっ!これじゃ道に迷うのは当然だし、必ず(ではないが高確率で)遭難する。
 まあ、プログラミングで「道筋」ってのはもうソースのことだから、千差万別の目的のソースを全部本に書くわけにはいかない訳だけど、せめて「命にかかわる事項」「避けるべき事柄」について書いといてくれないかなぁ・・・。
 ”Java3Dはswingと相性が悪い”ってのもさ、それだけじゃ何がダメで何がいいのかサッパリ分からんだろ。


教科書にはそういう
「最低限やってはいけない事」とか、
「どうして相性が悪いのかの理由」とかを
書いとけ!


 そうすりゃ個々で判断・回避できるから、無駄な犠牲を払わなくて済むのに・・・(怒)。こういうのは上級者の知識じゃないんだよ。初心者にこそ必要ものなの。
 そりゃあさ、ツアーコンダクターに引率された団体客のように、本に書かれたソースを打ち込むだけの観光客なら何も知らなくていいけどさ、いざ自分だけで登ろうとしたら山(技術)の危険について何も知らない初心者は下らない理由で遭難死(バグ除去不能)するんだよ。そして死んだらもうプログラミングの世界には(わけが分からないから)戻ってこない。


 それともナニか?プログラミング技術者ってのは初心者の新規参入が面白くないのか?初心者が高い山の頂上に到達するのが気に入らないのか?初心者はその辺の中腹で野垂れ死にすればいいと思ってんのか?だから教科書には何も注意事項を書かないのか?「面白いですよ」「楽しいですよ」と美辞麗句を並べるだけ並べて、何の注意喚起もしないのは、「やってはいけない」本を出さないのは、”俺たちの経営するプログラミングの学校や通信講座に入らずに独習する初心者は山に入ったら遭難すればいい”と思ってるからだろう!

プロジェクト越しのクラスコピーの怪



単純なことである。
NetBeansで、
適当にプロジェクトを二つ作って、一方に適当にクラスを作る。

package copytest1;

/**
 *
 * @author java1rou
 */
public class CopyTest1 {

    public CopyTest() {
        //it's constrauctor
        //これはコンストラクターです。
    }
}

そのクラスに日本語でコメントする。もしくは、日本語を文字リテラルにする。
で、もう一方にそのクラスをコピーする。リファクタリングコピーでも、ただのコピーでもよい。
すると、日本語が文字化けする!

package copytest2;

/**
 *
 * @author java1rou
 */
public class CopyTest1 {

    public CopyTest1() {
        //it's constrauctor
        //縺薙l縺ッ繧ウ繝ウ繧ケ繝医Λ繧ッ繧ソ繝シ縺ァ縺吶?
    }
}

ただし、同じプロジェクト内でのコピーではこれは発生しない。
また、windowsVISTAでは発生したが、windowsXPでは起きなかった。後は知らない。


既に報告されてるバグかも知れないと今気づいたが、面倒なので検索しない。