質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

Q&A

解決済

2回答

431閲覧

JOGLでの3次元の立方体を表示したい。

mizumizuki

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

0グッド

0クリップ

投稿2019/06/18 05:18

3次元の立体を表示したい

3次元のフラクタル図形を表示する前段階として、3次元の立方体を表示しようと思っています。

発生している問題・エラーメッセージ

Exception in thread "main" java.lang.IllegalAccessError: class CubeAngle tried to access protected method Cube.<init>()V (CubeAngle is in unnamed module of loader com.sun.tools.javac.launcher.Main$MemoryClassLoader @16e7dcfd; Cube is in unnamed module of loader 'app') at CubeAngle.<init>(CubeAngle.java:11) at CubeAngle.main(CubeAngle.java:6)

該当のソースコード

Java

1public class CubeAngle extends ObjectAngle { 2 public static void main(String[] args) { 3 if (args.length > 0 && args.length < 4) // 投影法指定時 4 (new CubeAngle("CubeAngle", args, 0)).showFrame(); 5 else // 標準の投影法 6 (new CubeAngle("CubeAngle")).showFrame(); 7 } 8 9 protected CubeAngle(String name) { // コンストラクタ 10 super(name); // 上位コンストラクタの起動 11 object = new Cube(); // 描画立体の登録 12 } 13 14 protected CubeAngle(String name, String[] args, int offset) { 15 super(name, args, offset); // 上位コンストラクタの起動 16 object = new Cube(); // 描画立体の登録 17 } 18}

Java

1// 正六面体(立方体) 2// 稜線長 2.0 3// 外接球の半径 sqrt(3.0) 4public class Cube extends Polyhedron { 5 private static final float[][] cubeVertices = // 8頂点座標値 6 { { -1.0f, -1.0f, -1.0f }, { 1.0f, -1.0f, -1.0f }, { 1.0f, 1.0f, -1.0f }, 7 { -1.0f, 1.0f, -1.0f }, { -1.0f, -1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f }, 8 { 1.0f, 1.0f, 1.0f }, { -1.0f, 1.0f, 1.0f } }; 9 10 private static final int[][] cubeFaces = // 6面の頂点番号列 11 { { 1, 2, 6, 5 }, { 2, 3, 7, 6 }, { 4, 5, 6, 7 }, { 0, 4, 7, 3 }, 12 { 0, 1, 5, 4 }, { 0, 3, 2, 1 } }; 13 14 private static final int[][] cubeEdges = // 12稜線の頂点番号列 15 { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 0 }, { 0, 4 }, { 1, 5 }, { 2, 6 }, 16 { 3, 7 }, { 4, 5 }, { 5, 6 }, { 6, 7 }, { 7, 4 } }; 17 18 private static final float[][] cubeFaceColors = // 6面の描画色 19 { { 0.0f, 1.0f, 1.0f }, { 1.0f, 0.0f, 1.0f }, { 1.0f, 1.0f, 0.0f }, 20 { 0.0f, 0.5f, 0.5f }, { 0.5f, 0.0f, 0.5f }, { 0.5f, 0.5f, 0.0f } }; 21 22 protected Cube() { 23 vertices = cubeVertices; 24 faces = cubeFaces; 25 edges = cubeEdges; 26 faceColors = cubeFaceColors; 27 } 28}

Java

1import com.jogamp.opengl.*; 2 3public abstract class Polyhedron implements DisplayObject{ 4 protected float[][] vertices; 5 protected int[][] faces; 6 protected int[][] edges; 7 protected float[][] faceColors; 8 9 public void display(GL2 gl){ 10 for (int i=0;i<faces.length;i++){ 11 gl.glBegin(GL2.GL_POLYGON); 12 gl.glColor3fv(faceColors[i],0); 13 for (int j=0;j<faces[i].length;j++){ 14 gl.glVertex3fv(vertices[faces[i][j]],0); 15 } 16 gl.glEnd(); 17 } 18 } 19 20 public int vertices(){ 21 return vertices.length; 22 } 23 24 public float vertex(int id,int j){ 25 return vertices[id][j]; 26 } 27 28 public int faces(){ 29 return faces.length; 30 } 31 32 public int faceVertex(int id){ 33 return faces[id].length; 34 } 35 36 public float facesVertex(int id,int i,int j){ 37 return vertices[faces[id][i]][j]; 38 } 39 40 public int edges(){ 41 return edges.length; 42 } 43 44 public float edgeVertex(int id, int i, int j){ 45 return vertices[edges[id][i]][j]; 46 } 47}

Java

1import com.jogamp.opengl.*; 2 3public interface DisplayObject{ 4 public void display(GL2 gl); 5}

Java

1import java.awt.*; 2import java.awt.event.*; 3import com.jogamp.opengl.*; 4import com.jogamp.opengl.glu.*; 5import com.jogamp.opengl.awt.*; 6 7public abstract class ObjectAngle extends GLCanvas 8 implements GLEventListener { 9 private Frame f; // Frameオブジェクト 10 protected GL2 gl; // GLオブジェクト 11 protected GLU glu; // GLUオブジェクト 12 protected double fieldOfView = 25.0, near = 1.0, far = 20.0; 13 // カメラ(透視投影)のパラメタ 画角, 前方/後方クリッピング面 14 protected float depth = -10.0f; // 平行移動量 15 protected float rotx = 20.0f, roty = -30.0f, rotz = 0.0f; 16 // x軸,y軸,z軸回りの回転角 17 protected DisplayObject object; // 具体的な描画命令 18 protected int objectID; // ディスプレイリスト番号 19 20 protected ObjectAngle(String name) { // コンストラクタ 21 super(); // GLCanvasのコンストラクタ実行 22 setSize(500, 500); // 幅と高さの設定 23 addGLEventListener(this); // GLイベント登録 24 25 f = new Frame(name); // Frameの作成 26 f.add(this); // FrameにGLCanvasを登録 27 f.pack(); // 配置とサイズの確定 28 f.addWindowListener(new WindowAdapter() { // 無名オブジェクトの作成 29 public void windowClosing(WindowEvent e) { 30 System.exit(0); // ウィンドウ閉鎖で終了 31 } 32 }); 33 } 34 35 protected ObjectAngle(String name, String[] args, int offset) { 36 this(name); // 標準コンストラクタの起動 37 switch (args.length - offset) { 38 case 1: // 画角指定 39 fieldOfView = Double.parseDouble(args[0+offset]); break; 40 case 2: // クリッピング面指定 41 near = Double.parseDouble(args[0+offset]); 42 far = Double.parseDouble(args[1+offset]); break; 43 case 3: // 回転角指定 44 rotx = Float.parseFloat(args[0+offset]); // x軸回り 45 roty = Float.parseFloat(args[1+offset]); // y軸回り 46 rotz = Float.parseFloat(args[2+offset]); // z軸回り 47 } 48 } 49 50 protected void showFrame() { 51 f.setVisible(true); // Frameの表示 52 } 53 54 public void init(GLAutoDrawable drawable) { // 初期化 55 baseInit(drawable); // 基本機能の初期化 56 objectInit(); // 立体定義(ディスプレイリスト) 57 } 58 59 protected void baseInit(GLAutoDrawable drawable) { 60 gl = drawable.getGL().getGL2(); // GLオブジェクトの取得 61 glu = new GLU(); // GLUオブジェクト 62 gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 背景色 63 gl.glEnable(GL2.GL_DEPTH_TEST); // 奥行テスト利用 64 gl.glEnable(GL2.GL_CULL_FACE); // 背面除去利用 65 } 66 67 protected void objectInit() { 68 objectID = gl.glGenLists(1); // ディスプレイリスト作成 69 gl.glNewList(objectID, GL2.GL_COMPILE); // 登録開始 70 object.display(gl); // 描画命令 71 gl.glEndList(); // 登録終了 72 } 73 74 public void reshape(GLAutoDrawable drawable, // ウィンドウサイズ変更時 75 int x, int y, int w, int h) { 76 cameraInit(w, h); // カメラ(レンズ)の設定 77 positionInit(); // 初期位置の設定 78 } 79 80 protected void cameraInit(int w, int h) { // カメラ(レンズ)の設定 81 double aspect = (double) w / (double) h; // 縦横比 82 gl.glViewport(0, 0, w, h); // 描画領域の指定 83 gl.glMatrixMode(GL2.GL_PROJECTION); // 投影変換行列 84 gl.glLoadIdentity(); // 恒等行列の設定 85 glu.gluPerspective(fieldOfView, aspect, near, far); 86 // 透視投影変換行列作成 87 gl.glMatrixMode(GL2.GL_MODELVIEW); // モデル変換行列 88 gl.glLoadIdentity(); // 恒等行列の設定 89 } 90 91 protected void positionInit() { // 初期位置の設定 92 gl.glTranslatef(0.0f, 0.0f, depth); // 平行移動 (z軸方向) 93 } 94 95 public void display(GLAutoDrawable drawable) { // 描画要求時 96 setMatrix(); // 変換行列の設定 97 gl.glCallList(objectID); // ディスプレイリスト呼出し 98 resetMatrix(); // 変換行列の再設定 99 } 100 101 protected void setMatrix() { // 変換行列の設定 102 gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); 103 // バッファクリア(画面消去) 104 gl.glPushMatrix(); // 行列の複写 105 gl.glRotatef(rotx, 1.0f, 0.0f, 0.0f); // 回転 (x軸回り) 106 gl.glRotatef(roty, 0.0f, 1.0f, 0.0f); // 回転 (y軸回り) 107 gl.glRotatef(rotz, 0.0f, 0.0f, 1.0f); // 回転 (z軸回り) 108 } 109 110 protected void resetMatrix() { // 変換行列の再設定 111 gl.glPopMatrix(); // 複写行列の回復 112 } 113 114 public void dispose(GLAutoDrawable drawable) { // ウィンドウ消去時 115 } 116} 117

試したこと

java -cp ".:lib/*" CubeAngle.javaで実行しました。

補足情報(FW/ツールのバージョンなど)

使用しているのはmac os 10.14.5
VisualStudioCodeでjavaのバージョンは12
https://teratail.com/questions/35454
に載っている方法でJOGLを動かしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

すいません。自己解決しました。実行コマンドに間違えて.javaがついていただけでした。ご迷惑をおかけしました。

投稿2019/06/21 03:48

mizumizuki

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

class CubeAngle tried to access protected method Cube.<init>()V

「クラス CubeAngle がプロテクトメソッド Cube.<init>()V にアクセスしようとしました」

です.

投稿2019/06/20 08:30

jimbe

総合スコア12632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問