参照コード: Chapter7-1
イントロダクション
前回は、Cubeを作成して3つ並べるところまでやりました。
今回は、3つではなく7つ並べてみようと思います。
<前回のコード>
@Override public void init(Window window) throws Exception { renderer.init(window); gameItems = new GameItem[] { createCube(0.1f, 0, 0, -2) }; } /* 追加したメソッドです */ private GameItem createCube(float cubeSize, float posX, float posY, float posZ) { // Create the Mesh float[] positions = new float[]{ // VO -1 * cubeSize, cubeSize, cubeSize, // V1 -1 * cubeSize, -1 * cubeSize, cubeSize, // V2 cubeSize, -1 * cubeSize, cubeSize, // V3 cubeSize, cubeSize, cubeSize, // V4 -1 * cubeSize, cubeSize, -1 * cubeSize, // V5 cubeSize, cubeSize, -1 * cubeSize, // V6 -1 * cubeSize, -1 * cubeSize, -1 * cubeSize, // V7 cubeSize, -1 * cubeSize, -1 * cubeSize, }; float[] colours = new float[]{ 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, }; int[] indices = new int[]{ // Front face 0, 1, 3, 3, 1, 2, // Top Face 4, 0, 3, 5, 4, 3, // Right face 3, 2, 7, 5, 3, 7, // Left face 6, 1, 0, 6, 0, 4, // Bottom face 2, 1, 6, 2, 6, 7, // Back face 7, 6, 4, 7, 4, 5, }; Mesh mesh = new Mesh(positions, colours, indices); GameItem gameItem = new GameItem(mesh); gameItem.setPosition(posX, posY, posZ); gameItem.setRotation(20, 30, 0); return gameItem; }
前回のコードではCubeを作成するのに、いちいちX〜Zまでの値を設定していました。これは、コードを書き間違えやすく修正点も多いのでイマイチなコードです。なので、これを一般化して作成するCubeの数を与えるようなコードに修正します。
<修正したコード>
@Override
public void init(Window window) throws Exception {
renderer.init(window);
final float cubeSize = 0.1f;
// x軸の初期値
final float xInit = 0;
// y軸の初期値
final float yInit = 0;
// z軸の初期値
final float zInit = -2;
// x軸の増減幅
final float xWidth = 0.185f;
// y軸の増減幅
final float yWidth = 0.033f;
// z軸の増減幅
final float zWidth = 0.1f;
ArrayList arr = new ArrayList();
for(int i = 1; i <= 7; i++) {
arr.add(createCube(
cubeSize, xInit + (xWidth * i), yInit + (yWidth * i), zInit - (zWidth * i)));
}
// 配列の要素数を指定する
GameItem[] items = new GameItem[arr.size()];
// 配列の取り出し
gameItems = arr.toArray(items);
}
/* 追加したメソッドです */
private GameItem createCube(float cubeSize, float posX, float posY, float posZ) {
// Create the Mesh
float[] positions = new float[]{
// VO
-1 * cubeSize, cubeSize, cubeSize,
// V1
-1 * cubeSize, -1 * cubeSize, cubeSize,
// V2
cubeSize, -1 * cubeSize, cubeSize,
// V3
cubeSize, cubeSize, cubeSize,
// V4
-1 * cubeSize, cubeSize, -1 * cubeSize,
// V5
cubeSize, cubeSize, -1 * cubeSize,
// V6
-1 * cubeSize, -1 * cubeSize, -1 * cubeSize,
// V7
cubeSize, -1 * cubeSize, -1 * cubeSize,
};
float[] colours = new float[]{
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f,
0.0f, 0.0f, 0.5f,
0.0f, 0.5f, 0.5f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f,
0.0f, 0.0f, 0.5f,
0.0f, 0.5f, 0.5f,
};
int[] indices = new int[]{
// Front face
0, 1, 3, 3, 1, 2,
// Top Face
4, 0, 3, 5, 4, 3,
// Right face
3, 2, 7, 5, 3, 7,
// Left face
6, 1, 0, 6, 0, 4,
// Bottom face
2, 1, 6, 2, 6, 7,
// Back face
7, 6, 4, 7, 4, 5,
};
Mesh mesh = new Mesh(positions, colours, indices);
GameItem gameItem = new GameItem(mesh);
gameItem.setPosition(posX, posY, posZ);
gameItem.setRotation(20, 30, 0);
return gameItem;
}
こちらのコードでは、Cubeの初期値(を指定しています、この初期値から何個並べるのかを指定できるようにしてあります。赤字の部分が初期値を設定している部分になります。
処理概要DummyGame#init()
- 初期値を設定(初期化)
- 7回Cube作成メソッドを呼び出す
- ループするたびに「増減幅」文を初期値に追加(+, -)する
<実行結果>
初期値を画面の中心に指定しているのでこのようになります。
次は?
3Dグラフを表示するのに、グラフが右に寄りすぎ、、、位置が悪いので修正します。
// x軸の初期値 final float xInit = -0.8f; // y軸の初期値 final float yInit = -0.8f; // z軸の初期値 final float zInit = -2;
修正したのは赤字の部分の値だけです。表示結果は以下のようになります。
なんかイマイチですが、これを1ヶ月分(7 x 5マス)並べてみます。
修正した部分は以下になります。For文が1つだったのを2つにして以下のような手順に変更しました。
- 5回ループする
- 7つCubeを作成するときの初期値を変更する
- 初期値を元にCubeを7つ並べる
コードは以下になります。いわゆる2次元ループってやつですね(笑)
// 1ヶ月分(5週間分のマスを作る) for(int j = 1; j <= 5; j++) { // 開始点より一列文ずらす // X軸の開始点 float xStart = xInit - (0.1f * j); // Y軸の開始点 float yStart = yInit + (0.06f * j) ; // Z軸の開始点 float zStart = zInit - (0.16f * j); // 1週間分 for(int i = 1; i <= 7; i++) { arr.add(createCube( cubeSize, xStart + (xWidth * i), yStart + (yWidth * i), zStart - (zWidth * i))); } }
でわでわ。。。
関連ページ一覧
- Java Basic for文 〜Step1_3_1〜
- Java Basic Level8 〜How to use for statement〜
- Java Basic Level 9〜Training of for statement〜
- Java 3DGame LWJGL GitBook chapter7-1〜Cube作成〜「動画あり」
<サイトマップ>
Mapping of Java Bassic JUnit Eclipse LWJGL IntelliJ Discord OpenCV RPi ~記事一覧~