Eclipse アプリ作成 Lv5〜惨敗:CubeにTextureを貼る〜

参照するドキュメント(LWJGL-GitBook)

参照コード:Chapter7-1(Gitです)

イントロダクション

前回、なんとか以下のように各Cube毎に「高さ」を与えてやることができました。

 

しかし、ぱっと見では「よくわからん」のが現状です。なのでこいつを少しはわかりやすくするために「思いやり」を発揮します。

思いやりその1

実は上記のキャプチャは以下のものを示しています(そのつもりです)。

  1. Cubeの「高さ」は家計簿の支出金額を示しています。
  2.  7 x 5のマスは1ヶ月を示しています(マスは1日)。

「全然わかんねぇよ!」と怒られそうですが、現状はそんなもんでしょう。

そんなわけで試行錯誤してみます。

  1. 手前の面に(月)〜(日)をつけてみる
  2. 左の面に1週〜5週までを示す文言を表示する

とりあえずはこれで行ってみようと思います。

テクスチャを貼る

<2018/11/05>  /** 戦闘中 */

今日の目玉です。ですが、今日はテクスチャを退治することができず。。。

以下のようなエラーが出てしまい、解決に至らず。。。と行ったところです。


Warning validating Shader code: Validation Failed: No vertex array object bound.

java.lang.NullPointerException
at de.matthiasmann.twl.utils.PNGDecoder.readFully(PNGDecoder.java:802)
at de.matthiasmann.twl.utils.PNGDecoder.(PNGDecoder.java:112)
at zenryokuservice.gui.lwjgl.kakeibo.engine.graph.Texture.loadTexture(Texture.java:31)
at zenryokuservice.gui.lwjgl.kakeibo.engine.graph.Texture.(Texture.java:14)
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.putOnTexturePlate(DummyGame.java:109)
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.init(DummyGame.java:81)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.init(GameEngine.java:48)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.run(GameEngine.java:36)
at java.lang.Thread.run(Thread.java:748)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.start(GameEngine.java:27)
at zenryokuservice.gui.lwjgl.kakeibo.game.Main.main(Main.java:13)
java.lang.NullPointerException
at de.matthiasmann.twl.utils.PNGDecoder.readFully(PNGDecoder.java:802)
at de.matthiasmann.twl.utils.PNGDecoder.(PNGDecoder.java:112)
at zenryokuservice.gui.lwjgl.kakeibo.engine.graph.Texture.loadTexture(Texture.java:31)
at zenryokuservice.gui.lwjgl.kakeibo.engine.graph.Texture.(Texture.java:14)
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.putOnTexturePlate(DummyGame.java:109)
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.init(DummyGame.java:81)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.init(GameEngine.java:48)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.run(GameEngine.java:36)
at java.lang.Thread.run(Thread.java:748)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.start(GameEngine.java:27)
at zenryokuservice.gui.lwjgl.kakeibo.game.Main.main(Main.java:13)
java.lang.ArrayIndexOutOfBoundsException: 7
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.putOnTexturePlate(DummyGame.java:109)
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.init(DummyGame.java:81)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.init(GameEngine.java:48)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.run(GameEngine.java:36)
at java.lang.Thread.run(Thread.java:748)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.start(GameEngine.java:27)
at zenryokuservice.gui.lwjgl.kakeibo.game.Main.main(Main.java:13)
java.lang.NullPointerException
at zenryokuservice.gui.lwjgl.kakeibo.engine.graph.Mesh.render(Mesh.java:89)
at zenryokuservice.gui.lwjgl.kakeibo.game.Renderer.render(Renderer.java:70)
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.render(DummyGame.java:278)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.render(GameEngine.java:100)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.gameLoop(GameEngine.java:68)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.run(GameEngine.java:37)
at java.lang.Thread.run(Thread.java:748)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.start(GameEngine.java:27)
at zenryokuservice.gui.lwjgl.kakeibo.game.Main.main(Main.java:13)
java.lang.NullPointerException
at zenryokuservice.gui.lwjgl.kakeibo.engine.graph.Mesh.cleanUp(Mesh.java:114)
at zenryokuservice.gui.lwjgl.kakeibo.game.DummyGame.cleanup(DummyGame.java:285)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.cleanup(GameEngine.java:77)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.run(GameEngine.java:41)
at java.lang.Thread.run(Thread.java:748)
at zenryokuservice.gui.lwjgl.kakeibo.engine.GameEngine.start(GameEngine.java:27)
at zenryokuservice.gui.lwjgl.kakeibo.game.Main.main(Main.java:13)


<2018/11/06>

今日も敗北を喫してしまいました。

だけど、NullPointerExceptionは解決しました。

原因は、参照しているファイルが間違っていたことです。実装したコード

そして、Meshクラス1つで2種類のMeshクラスを管理しようとしたりと。。。つまづきました。

そして今日は、ここまで来ました。

本当は、Cubeの手前に「月〜日」のテクスチャをつける予定だったのですが。。。なんでこうなったのかが、まるでわかりません。→敗北。。。

修正したコードは、

  1. DummyGame
  2. GameItem
  3. Renderer

上記3クラスです。そして、新たに追加したのが「TexturedMesh」クラスです。

<2018/11/07>

色々試したけど、次の機会にリベンジを決める方向に移行します。。。

中途半端にImageが読み込めているのが悔しいさを倍増させますな。。。「月」の一部が表示されている感じに見えます。

Eclipse Copyright文をつける

Eclipseの環境設定を開く

<Mac>

スクリーンショット 2018-11-01 22.12.36.png

<Windows>

画面上部のメニュー「Window > preference 」

スクリーンショット 2018-11-01 22.10.32.png

Java > Code Style > Code Template > Editで編集

クラスを作成する時下のチェックを忘れずに入れるとテンプレートが反映される

スクリーンショット 2018-11-01 22.20.29.png

 






Eclipse Meven 開発手順〜プロジェクトの作成〜

イントロダクション

家計簿アプリを作成するためにEclipseでプロジェクトの作成を始めます。そのための手順です。

Install Eclipse which Development tool To make a Household account book,

Eclipseのインストールはこちらを見てください(Watch here to install Eclipse)

Mevenを使ったプロジェクト作成手順(To create a Meven Project)

Eclipseを起動します。(Execute Eclipse)

プロジェクトエクスプローラが開きますので、プロジェクトを作成します。

右クリックをしてください。

Now we can see package explorer, and right click on package explorer.

New > Project > Maven > Maven Project

そのまま次へ( Press next button)

JARなどを作成する時はに結局POMファイルでコントロールするのでとりあえずで選んでOKです、今回はquick-starter〜を選択しました。次へを選択

Result of all, we have to change "pom.xml". now I checked "quick-starter???". press next button.

空白部分に作成する名前(プロジェクト名 = パッケージ名)を入れます。

input your project name (= packageName)

プロジェクト作成完了!(Finished!)

 






Maven executable jar〜実行可能Jarファイル出力〜

イントロダクション

RPiへのデプロイをする時にMacからJARファイルをSSHで転送するやり方は不便なので以下の手順でできないか検討してみます。

デプロイのフロー

  1. Mac上で起動テストを行ったソースをGitへ登録(Push)
  2. RPiで上記のプロジェクトをダウンロード
  3. RPi上でソースをビルドしてJARファイルを作成

この手順でJARファイルを作成し、実行する、上記の手順はRPi起動時に自動実行する様にautostartファイルに記載する

開発端末でのMaven設定(pom.xml)

pom.xmlの構成

?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  
  <!-- プロジェクト設定 -->
  
 <build>
 <!-- 入出力の設定 -->
 <!-- DEFAULT RASPBERRY PI PROPERTIES -->
 <pi.host>XXX.XXX.XXX</pi.host>
 <pi.port>22</pi.port>
 <pi.user>user_name</pi.user>
 <pi.password>password</pi.password>
 <pi.deployDirectory>/home/user_name/</pi.deployDirectory>
 <pi.main.class>your.package.name.mainClass</pi.main.class>

 <plugins>
   <plugin> 
      <!-- ビルド設定:mvn [plugin name] --> 
   </plugin>
 </plugins>
</build>
 <reporting>
   <plugin>
      <!-- レポート設定 -->
   </plugin>
 </reporting>
 <dependencies>
   <dependency>
     <!-- ライブラリ依存関係の設定 -->
   </dependency>
 </dependencies>
</project>

この構成の中に必要な情報を記述する。

作成したpom.xml(テスト未実施)→失敗

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>zenryokuservice</groupId>
    <artifactId>PAppletRpiCtl</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <repositories>
        <repository>
            <id>RPiCtl</id>
            <url>https://github.com/ZenryokuService/rpictl</url>
        </repository>
    </repositories>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>http://repo1.maven.org/maven2/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.processing/core -->
        <dependency>
            <groupId>org.processing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.6</version>
        </dependency>
    </dependencies>
    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>libs/</classpathPrefix>
                            <mainClass>
                                pictl.swing.frame.RpiCtl
                            </mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Mac上でのMavenビルド結果(RPi上では未実施)

結果、上記の方法ではできませんでした。

原因

  1. 「マニフェスト属性がありません」と怒られる
  2. 「processingを使用するためのJARがない」と怒られる 

問題部分

  • pomファイルにマニフェストを追加していなかった
  • 参照するJARを出力するJARにインクルードしていなかった

解決

足りない部分をpomファイルに記載してビルドする

processingから参照しているものがある様だ。。。

<修正箇所>

・jarプラグインのバージョンを追記

・${artifactId}を${project.artifactId}に修正

 

2018/09/29 現在:調査中

<参考サイト>

processing: https://github.com/processing/processing/releases

maven: https://www.ibm.com/developerworks/jp/java/library/j-5things13/

pom: https://stackoverflow.com/questions/49398894/unable-to-compile-simple-java-10-project-with-maven

補足

実はpomファイルでjarを出力する前にRPi上では画面を起動するために(processingを起動するためにXFCE4をインストール、起動する必要があります。

この部分に関しては後日。。。

2018-09-30現在

まるで動かない。。。違う手段を検討する。。。

 








TensorFlow C++環境〜EclipseにCDTをインストール〜

イントロダクション

Javaでの環境をセットアップしたのですが、チュートリアルが`PythonとかC++しか見当たらなく。。。Pythonでの作成は、好みの問題により見送ることにしました。→C++でやりたいわけです。

駄菓子菓子。。。
C++のインストールはPythonでやるようでした。。。

うーんこれは、本格的にC++で実装しないといけないかも?

TensorFlow in C++環境セットアップ

毎度おなじみEclipseを使用します。

Eclipseを開き上部にあるメニューより「Help」→「MarketPlace(マーケットプレイス)」を開きます。

検索フィールドに「CDT」と入力して検索を実行

上記のようなプラグインがあるのでインストールします。

インストールしたら再起動、プロジェクトの作成をします。

「C++Project」を選択

Hello Worldプロジェクトを選択して作成すると下のように初めのプログラムが実装済みで作成されます。プログラムの起動確認→C++が起動する確認を取るためのハローワールドです。初めてC++やる人も実行できます。

以上です。

Eclipse セットアップ関連

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~



Java Git clone in Eclipse 〜サンプルの取得〜

イントロダクション

サンプルコードを取得する手順を記載しました。リポジトリクローン方法です。

Gitクローンした後にMavenビルドをかけて開発環境を整えます。

Introduction

How to get sample code from Git, and after clone, execute Maven Build to make develop environment in your pc.

Gitからのクローン手順(Eclipseを使用する場合)

How to clone from Eclipse to Git.

色々と試しましたが、Gitから直接ダウンロードするjのが一番
ということになりました。

I had tried to some way to get source from git. And I think best way is using "git clone" in eclipse...

なのでEclipseからチェックアウト(Pull)してきます。
Eclipseのプロジェクトパースペクティブから右クリック

Git->Project from Git(からインポート)

Gitページを開きま緑色の部分をクリックするとURLを取得できます。

GitのURLをコピペします。

あとは、次へ(next)をクリックしていきPullします。

下はPullした結果です。ここからソース見たり、動かしたりします。

起動するときは、以下の様にMaven buildで起動できます。

JavaFXでハローワールド〜

  1. Java 初めてでも大丈夫〜ステップアッププログラミングのススメ〜
  2. ステップアッププログラミング〜Java FxでHelloWorld解説〜
  3. Java StepUpPrograming〜JavaFX で四則計算〜
  4. Java StepUpPrograming〜JavaFXで画面切り替えを作る1〜
  5. Java StepUpPrograming〜JavaFXで画面切り替え2ボタン作成〜
  6. Java StepUpPrograming〜JavaFXで画面切り替え3アクション〜
  7. Java StepUpPrograming〜JavaFXで画面切り替え4Pane切り替え〜
  8. Java StepUpPrograming〜JavaFXで画面切り替え5WebEngine〜

Java Basic

  1. Java Basic Level 1 Hello Java
  2. Java Basic Level2 Arithmetic Calculate
  3. Java Basic Level3 About String class
  4. Java Basic Level 4Boolean
  5. Java Basic Level 5If Statement
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 Traning of If statement
  8. Java Basic Level8 How to use for statement
  9. Java Basic Level 8.5 Array
  10. Java Basic Level 9Training of for statement
  11. Java Basic Level 10 While statement 
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2
  14. サンプル実装〜コンソールゲーム〜
  15. Java Basic インターフェース・抽象クラスの作り方
  16. Java Basic クラスとは〜Step2_1
  17. Java Basic JUnit 〜テストスイートの作り方〜

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

 


Eclipse Gitリポジトリの取得 〜GitからソースをPullしよう〜



イントロダクション

ウェブ上にあるGIT Hubと自分のパソコン上で動くEclipseを連携して作成したファイルのバージョン管理〜プロジェクト管理が出来ます。

Eclipseのインストールはこちら

Java 開発ツールのインストール

予備情報

Git→リポジトリ(ファイルやソースなどを管理するアプリケーション)
オープンソース(OpenSourceSoftware)と呼ばれるもののうちの一つ

最近の(2018/05/04現在)EclipseではGitへの連携プラグイン(EGit)が初期状態で入っています。ない場合は以下の手順で探してみてください。

インストール

ヘッダー部分の「Help」→「EclipseMarketPlace」もしくは
「ヘルプ」→「Eclipseマーケットプレース」を選択

ここから「インストール」をクリックする

ソースをダウンロードする(Pullする)

プロジェクトを右クリック→インポート

あとは以下の順序で選択して最後にURLを入力してOK

コマンドラインからPullする

正直のところPullする時にうまくいかないことが多いので
コマンドラインでの実行方法を記載したします。
Windows: コマンドプロンプトを起動します。
MacやLinux: Terminalを起動します。
筆者はMacで記載しているので「Terminal」を使用します。
「Javaでゲーム作成する時に使用できるライブラリ」LWJGLをPullします。
1. GitからプルしたいWebページ(URL)を取得する(コピーしておく)
2. Gitをダウンロードしたいフォルダを作成(ターミナルを開く)
>mkdir 作成するフォルダの名前
3. ディレクトリを移動
>cd ./作成したフォルダ

4. 以下のコマンドを入力してエンターキー
>git clone https://github.com/LWJGL/lwjgl3.git

練習用に作成したプロジェクトもあります。よかったらPULLしてください。

Javaの基本的なことを実装(テスト)したソース(JavaDocつき)をPUSHしています。

オススメ

Gitからゲームを落としてくる(JavaGameの一覧があるページ)

・Javaの基本を理解するなら下の「Java Basic」をリポジトリに上げているので参考にどうぞ、ソースと記事で理解しやすいと思います。

<関連ページ一覧>

<開発準備>

Eclipseのインストール

<Java Basic>

  1. Java Basic Level 1 Hello Java
  2. Java Basic Level2 Arithmetic Calculate
  3. Java Basic Level3 About String class
  4. Java Basic Level 4Boolean
  5. Java Basic Level 5If Statement
  6. Java Basic Summary from Level1 to 5
  7. Java Basic Level 6 Traning of If statement
  8. Java Basic Level8 How to use for statement
  9. Java Basic Level 8.5 Array
  10. Java Basic Level 8.5 Array
  11. Java Basic Level 10 While statement
  12. Java Basic Swing〜オブジェクト指向〜
  13. Java Basic Swing Level 2〜オブジェクト指向2

Git

  1. Java Git clone in Eclipse 〜サンプルの取得〜
  2. Eclipse Gitリポジトリの取得 GitからソースをPullしよう〜
  3. IntelliJ IDEA GitGitリポジトリからクローン〜

<Java Step1〜ミニゲーム作成>

Micro:bitで遊ぶ

  1. Micro:bit(Chibi:bit) での開発環境セットアップ
  2. Micro:bit スマホでプログラミング〜ブラウザにアクセス〜
  3. Micro:bit スマホでプログラミング〜Bluetoothの設定〜
  4. PHP JS 〜WebSocketもどきの作成〜
  5. PHP ServerSocket 〜レンタルサーバーでSocket受信〜
  6. Python websocket client〜WebSocket送信処理を作る〜
  7. Micro:bit Python 〜マイクロビット→PCへシリアル通信〜
  8. ターミナル(コマンド)を使う 〜FTPSを使ってファイルアップロード〜
  9. Microbit リファレンス 〜サイトを眺めてみる〜
  10. Microbitで遊んでみる
  11. Microbitで遊ぶ〜ボタンを押す〜
  12. Microbitで遊ぶ〜シリアル通信をする〜
  13. Java Microbit Serial data connect 〜シリアル通信〜※中途半端です
  14. Microbit Python 〜シリアル通信データを受け取る〜
  15. Microbit Python HTTP リクエストを飛ばす
  16. Microbit花火〜MicrobitからWebServerまでの旅〜

Java Install Eclipse〜開発ツールのインストール〜

イントロダクション

開発ツール(IDE)のインストール手順です。

Introduction

How to install install Eclipse.

インストール手順(Procedure of install)

1.Eclipseのインストール

・右のURLへアクセスする: http://www.eclipse.org/downloads/

・Eclipseのダウンロード ※迷ったら、マークの付いているものを選択

・ダウンロードが終わったら起動する ※困った時は、こちらも参照ください

・Eclipseが起動したら、以下の手順を行ってください

1.Install Eclipse

・access this URL 「http://www.eclipse.org/downloads/

・select area to download

・execute Eclpse ※ this page help your installing eclipse

<プロジェクトの作成>(<create project>)
PackageExplorer[パッケージエクスプローラ]を右クリック

Right click on Package Explorer

新規→Javaプロジェクトを選択してプロジェクトを作成します。
2. プロジェクトが作成できたらクラスを作成します。

プロジェクト名、クラス名共に好きな名前を入力してください
Javaのルールで使用できない文字もありますのがエラーが出るので心配無用。

Input project name and class name, your favarit name.

do not warry about Java Naming role. Because alert error in eclipse.

<Mevenを使用するプロジェクト作成手順>

Eclipse Meven 開発手順〜プロジェクトの作成〜

2.NetBeansのインストール(Installing NetBeanse)

・右のURLへアクセス、: https://netbeans.org/downloads/index.html

・Javaの対応しているバージョンを確認してダウンロードしてください
※2018/04/30頃にJDK10.XXを使用した場合動きませんでした。
<プロジェクトの作成>(<create project>)
・NetBeansが起動したら以下の手順でプロジェクトを作成します。

左上にあるマークをクリックして下のような画面を表示

Java     => コンソール出力とかを行うプロジェクト(JavaSE)
JavaFx =>  Javaで画面を作成できるプロジェクト(JavaFX) ※JavaSEでもOK
JavaWrb => JavaのWebプロジェクト
JavaEE =>  大掛かりなウェブシステムの構築を行うプロジェクト
JavaME => Javaを使用して、ラズパイなどの小さなパソコン向けのアプリ作成
を行うプロジェクト

3.IntelliJ IDEA

こちらを参照してください。