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

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

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

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

OpenGL

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

492閲覧

andoridアプリで立方体をopenGLで描画したいがバグった画面になる

nakatin

総合スコア12

Java

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

OpenGL

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/06/20 05:10

前提・実現したいこと

アプリ開発初心者ですが大学の研究でOpenGLを使うことになったので、色々なサイトで調べて勉強している者です。
下記のブログの簡単な立方体を描画するだけのアプリにしたいのですが、図のようにバグったような画面になってしまいます。
発生原因と修正方法を簡単でもいいのでアドバイスとして教えていただけないでしょうか。

参考ブログ:android開発入門
イメージ説明

アプリ起動時のログ

I/art: Late-enabling -Xcheck:jni I/art: now dumpable=1 W/System: ClassLoader referenced unknown path: /data/app/com.test.test_jogl-1/lib/arm64 I/InstantRun: starting instant run server: is main process I/System.out: ASRMLOG:Activitythread setGripSuppressionMode enter I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LA.BR.1.2.9_RB1.07.01.01.254.018_msm8916_64_refs/tags/AU_LINUX_ANDROID_LA.BR.1.2.9_RB1.07.01.01.254.018__release_AU (I489c51317b) OpenGL ES Shader Compiler Version: XE031.09.00.03 Build Date: 04/12/17 Wed Local Branch: Remote Branch: refs/tags/AU_LINUX_ANDROID_LA.BR.1.2.9_RB1.07.01.01.254.018 Local Patches: NONE Reconstruct Branch: NOTHING I/OpenGLRenderer: Initialized EGL, version 1.4 D/OpenGLRenderer: Swap behavior 1 W/Adreno-ES20: <core_glClear:30>: GL_INVALID_VALUE

#プログラムコード

MainActivity.java

java

1package com.test.test_jogl; 2 3import android.app.Activity; 4import android.os.Bundle; 5 6public class MainActivity extends Activity { 7 8 MyGLView myGLView; 9 10 @Override 11 public void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 myGLView = new MyGLView(this); 14 setContentView(myGLView); 15 } 16 17 @Override 18 protected void onResume(){ 19 super.onResume(); 20 myGLView.onResume(); 21 } 22 23 @Override 24 protected void onPause(){ 25 super.onPause(); 26 myGLView.onPause(); 27 } 28}

###MyGLVIew.java

java

1package com.test.test_jogl; 2 3import android.content.Context; 4import android.opengl.GLSurfaceView; 5 6public class MyGLView extends GLSurfaceView { 7 MyRenderer myRenderer; 8 9 public MyGLView(Context context){ 10 super(context); 11 myRenderer = new MyRenderer(); 12 setRenderer(myRenderer); 13 } 14 15}

MyRenderer.java

java

1package com.test.test_jogl; 2 3import android.opengl.GLSurfaceView; 4import android.opengl.GLU; 5 6import javax.microedition.khronos.egl.EGLConfig; 7import javax.microedition.khronos.opengles.GL10; 8 9public class MyRenderer implements GLSurfaceView.Renderer { 10 11 MyCube cube = new MyCube(); 12 13 @Override 14 public void onDrawFrame(GL10 gl){ 15 //ハッファを削除 16 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BITS); 17 gl.glMatrixMode(GL10.GL_MODELVIEW); 18 gl.glLoadIdentity(); 19 gl.glTranslatef(0,0,-3f);//物体の座標をz軸に-3移動 20 //MyCube.javaをインスタンス化してdrawを実行 21 cube.draw(gl); 22 } 23 @Override 24 public void onSurfaceChanged(GL10 gl, int width, int height) { 25 gl.glViewport(0, 0, width, height); 26 27 gl.glMatrixMode(GL10.GL_PROJECTION); 28 gl.glLoadIdentity(); 29 GLU.gluPerspective(gl, 45f,(float) width / height, 1f, 50f); 30 } 31 32 @Override 33 public void onSurfaceCreated(GL10 gl, EGLConfig config) { 34 gl.glEnable(GL10.GL_DEPTH_TEST); 35 gl.glDepthFunc(GL10.GL_LEQUAL); 36 } 37 38}

MyCube.java

java

1package com.test.test_jogl; 2 3import java.nio.ByteBuffer; 4import java.nio.ByteOrder; 5import java.nio.FloatBuffer; 6 7import javax.microedition.khronos.opengles.GL10; 8 9public class MyCube { 10 11 private final FloatBuffer mVertexBuffer; 12 13 public MyCube(){ 14 float vertices[] = { 15 // 前 16 -0.5f, -0.5f, 0.5f, 17 0.5f, -0.5f, 0.5f, 18 -0.5f, 0.5f, 0.5f, 19 0.5f, 0.5f, 0.5f, 20 21 // 後 22 -0.5f, -0.5f, -0.5f, 23 0.5f, -0.5f, -0.5f, 24 -0.5f, 0.5f, -0.5f, 25 0.5f, 0.5f, -0.5f, 26 27 // 左 28 -0.5f, -0.5f, 0.5f, 29 -0.5f, -0.5f, -0.5f, 30 -0.5f, 0.5f, 0.5f, 31 -0.5f, 0.5f, -0.5f, 32 33 // 右 34 0.5f, -0.5f, 0.5f, 35 0.5f, -0.5f, -0.5f, 36 0.5f, 0.5f, 0.5f, 37 0.5f, 0.5f, -0.5f, 38 39 // 上 40 -0.5f, 0.5f, 0.5f, 41 0.5f, 0.5f, 0.5f, 42 -0.5f, 0.5f, -0.5f, 43 0.5f, 0.5f, -0.5f, 44 45 // 底 46 -0.5f, -0.5f, 0.5f, 47 0.5f, -0.5f, 0.5f, 48 -0.5f, -0.5f, -0.5f, 49 0.5f, -0.5f, -0.5f 50 }; 51 52 ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4); 53 bb.order(ByteOrder.nativeOrder()); 54 mVertexBuffer = bb.asFloatBuffer(); 55 mVertexBuffer.put(vertices); 56 mVertexBuffer.position(0); 57 58 } 59 60 public void draw(GL10 gl){ 61 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 62 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer); 63 64 // Front 65 gl.glNormal3f(0, 0, 1.0f); 66 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); 67 68 // Back 69 gl.glNormal3f(0, 0, -1.0f); 70 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4); 71 72 // Left 73 gl.glNormal3f(-1.0f, 0, 0); 74 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4); 75 76 // Right 77 gl.glNormal3f(1.0f, 0, 0); 78 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4); 79 80 // Top 81 gl.glNormal3f(0, 1.0f, 0); 82 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4); 83 84 // Right 85 gl.glNormal3f(0, -1.0f, 0); 86 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4); 87 88 } 89 90}

AndroidManifest.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.test.test_jogl"> 4 <uses-feature android:glEsVersion="0x00030000" android:required="true" /> 5 6 <application 7 android:allowBackup="true" 8 android:icon="@mipmap/ic_launcher" 9 android:label="@string/app_name" 10 android:roundIcon="@mipmap/ic_launcher_round" 11 android:supportsRtl="true" 12 android:theme="@style/AppTheme"> 13 <activity android:name=".MainActivity"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN" /> 16 17 <category android:name="android.intent.category.LAUNCHER" /> 18 </intent-filter> 19 </activity> 20 </application> 21 22</manifest>

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

ArrowsM04
android 7.1.1

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

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

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

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

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

guest

回答2

0

ベストアンサー

java

1 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BITS);

GL_DEPTH_BITS」ではなく、「GL_DEPTH_BUFFER_BIT」です。
ビルドエラーになるんじゃないかと思ったけど、「GL_DEPTH_BITS」という変数もあるみたいですね。
でも、値が違えば正しく動作はしません。

投稿2019/06/20 12:22

katsuko

総合スコア3469

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

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

nakatin

2019/06/20 14:43

ご指摘いただいた箇所を訂正したら、正常に動作しました! ありがとうございましたm(_ _)m
jimbe

2019/06/20 21:13

> W/Adreno-ES20: <core_glClear:30>: GL_INVALID_VALUE アプリ起動時のログ の最後のコレがそういう意味だったのですね.
katsuko

2019/06/20 22:52

あぁ、ログに出てたんですね、気付かなかったw いや、画面全体がおかしくなるのはまず疑うべきはフレームバッファクリアだろうと思って、見たら引数が間違っていたので指摘しただけなんで。
guest

0

リンク先のコードを集めて同じプログラムを構成し実行してみましたが, エミュレータ2種(Android 9[API28]/Android 7.1.1[API25])とも記事通りの表示となりました.
OpenGL のバージョンやサポート範囲等の環境(ArrowsM04)的な問題ではないでしょうか.

投稿2019/06/20 08:16

jimbe

総合スコア12623

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問