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

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

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

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

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

OpenGL ES

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

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

GLSL ES

GLSL ESは、GLSLの派生規格で、 組み込み環境向けのOpenGL ES用のシェーダー言語です。

Q&A

受付中

GLSL1.2をGLSL1.5に書き換える

santaro
santaro

総合スコア18

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

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

OpenGL ES

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

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

GLSL ES

GLSL ESは、GLSLの派生規格で、 組み込み環境向けのOpenGL ES用のシェーダー言語です。

1回答

0グッド

0クリップ

5857閲覧

投稿2017/06/19 07:23

###前提・実現したいこと
GLSL1.2で記述されている、バーテックスとフラグメントシェーダーをGLSL1.5に書き換えたいのですが全くわからないので教えていただきたいです。

###ソースコード
fragment

GLSL

1#version 120 2uniform sampler2DRect image; 3uniform float rand; 4 5varying vec3 pos; 6 7void main (void) 8{ 9 vec2 texCoord = vec2(pos.x , pos.y); 10 11 vec4 col = texture2DRect(image,texCoord); 12 vec4 col_r = texture2DRect(image,texCoord + vec2(-35.0*rand,0)); 13 vec4 col_l = texture2DRect(image,texCoord + vec2( 35.0*rand,0)); 14 vec4 col_g = texture2DRect(image,texCoord + vec2( -7.5*rand,0)); 15 16 17 col.b = col.b + col_r.b*max(1.0,sin(pos.y*1.2)*2.5)*rand; 18 col.r = col.r + col_l.r*max(1.0,sin(pos.y*1.2)*2.5)*rand; 19 col.g = col.g + col_g.g*max(1.0,sin(pos.y*1.2)*2.5)*rand; 20 21 gl_FragColor.rgba = col.rgba; 22} 23

vertex

GLSL

1#version 120 2varying vec3 pos; 3void main(void) 4{ 5 pos = gl_Vertex.xyz; 6 gl_Position = ftransform(); 7}

この2つを#version150の形に直したいです

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

ちょっと目に付く書き換え箇所としては、

  • フラグメントシェーダー側のvaryinginにする
  • バーテックスシェーダー側のvaryingoutにする
  • texture2DRecttexture2Dにする
  • gl_FragColorは非推奨になったはずなので、できればout vec4 fragColor;のような変数を追加して、そこに書き込む

ここまでは多分大した手間ではないかと思いますが、

  • gl_Vertexの代わりにin vec4 vertex;のような変数を追加して、それを使う
  • ftransformをやめて、uniform mat4 mvpMatrix;のような変数を追加して、gl_Position = mvpMatrix * vertex;という風に自前で変換行列をかける

のような書き換えが必要かもしれません。
ここを書き換えるということは、もし古いデータ供給法(たとえばglBeginを使うような)をお使いでしたら、これら従来の頂点データ・座標変換法をやめて、まず頂点データをVAOやVBOを使った方法で供給するようにし、座標変換も変換行列を自前で用意してglUniformMatrix4fvなどでシェーダーに渡さないとならないでしょう。
多分こちらの方が大仕事になりますので、まずはOpenGL 3以上を対象にした書籍やサイトをご参考に、OpenGL利用側のコードを修正されることをおすすめします。

参考1: GLSLangSpec.1.50.pdf
参考2: opengl-tutorial
参考3: 床井研究室 - Vertex Buffer Object(少々昔の記事ですが、ご参考になる部分も多いかと思います)

投稿2017/06/19 08:24

Bongo

総合スコア10647

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.83%

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

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

質問する

関連した質問

同じタグがついた質問を見る

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

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

OpenGL ES

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

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

GLSL ES

GLSL ESは、GLSLの派生規格で、 組み込み環境向けのOpenGL ES用のシェーダー言語です。