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

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

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

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

OpenGL

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

OpenGL ES

携帯電話のような組込み機器のためにデザインされたOpenGLのサブセットです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

1096閲覧

openGL|ES の2Dで二つの三角形を表示できない

Takuya615

総合スコア9

Java

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

OpenGL

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

OpenGL ES

携帯電話のような組込み機器のためにデザインされたOpenGLのサブセットです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/03/10 02:45

openGL|ESで複数の3角形を描画する方法がわかりません。
アルファブレンディング

GLES20.glEnable(GLES20.GL_BLEND) GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA,GLES20.GL_ONE_MINUS_CONSTANT_ALPHA) or GLES20.glEnable(GLES20.GL_BLEND) GLES20.glBlendFunc(GL_ONE, GL_ONE)

で、いろいろ重ね合わせられるぜと聞いたのですが、なぜか私のコードでは、三角形が1つも表示されなくなってしまいます。
ここ数日、ネットで探していたのですが、ブレンディングに関する参照が少なく、よくわかりません。
困っています。
よろしければ参照か、どう訂正すればいいのか、教えていただけませんか?よろしくお願いします。
あらかじめ、お礼を言っておきます。ありがとうございます。

kotlin

1class GLRenderer : GLSurfaceView.Renderer { 2 3 private lateinit var vertexBuffer: FloatBuffer 4 private lateinit var colorBuffer: FloatBuffer 5 private lateinit var vertexBuffer2: FloatBuffer 6 7 8 private val vertexShaderCode = 9 "attribute vec4 vPosition;" + 10 "void main() {" + 11 " gl_Position = vPosition;" + 12 "}" 13 private val fragmentShaderCode = 14 "precision mediump float;" + 15 "uniform vec4 vColor;" + 16 "void main() {" + 17 " gl_FragColor = vColor;" + 18 "}" 19 20 private var shaderProgram = 0 21 22 private fun loadShader(type: Int, shaderCode: String): Int { 23 val shader = GLES20.glCreateShader(type) 24 GLES20.glShaderSource(shader, shaderCode) 25 GLES20.glCompileShader(shader) 26 return shader 27 } 28 29 30 override fun onSurfaceCreated(gl: GL10, config: javax.microedition.khronos.egl.EGLConfig?) { 31 GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f) 32 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT or GLES20.GL_DEPTH_BUFFER_BIT) 33 34 35 GLES20.glEnable(GLES20.GL_BLEND) 36 GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA,GLES20.GL_ONE_MINUS_CONSTANT_ALPHA) 37 //GLES20.glEnable(GL_BLEND); 38 //GLES20.glBlendFunc(GL_ONE, GL_ONE); 39 //GLES20.glBlendEquation(GL_FUNC_ADD) 40 41 //頂点のバッファ 42 val values = floatArrayOf( 43 0.5f, -0.5f, 0.0f, 44 0.6f, -0.5f, 0.0f, 45 -0.5f, 0.9f, 0.0f 46 ) 47 vertexBuffer = 48 ByteBuffer.allocateDirect(values.size * 4) 49 .order(ByteOrder.nativeOrder()) 50 .asFloatBuffer().apply { 51 put(values) 52 position(0) 53 } 54 55 //色のバッファ 56 val colors = floatArrayOf( 57 1.0f, 1.0f, 0.0f, 1.0f,//1101 58 0.0f, 1.0f, 1.0f, 1.0f,//0111 59 1.0f, 0.0f, 1.0f, 1.0f//1011 60 ) 61 colorBuffer = ByteBuffer.allocateDirect(colors.size * 4) 62 .order(ByteOrder.nativeOrder()) 63 .asFloatBuffer().apply { 64 put(colors) 65 position(0) 66 } 67 68 69 //頂点のバッファ2 70 val values2 = floatArrayOf( 71 0.0f, -0.8f, 0.0f, 72 0.5f, 0.1f, 0.0f, 73 0.0f, 0.0f, 0.0f 74 ) 75 vertexBuffer2 = 76 ByteBuffer.allocateDirect(values.size * 4) 77 .order(ByteOrder.nativeOrder()) 78 .asFloatBuffer().apply { 79 put(values2) 80 position(0) 81 } 82 83 84 85 86 //GPUの設定 87 val vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode) 88 val fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode) 89 shaderProgram = GLES20.glCreateProgram() 90 GLES20.glAttachShader(shaderProgram, vertexShader) 91 GLES20.glAttachShader(shaderProgram, fragmentShader) 92 GLES20.glLinkProgram(shaderProgram) 93 GLES20.glUseProgram(shaderProgram)//---------------追加してみた 94 } 95 96 override fun onSurfaceChanged(gl: GL10, width: Int, height: Int) { 97 gl.glViewport(0, 0, width, height) 98 } 99 100 override fun onDrawFrame(gl: GL10) { 101 102 GLES20.glClearColor(1.0f, 1.0f, 1.0f, 1.0f) 103 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT or GLES20.GL_DEPTH_BUFFER_BIT) 104 105 GLES20.glUseProgram(shaderProgram)//しぇだーから組んだプログラムを、GPUに設定 106 107 108 //頂点情報 その1 109 val positionAttribute = GLES20.glGetAttribLocation(shaderProgram, "vPosition") 110 GLES20.glEnableVertexAttribArray(positionAttribute) 111 GLES20.glVertexAttribPointer( 112 positionAttribute, 113 3, 114 GLES20.GL_FLOAT, 115 false, 116 0, 117 vertexBuffer 118 ) 119 120 //頂点情報 その2 121 val positionAttribute2 = GLES20.glGetAttribLocation(shaderProgram, "vPosition") 122 GLES20.glEnableVertexAttribArray(positionAttribute2) 123 GLES20.glVertexAttribPointer( 124 positionAttribute2, 125 3, 126 GLES20.GL_FLOAT, 127 false, 128 0, 129 vertexBuffer2 130 ) 131 132 //色情報(その1とその2で共通) 133 val colorAttribute = GLES20.glGetAttribLocation(shaderProgram, "vColor") 134 GLES20.glEnableVertexAttribArray(colorAttribute) 135 GLES20.glVertexAttribPointer( 136 colorAttribute, 137 4, 138 GLES20.GL_FLOAT, 139 false, 140 0, 141 colorBuffer 142 ) 143 144 GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3)//三角形を描画 145 146 GLES20.glDisableVertexAttribArray(positionAttribute)//----------頂点情報を記入したプログラムをGPUに渡す 147 GLES20.glDisableVertexAttribArray(colorAttribute)//----------色情報を記入したプログラムをGPUに渡す 148 149 GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3)//三角形を描画 150 GLES20.glDisableVertexAttribArray(positionAttribute2)//----------頂点情報を記入したプログラムをGPUに渡す 151 GLES20.glDisableVertexAttribArray(colorAttribute)//----------色情報を記入したプログラムをGPUに渡す 152 GLES20.glDisable(GLES20.GL_BLEND) 153 154 } 155 }

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問