• 締切済み

JOGLのグラフィクスのプログラムについての質問

以下のプログラミングコードについて質問です。以下のコードはJavaのJOGLで立方体を描くためのプログラムなのですが、これを編集して正四面体を描けるコードにかえたいです。どのように編集すればいいでしょうか?何行目のどこをどう書き換えるといいというようにできるだけ詳しくお願いします。 import java.awt.*; import java.awt.event.*; import javax.media.opengl.*; import javax.media.opengl.glu.*; import javax.media.opengl.awt.*; public class CubePosition extends GLCanvas implements GLEventListener { public static void main(String[] args) { if (args.length == 3) (new CubePosition("CubePosition", args)).showFrame(); else (new CubePosition("CubePosition")).showFrame(); } private Frame f; protected GL2 gl; protected GLU glu; protected double eye_x = 4.0, eye_y = 3.0, eye_z = 7.0; protected CubePosition(String name) { super(); setSize(500, 500); addGLEventListener(this); f = new Frame(name); f.add(this); f.pack(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } protected CubePosition(String name, String[] args) { this(name); eye_x = Double.parseDouble(args[0]); eye_y = Double.parseDouble(args[1]); eye_z = Double.parseDouble(args[2]); } protected void showFrame() { f.setVisible(true); } public void init(GLAutoDrawable drawable) { gl = drawable.getGL().getGL2(); glu = new GLU(); gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.glEnable(GL2.GL_DEPTH_TEST); gl.glEnable(GL2.GL_CULL_FACE); } public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { final double fieldOfView = 25.0, near = 1.0, far = 20.0; double aspect = (double) w / (double) h; gl.glViewport(0, 0, w, h); gl.glMatrixMode(GL2.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(fieldOfView, aspect, near, far); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity(); glu.gluLookAt(eye_x, eye_y, eye_z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); } public void diplay(GLAutoDrawable drawable) { gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); cubeDisplay(); } static float[][] vertices = {{ -1.0f, -1.0f, -1.0f },{ 1.0f, -1.0f, -1.0f },{ 1.0f, 1.0f, -1.0f }, { -1.0f, 1.0f, -1.0f },{-1.0f, -1.0f, 1.0f },{ 1.0f, -1.0f, 1.0f}, { 1.0f, 1.0f, 1.0f },{ -1.0f, 1.0f, 1.0f }}; static int[][] faces = {{ 1, 2, 6, 5 },{ 2, 3, 7, 6 },{ 4, 5, 6, 7 },{ 0, 4, 7, 3 }, { 0, 1, 5, 4 },{ 0, 3, 2, 1 }}; static float[][] colors = {{ 0.0f, 1.0f, 1.0f },{ 1.0f, 0.0f, 1.0f },{ 1.0f, 1.0f, 0.0f }, { 0.0f, 0.5f, 0.5f },{ 0.5f, 0.0f, 0.5f },{ 0.5f, 0.5f, 0.0f }}; protected void cubeDisplay() { gl.glBegin(GL2.GL_QUADS); for (int i =0; i < faces.length; i++) { gl.glColor3fv(colors[i], 0); for (int j = 0; j < faces[i].length; j++) gl.glVertex3fv(vertices[faces[i][j]], 0); } gl.glEnd(); gl.glFlush(); } public void dispose(GLAutoDrawable drawable) { } }

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

丸投げは良くないです。 このコードを読み込んでどこでなにをやっているかを把握することです。 そうすれば答えが見えてきます。

関連するQ&A

  • どこがダメなんでしょう

    入力した数字 1 2          3 4 を        -2  1        1.5 -1 と出力したいんです  public class Re1{ public static void main(String args[]){ double n1=Double.parseDouble(args[0]); double n2=Double.parseDouble(args[1]); double n3=Double.parseDouble(args[2]); double n4=Double.parseDouble(args[3]); double a=n1*n4-n2*n3; double b=1/a; double q[][]={{n4,-n2}, {-n3,n1}}; double l[][]=new double[2][2]; for(int i=0; i<l.length; i++){ for(int j=0; j<l[i].length; j++){ l[i][j]=0; l[i][j]=b*q[i][j]; } } for(int i=0; i<l.length; i++){    for(int j=0; j<l[i].length; j++){ System.out.print(l[i][j]+" "); } System.out.println(); } } } お願いします。

  • すみませんが以下のJavaプログラムが実行できないです。

    どこが間違ってる所を修正してくれませんか? abstract class Vehicle { protected int speed; public void setSpeed(int s) { speed = s; System.out.println(“速度を” + speed + “にしました。”); } abstract void show(); } class A { public static void main(String[] args) { Vehicle vc; vc = new Vehicle(); vc.setSpeed(100); vc.show(); } }

  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • Writer & PrintWriter

    import java.io.*; public class JavaIO4 { public static void main(String args[]) throws Exception { Writer w=new FileWriter(args[0]); PrintWriter pw=new PrintWriter(w); for (int i=0; i<=330; i+=30) { double atai=Math.sin(Math.PI*i/180.0); String str="sin("+i+")="+atai+"\n"; pw.write(str); } pw.close(); } } と import java.io.*; public class JavaIO4 { public static void main(String args[]) throws Exception { //Writer w=new FileWriter(args[0]); PrintWriter pw=new PrintWriter(args[0]); for (int i=0; i<=330; i+=30) { double atai=Math.sin(Math.PI*i/180.0); String str="sin("+i+")="+atai+"\n"; pw.write(str); } pw.close(); } } の結果が同じになるんですけど、 Writer w = new FileWriter(args[0]); PrintWriter pw = new PrintWriter(w); とするのはなぜなんですか? 何か意味はあるんですか?

  • javaでgraphicsの描画の件

    今日は javaでgraphicsの描画を行っていますが、CENTERのペインには、描画できますが、 それ以外のペイン(NORTH,WEST、EAST,、SOUTH)には、描画できないように思います。 Q1)この件について、コメント頂けますと大変助かります。 下記に、ソースコードを添付いたします。 =================== package pkg; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class SampleApp extends JFrame { public SampleApp(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 300); this.add(new GPanel(), BorderLayout.WEST); this.add(new GPanel(), BorderLayout.CENTER); } public static void main(String[] args) { new SampleApp().setVisible(true); } } class GPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); // int w = this.getWidth(); // int h = this.getHeight(); int w=200; int h=200; g.setColor(Color.RED); g.fillOval(0, 0, w/2, h/2); Graphics2D g2 = (Graphics2D)g; g2.draw(new Line2D.Double(40, 40, w,h)); g.setColor(Color.BLUE); g.setFont(new Font("Serif", Font.BOLD, 36)); g.drawString("Graphics draw!", 10, h - 50); // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(8.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } }

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えてください!

    BufferedWriterを使ってコマンドプロンプトから文字を入力して実行時に与えたパスのテキストに書き込んでいくプログラムをコーディングしてみたのですがなかなか上手くいきません。添削をお願いします。 import java.io.*; class BW{ public static void main(String[] args){ try{ File fl = new File("args[0]"); FileWriter fw = new FileWriter(fl); BufferedWriter bw = new BufferedWriter(fw); for(int i = 0;args[i]==null;i++){ bw.write(args[i]); bw.newLine(); } bw.flush(); bw.close(); }catch(IOException e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • JAVAコンストラクタについて

    JAVA のコンストラクタ定義の際に、下記のようにコンストラクタにvoidを付けた時と付けない時の処理結果が変わるのはなぜでしょうか。 (1) class O { protected int d; O(){ System.out.println("O = " + d); } } class Study_6_3main_void { public static void main(String args[]) { int i = 1; O OO = new O(); System.out.println("O = "); } } (2) class O { protected int d; void O(){ System.out.println("O = " + d); } } class Study_6_3main_void { public static void main(String args[]) { int i = 1; O OO = new O(); System.out.println("O = "); } } 実行結果 (1) O = 0 O = (2) O = 以上です。回答の程よろしくおねがいします。

    • ベストアンサー
    • Java
  • parseDouble文について

    以下のプログラムを作成しました。 import java.io.*; public class Class1 { public static void main (String args[]) throws IOException { System.out.println("円周率の値はいくつですか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); double pi = Double.parseDouble(str); System.out.println("円周率の値は" + pi + "です。"); } } このようなプログラムをコンパイルすると、 「parseDoubleは、Doubleクラス内のメソッドではありません。」というエラーメッセージが出ます。parseDouble文がおかしいのだと思いますが、参考書で調べても一向に解決できません。解決方法をご存知の方は教えてください。  また、このparseDouble文は、参考書には出ているものの、MSDNライブラリには存在しませんでした。  そこのあたりの事情についても教えてください。  ちなみに開発環境はVisual J++6.0 Professional, OSはWindows XP Professionalです。

    • ベストアンサー
    • Java
  • プログラムの合体。

    jump7799_4836さん 2018/7/2103:34:44 public class Test2 { public static int メソッド () { System.out.println("メソッド()が呼ばれました"); return 0; } public static int メソッド (int i) { System.out.println("メソッド(int i)が呼ばれました"); return i; } public static int メソッド (int i, int j) { System.out.println("メソッド(int i, int j)が呼ばれました"); return i; } public static int メソッド (short s) { System.out.println("メソッド(short s)が呼ばれました"); return s; } public static int メソッド (double d) { System.out.println("メソッド(double d)が呼ばれました"); return (int) d; } } public メソッド class Test2 { public メソッド static void main(String[] args) { Test2.メソッド (); Test2.メソッド (1); Test2.メソッド (1,2); Test2.メソッド (1.1); Test2.メソッド ((short) 1); Test2.メソッド ((double)1); } } kouzou@GD348ZZD9:/WORK$ javac Test2.java Test2.java:29: エラー: class、interfaceまたはenumがありません public メソッド class Test2 { ^ Test2.java:30: エラー: <identifier>がありません public メソッド static void main(String[] args) { ^ エラー2個 2つのプログラムが合体することってあるのですか? いつもすみません。 解説のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • Javaのプログラムについて教えて下さい

    //Sample.java class Sample void methodA(int temp) if(temp == 0) String str = new String("Exception"); Integer.parseInt(str); else if(temp == 1) int[] array = new int[temp]; else Exception exc = new Exception(); throw exc; //SampleMain.java class ExceptionMain public static void main(string[] args) Sample sam = new Sample(); Int temp = Integer.parseInt(args[0]); Sam.method(temp); } } このプログラムの場合、ExceptionMainに新たにコードを加えて、コマンドライン引数が0,1,その他の場合に例外メッセージを出力するプログラムを教えて下さい。

    • ベストアンサー
    • Java

専門家に質問してみよう