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

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

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

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

Q&A

1回答

1827閲覧

GLSLシェーダ

seri

総合スコア422

GLSL

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

0グッド

0クリップ

投稿2017/01/16 09:26

Vertexシェーダ内で頂点位置を定義して、Fragmentシェーダで読み込みたいのですがエラーとなります

attribute vec4 position; uniform float time; uniform int reso; uniform vec4 positions[8]; uniform sampler2DRect postex; void main() { int count=reso*reso; float _reso=float(reso); for(float i=0.0;i<float(count);++i){ vec3 _p=vec3(sin(time+i),-i,-i); vec2 texCor=vec2(mod(i,_reso),i/_reso); gl_Position = texture2D(postex,texCor); } }

テクスチャを読み込んで解像度(reso)分の頂点を定義しfor文で位置を書き出しています、この後position[8]の情報を使ってgl_PositionにBoxの形のオブジェクトを書き出したいのですが、テストで実行したところコンパイルエラーとなっています。

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

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

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

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

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

masaya_ohashi

2017/01/16 10:36

コンパイルエラーの内容も記述したら回答が得られるかもしれません。
guest

回答1

0

質問に書かれたコードはVertexシェーダですよね?texture2Dを使えるのはFragmentシェーダ内だけだと思いますが…
そもそもこのVertexシェーダ、for文でgl_Positionに何度も値を書き込んでいますが、最終的にgl_Positionに入っているのはforの最後に計算された値だけだと思います。何か使い方を間違えていませんか?

質問者さんのやりたいことは、例えば(0,0,0)の座標をシェーダに渡したとき、(0,0,0)の座標を中心に立方体を生成したい、ということでしょうか?それはVertexシェーダでは無理です。Vertexシェーダができることは、渡された座標を「動かす」だけで、座標を「増やす」ことはできません。素直にシェーダに立方体のポリゴン情報を渡すほうが簡単だと思います。

※私は触ったことがないので詳しくは言えませんが、Geometryシェーダを使えば可能かもしれません…GeometryシェーダはVertexシェーダとFragmentシェーダの中間に存在する、テッセレーションなどの処理を任されるシェーダです。

投稿2017/01/17 00:35

masaya_ohashi

総合スコア9206

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問