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

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

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

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

Q&A

解決済

2回答

1104閲覧

OpenGLでプログラム側の配列を頂点属性に指定するコードが動かない

Rei_312

総合スコア24

OpenGL

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

0グッド

1クリップ

投稿2022/04/13 10:07

編集2022/04/14 00:45

前提

OpenGLを使用して開発をしています。
そこで、使用するOpenGLのバージョンを上げたところ、今まで使用していたプログラム側の配列を頂点属性配列として渡す方法で描画していた部分が動かなくなりました。
VAOとVBOを使用している部分は、正常に動いており、その他の描画もVAOを使うように置き換えたところ、正常に動作が確認できました。
最新のOpenGL(4.x)ではこのような(VAO,VBOを使用しない)描画方法は使えなくなったのでしょうか?
調べてみたところ、3.xから非推奨となった、という記事が見つかったのですが、今では完全に廃止されたのでしょうか。

以下のような書き方です

C++

1GLfloat vertices[] = { ... }; 2glEnableVertexAttribArray(0); 3glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, &vertices[0]); 4glDrawArrays(GL_TRIANGLES, 0, 2); 5glDisableVertexAttribArray(0);

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

OpenGLのバージョン:4.6.0

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

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

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

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

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

guest

回答2

0

私が作成したプログラムでは(OpenGL 4.0+OpenTK V3.2.0),VAO,VBOを使用してGL.EnableVertexAttribArray、及びGL.VertexAttribPointerを使用して三角形を描画させていますが、問題は発生していません。

GL.EnableVertexAttribArray、GL.VertexAttribPointer、GL.DisableVertexAttribArray いずれもOpenGL 4.0以降で非推奨になっているという情報は確認できません。
(画像を参照して下さい。もしVer4.0以降非推奨になっていればOpenTKがDeprecated Vx.xというエラーを出し、コンパイルできなくなります。)

glDrawArrays(GL_TRIANGLES, 0, 2); で2が指定されているということは、vertices[]の要素数が6であるということになります。
↑vertices[0],vertices[1],vertices[2]に一つ目の三角形のx,y,z頂点座標、vertices[3],vertices[4],vertices[5]に2つ目が入っていれば正常に描画されます。

~部分が動かなくなりました。の状況を詳しく教えていただければ、こちらでも踏み込んだ対処ができると思います。

イメージ説明

投稿2022/04/15 07:37

cure_fontaine

総合スコア137

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

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

0

ベストアンサー

(VAO,VBOを使用しない)描画方法

質問文にあるコードですが VBO を使用したコードに見えます。
VBO を使用しない描画方法は OpenGL 1.1 の頃の glVertexPointer() を使ったコードのことではないでしょうか?
下記記事に OpenGL の各バージョンによる頂点データの扱いについて取りまとめられていますので、こちらが参考になるかと思います。

■ OpenGLでの頂点データの扱いの変化
http://mklearning.blogspot.com/2014/08/opengl.html

あと、手前味噌ですが OpenGL 4.6 のサンプルを作ってみました。
質問文にあるような glEnableVertexAttribArray() / glVertexAttribPointer() を使ったコードは OpenGL 4.6 環境でもまだ動作するようでした。
https://github.com/cx20/hello/blob/master/cpp/opengl4.6/triangle/hello.cpp

投稿2022/04/13 14:10

cx20

総合スコア4633

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

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

Rei_312

2022/04/14 01:01

回答ありがとうございます。 サンプルに提示頂いたものを参考に書き換えようと思います。
cx20

2022/04/14 13:50

サンプルコードについて注意事項がございます。 サンプルは三角形を表示する為のミニマムなコードになっています。 エラー処理等、一切入れておりませんので、その点はご留意ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問