jMonkeyEngineで3Dを試す

ゲーム開発に携わってきたほぼ全員が、この分野で最高のパフォーマンスが得られるのは明らかな理由で、C / C ++ / asmでしか達成できないことを理解しています。 この記事のこの声明については議論しません。また、他の言語でリアルタイムゲームを作成することすら考えていませんでした。 ただし、ゲームは異なるため、次の製品の実装に必要な人件費を正当化する必要があることに注意する必要があります。 プロジェクトが非常に積極的な最適化を行った後でも「重い」グラフィックコンポーネントを備えた巨大なプロジェクトである場合、エンドユーザー(ゲーマー)が搭載したトップエンドハードウェアが必要です。この場合、C / C ++の開発言語には特別な競合はありません。 しかし、おもちゃが通常のカジュアルゲームにすぎず、ネットブックで十分な場合は、開発用のツールを選択することで想像力をかきたてることができます。 この原則に基づいて、この記事では、ゲーム開発の分野でそれが誇るものを見つけようとします。これは、jMEエンジンを例として使用して、一見これにはあまり適していませんが、一般的に便利なJava言語です。

イントロ


jMonkeyEngine 。 それについて何もする必要はありません。エンジンは実際にそれと呼ばれ、サイトのスローガンでさえ「深刻な猿。 深刻なエンジン」(「深刻な猿。深刻なエンジン」)。 一部の開発者は明らかにこれらの動物に関連するものを持っています(シェーダーの開発とデバッグに同じRenderMonkeyを思い出します)。

それにもかかわらず、エンジンで唯一のコミックタイトル。 jMEは、快適でかなり迅速なゲームの作成に必要なすべてをサポートします。これは、グラフィカルなビジュアライザーだけではありません。 入力処理システムと物理シミュレーションとオーディオ再生のライブラリも利用できます。 他の多くのエンジンに固有のツールの標準セットに加えて、次のような機能に注目できます。

インストールと最も単純なユースケース


既製のエンジンをロードするか、リポジトリからソースをマージして自分で収集します。 どちらの場合も、出力に必要なライブラリを取得し、それをディスク上の便利な場所に配置します。
Eclipseで空のプロジェクトを作成し、[プロパティ]-> [Javaビルドパス]に移動します。

画像

Poke外部JARを追加し、/ path / to / the / engine / libフォルダー(エンジン自体のパッケージ)および/ path / to / the / engine / lib / lib / lwjgl(このエンジンで使用されるビジュアライザーパッケージ)からライブラリを追加しますケースLWJGL)。 もちろん、すべてのパッケージを追加する必要はありません。実際に使用されるパッケージだけで十分です。 次のようになります。

画像

LWJGLパッケージのプロパティで、作業に必要なネイティブライブラリを指定します。これは、アドレス/パス/ to / the / engine / lib / lib / lwjgl / native / <your_os>にあります。 例:

画像

最初の準備が完了したら、新しいクラス(たとえば、プログラム)を作成します。 このクラスをSimpleGameクラスの継承者にします。これはテストプログラムに適しています。 必要なすべてのパラメーターを自動的に構成し、一人称カメラを作成します。 プログラムは2つの簡単なことを行います-キューブを作成し、.objファイルからモデルをロードします。
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URL;

import com.jme.app.SimpleGame;
import com.jme.bounding.BoundingBox;
import com.jme.math.Vector3f;
import com.jme.scene.TriMesh;
import com.jme.scene.shape.Box;
import com.jme.util.export.binary.BinaryImporter;
import com.jmex.model.converters.ObjToJme;

public class Program extends SimpleGame
{
public static void main( String [] args)
{
Program game = new Program();
//
game.setConfigShowMode(ConfigShowMode.AlwaysShow);
game.start();
}

@Override
protected void simpleInitGame()
{
//
Box b = new Box( "Testbox" , new Vector3f(0, 0, 0), new Vector3f(1, 1, 1));
//
b.setModelBound( new BoundingBox());
//
b.updateModelBound();
// (rootNode SimpleGame)
rootNode.attachChild(b);

// .obj
ObjToJme converter = new ObjToJme();
URL full_mesh_path = Program. class .getResource( "mesh.obj" );
TriMesh mesh = null ;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try
{
converter.convert(full_mesh_path.openStream(), output);
mesh = (TriMesh)BinaryImporter.getInstance().load(output.toByteArray());
}
catch (IOException e)
{
System.exit(1);
}
mesh.setModelBound( new BoundingBox());
mesh.updateModelBound();
mesh.setLocalTranslation(Vector3f.UNIT_Y.mult(5));
rootNode.attachChild(mesh);
}
}

* This source code was highlighted with Source Code Highlighter .

複雑なことは何もありません。 ラインに注意を払う価値があります

URL full_mesh_path = Program.class.getResource( "mesh.obj");

したがって、Program.classファイルと同じ場所でmesh.objファイルを探すようにプログラムに指示します。 これは、たとえば、ゲームリソースが.classプログラムファイルを含む.jarアーカイブ内にある場合に便利です。

これでプログラムが起動し、グラフィック設定を選択できるダイアログボックスが表示され、ウィンドウが作成され、手動で作成されたキューブとその中にロードされたグリッドモデルが表示されます。 SimpleGameクラスは、実行時統計を表示する機能を実装します。これは、F4を押すと有効になります。 もちろん、実際のプロジェクトでは、そのようなデフォルトのものは誰も必要としない可能性が高いため、ゲームの場合はHello、worldよりも深刻であり、StandardGameクラスを使用することをお勧めします。

次に、配布用のプログラムを準備します。 これを行うには、ファイル->エクスポート->実行可能なJARファイルを実行します。 表示されるウィンドウで、エクスポートされたプログラム、宛先フォルダーを選択し、「必要なライブラリーを生成されたJARにパッケージ化する」を選択します。 [完了]をクリックすると、プログラムの実行可能コードと必要なすべてのエンジンライブラリを含む.jarファイルが作成されます。 開始するには、最初に指定されたフォルダーからプログラムフォルダー(./libなど)にネイティブライブラリをコピーする必要もあります。 実行するには、実行します
java -Djava.library.path =。/ lib -jar program.jar

プログラムは、program.jarがあるフォルダーにあるか、program.jarファイルに直接ある場合、mesh.objファイルをロードできます。 任意のアーカイバを使用して、アーカイブ内にファイルを追加できます。

ここには完全に論理的な質問があります-それはどれくらい速く動作しますか?..完全に自然な答えのためにそれを見てください - あなた自身を見てください 。 このサイトには、jnlpを介してダウンロードされたデモが一定数あります。これには、この例ほど原始的なものも含まれていません。 それらについて、作業の速度を評価できます。

フィニッシュライン


この事実調査記事は、完成したとみなすことができます。 簡単な例は、jMEを使用したゲームの作成の容易さをよく示しています。 一方、彼はエンジンの実際の機能を明らかにしていませんが、オフサイトのwikijavadocによって明らかにされているため、興味のある人は創造性と征服するための利用可能なすべてのプラットフォームを持っています。

安全に作業します。 賢く働く。 あなたの未来はそれにかかっている©Half Life Railway

Source: https://habr.com/ru/post/J88254/


All Articles