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

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

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

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

C++

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

Q&A

解決済

1回答

1502閲覧

openGL バージョンについて

nia_1001

総合スコア13

OpenGL

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

C++

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

0グッド

0クリップ

投稿2019/07/19 01:43

編集2019/07/19 01:49

今 OpenGLのver.1.1を使ってゲームを作ってるんですが

バージョンって上げたほうがいいですか?

このままでもいいのでしょうか?

バージョンを上げることにより関数も変わってしまうと思うので悩んでます

バージョンを上げた際に利点とかがあれば教えてください

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

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

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

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

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

fana

2019/07/19 01:45

> わかってしまうと思うので悩んでます 誤記だと思いますが,なんともいえない悩みになってます.
guest

回答1

0

ベストアンサー

とりあえず、素の知識だけだと不安なので、Wikipediaも参考にしています。

OpenGL1.1以降、となれば、プログラマラブルシェーダを使うことがメインになります。
そうなると、全く書き方が変わってきます。
マトリクスやライトは、自分で計算しなければなりません。(マトリクスは、GLMを使えばいいですが)

青い矩形を描くプログラム。

c

1glBegin(GL_TRIANGLE_STRIP); 2glColor4f(0.0f, 0.0f, 1.0f, 1.0f); 3glVertex3f(-0.2f, 0.2f, 0.0f); 4glColor4f(0.0f, 0.0f, 1.0f, 1.0f); 5glVertex3f(-0.2f, -0.2f, 0.0f); 6glColor4f(0.0f, 0.0f, 1.0f, 1.0f); 7glVertex3f(0.2f, 0.2f, 0.0f); 8glColor4f(0.0f, 0.0f, 1.0f, 1.0f); 9glVertex3f(0.2f, -0.2f, 0.0f); 10glEnd();

(OpenGLの固定機能なんて久々に書いたんで、間違っているかもしれないけど、)これが、こうなります。(だいぶ端折ってます)

c

1GLuint vs = glCreateShader(GL_VERTEX_SHADER); 2const char *vs_source = 3"attribute vec3 vertex;\n" 4"void main()\n" 5"{\n" 6" gl_Position = vec4(vertex, 1.0);\n" 7"}\n"; 8glShaderSource(vs, 1, &vs_source, NULL); 9glCompileShader(vs); 10GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); 11const char *fs_source = 12"void main()\n" 13"{\n" 14" gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\n" 15"}\n"; 16glShaderSource(fs, 1, &fs_source, NULL); 17glCompileShader(fs); 18GLuint program = glCreateProgram(); 19glAttachShader(program, vs); 20glAttachShader(program, fs); 21glLinkProgram(program); 22 23GLint loc = glGetAttribLocation(program, "vertex"); 24glEnableVertexAttribArray(loc); 25const GLfloat vertices[] = { -0.2f, 0.2f, 0.0f, -0.2f, -0.2f, 0.0f, 0.2f, 0.2f, 0.0f, 0.2f, -0.2f, 0.0f }; 26glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices); 27 28glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 29

バージョンを上げた方がいいかは、プログラミングの目的によるでしょう。

勉強のためであれば、プログラマブルシェーダもやっておいた方がいいでしょう。
ゲームを作る事が優先であれば、…。

OpenGL1.1の次のバージョン1.5が登場したのは、2003年です。(上記Wikipediaによれば)
つまりOpenGL1.1は、15年以上前のハードウェアを対象とした物であり、その程度の機能しか持ち合わせてません。
シェーダを書けば、被写界深度などの画面エフェクトもしやすくなります。

言い換えれば、それほどグラフィックにこだわらないのであれば、無理にプログラマブルシェーダを使う必要もないでしょう。

後は、どのようなゲームを作るかによるので、ご自身でご検討ください。


ついでに余談ですが、WindowsでOpenGL1.1以降のバージョンを使うのであれば、GLEWというライブラリを使うのが楽ですよ。
あと、現在であればglut(Freeglut)よりもGLFWを使うことをおすすめします。

投稿2019/07/19 12:10

katsuko

総合スコア3469

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

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

nia_1001

2019/07/23 05:19

ご回答ありがとうございます。参考になりましたありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問