■ トピック関連記事
WebGLのシェーダーでテクスチャ 投稿者:たけし 投稿日:2012/09/25(Tue) 14:53 No.7732

WebGLのシェーダーで、mqoファイルのデータを元に、複数あるマテリアルでマテリアルごとに1つずつのテクスチャをセットするにはどうすればいいのでしょうか?
「WebGLによるMQOビュワー」ではわからなかったので、シンプルにシェーダーなどのソースも付けて教えていただけませんか?
無理言ってすみませんが、よろしくお願いします。

Re: WebGLのシェーダーでテクスチャ - sio29   2012/09/26(Wed) 02:14 No.7733
ソースはちょっと…

方法としては描画前(drawArraysやdrawElementsの前に)に、そのマテリアルで使うテクスチャを設定してあげるだけだと思います。
activeTextureでテクスチャを有効にしてあげて、
bindTextureでテクスチャを関連付けしてあげるだけかと。
そのときShaderへどのテクスチャを使うかをuniform命令で教えてあげるだけです。

ただし前提としてポリゴン(頂点リスト)は予めマテリアルごとに分割しているものとします。

WebGLはOpenGL ES2.0の薄いラッパーなのでOpenGLのサンプルプログラムはほぼそのまま使えますので、
OpenGL ES2.0のプログラムを検索してみてはどうでしょうか?
Re: WebGLのシェーダーでテクスチャ - sio29   2012/09/26(Wed) 02:29 No.7734
mqoviewerで言えばmqogl.jsがWebGLへのアクセスする関数をまとめたソースになります。
その中でテクスチャを切り替えるのはSetxxxTextureです。
ディフューズテクスチャならばSetDifTextureになります。
ソースの中ではprogram.dif_samplerがディフューズテクスチャが使用するテクスチャサンプラになります。
その値をGLSL側(mqoshader.flag)でDif_uSamplerがうけとります。

基本的に特別なことは何もしてません。
描画前にテクスチャを切り替える。これだけです。
Re: WebGLのシェーダーでテクスチャ - たけし   2012/09/26(Wed) 15:29 No.7735
sio29さん、ありがとうございます。

ポリゴン(頂点リスト)を予めマテリアルごとに分割すればよかったんですね。
そこに気づきませんでした。
処理 記事No 暗証キー

- Joyful Note -