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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

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

OpenGL

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2661閲覧

OpenGLでVBOを用いた描画が上手く実行されない

KureteRubyLua

総合スコア206

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

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

OpenGL

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/06/11 12:18

OpenGLとJavaを用いてツクールのような2DタイルのマップをVBOを用いて描画しようとしているのですが、上手く行きません。

起きているエラーは以下の通りです。

・マップの表示が滅茶苦茶でおかしい。
・実行する度にマップの表示が変わる。
・何度も繰り返すとJava VMが落ちる。

このバグには法則性がなく、どうすればいいのかまるで分かりません。

下に問題点だと思われる一部のソースを書きます。よろしくお願いします。

Java

1/** 2 * タイルマップで扱うイメージのクラス 3 * このクラスを複数個作って、描画する 4 * @author USER 5 * 6 */ 7class TileImage 8{ 9 10 protected static final int POSITION_INDEX = 0; // index of vertex attribute "in_Position" 11 protected static final int COLOR_INDEX = 1; // index of vertex attribute "in_Color" 12 13 protected static final int FLOAT_NUM_BYTES; // sizeof(float) in bytes 14 protected static final int INT_NUM_BYTES; // sizeof(int) in bytes 15 protected static final int VEC4_BYTES; // sizeof(vec4) in bytes 16 17 static { 18 FLOAT_NUM_BYTES = Float.SIZE / Byte.SIZE; 19 INT_NUM_BYTES = Integer.SIZE / Byte.SIZE; 20 VEC4_BYTES = 4 * FLOAT_NUM_BYTES; 21 } 22 23 //テクスチャのクラス 24 protected Bitmap bitmap; 25 26 //座標のID 27 protected int vboIndexId; 28 protected int vboTexId; 29 30 //空間座標を入れている配列 31 protected float[] indexesArray; 32 //テクスチャの座標を入れている配列 33 protected float[] texturesArray; 34 35 //テクスチャのFloatBuffer 36 protected FloatBuffer textures; 37 38 //空間座標のFloatBuffer 39 protected FloatBuffer indexes; 40 41 42 public TileImage(Bitmap bitmap) 43 { 44 this.bitmap = bitmap; 45 } 46 /** 47 * 解放 48 */ 49 public void dispose() 50 { 51 bitmap.dispose(); 52 53 glDisableVertexAttribArray(POSITION_INDEX); 54 55 glDisableVertexAttribArray(COLOR_INDEX); 56 57 glBindBuffer(GL_ARRAY_BUFFER, 0); 58 59 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 60 61 glDeleteBuffers(vboIndexId); 62 63 glDeleteBuffers(vboTexId); 64 65 glBindVertexArray(0); 66 } 67 /** 68 * 描画する関数 69 */ 70 public void draw() 71 { 72 if(!bitmap.getImagePath().equals("")) 73 { 74 GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); 75 GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); 76 77 bitmap.bind(); 78 79 glBindBuffer(GL_ARRAY_BUFFER, vboIndexId); 80 GL11.glVertexPointer(3, GL_FLOAT, 0, 0l); 81 82 glBindBuffer(GL_ARRAY_BUFFER, vboTexId); 83 GL11.glTexCoordPointer(2, GL_FLOAT, 0, 0l); 84 85 GL11.glDrawArrays(GL_QUADS, 0, indexesArray.length); 86 87 GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY); 88 GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); 89 90 glBindBuffer(GL_ARRAY_BUFFER, 0); 91 92 bitmap.unBind(); 93 } 94 } 95/** 96VBOのIDを作る処理 97*/ 98 public void vBOSet() 99 { 100 textures = BufferUtils.createFloatBuffer(texturesArray.length); 101 textures.put(texturesArray); 102 textures.rewind(); 103 104 vboTexId = glGenBuffers(); 105 106 glBindBuffer(GL_ARRAY_BUFFER, vboTexId); 107 glBufferData(GL_ARRAY_BUFFER, textures, GL_STATIC_DRAW); 108 109 indexes = BufferUtils.createFloatBuffer(indexesArray.length); 110 indexes.put(indexesArray); 111 indexes.rewind(); 112 113 vboIndexId = glGenBuffers(); 114 115 glBindBuffer(GL_ARRAY_BUFFER, vboIndexId); 116 glBufferData(GL_ARRAY_BUFFER, indexes, GL_STATIC_DRAW); 117 } 118 //以下、各種変数のゲッターとセッター 119 120}

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

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

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

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

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

guest

回答1

0

自己解決

すみません、自己解決しました。
GL11.glDrawArraysがおかしかったようです
GL11.glDrawArrays(GL_QUADS, 0, indexesArray.length);ではなく、
GL11.glDrawArrays(GL_QUADS, 0, indexesArray.length/3);でした

投稿2016/06/12 21:29

KureteRubyLua

総合スコア206

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問