HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0324
ギバロウhgimg4のオフスクリーンバッファのマテリアルについて2解決


ギバロウ

リンク

2023/3/24(Fri) 11:37:40|NO.99187

hgimg4にて、オフスクリーンバッファを作成し、そのバッファのマテリアルを通じてシェーダーに値を送りたいと思っていますが、うまく送れなくて困っております。
すみませんが、ご指導いただけませんでしょうか。

以下、わかりやすいので、勝手ながら、buhioさんの波シェーダー(https://hsp.tv/play/pforum.php?mode=all&num=99040)に手を加えたものを例として挙げさせていただきます。
よろしくお願いします。



#include "hgimg4.as" ;hgimg4

screen 0,640,480
setcls CLSMODE_SOLID, $000000 ; 画面クリア設定

gpreset

camera_fov=45:camera_aspect=1.5f:camera_near=0.5f:camera_far=768*10:camera_sw=0
gpcamera id_camera, camera_fov, camera_aspect, camera_near, camera_far,camera_sw ; カメラとして設定する
gpusecamera id_camera ; 使用するカメラを選択する
setpos id_camera,0,50,600
gplookat id_camera,0,0,0


buffer 1 , ginfo_sx ,ginfo_sy , screen_offscreen //オフスクリーンバッファ作成
gpgetmat bufmat , 1 ,GPGETMAT_OPT_SCRMAT //オフスクリーンのマテリアルを取得


gpload id_model,"res/wave.gpb"//格子に波のテクスチャを張ったモデルを読込
setscale id_model,5,5,5

gpnodeinfo id_mat,id_model, GPNODEINFO_MATERIAL,"obj1"//モデルのメッシュに対応するマテリアル

_time=0.0f
//--------------------------------------------------
*main

gsel 1
redraw 0


gpmatprm1 id_mat,"u_time",_time/2000 //<-------こっちは通常通り
//gpmatprm1 bufmat,"u_time",_time/2000 //<-------こっちも上と同じ結果になるはずでは???

_time++

gpdraw ; 3D描画更新



gsel 0
pos 0,0
celput 1 , , 1.0 , 1.0

redraw 1
await 1000/60
goto *main


;//////////////////////////ここからシェーダー
;textured.vertを改変→textured_wave.vertに名前変更

///////////////////////////////////////////////////////////
// Uniforms
uniform mat4 u_worldViewProjectionMatrix;
uniform float u_time;//→→→→→→→→→→→→→→→追加項目

・・・省略

void main()
{
vec4 position = getPosition();
position[1] += sin(position[0] + u_time* 100);//→→→→→→→→→→→→→→→追加項目
gl_Position = u_worldViewProjectionMatrix * position;

・・・省略



この記事に返信する


buhio

リンク

2023/3/24(Fri) 19:09:07|NO.99188

ギバロウさん、こんにちわ

検証できていないですが
bufferで初期化する前に、gpusershaderで、シェーダーを指定して関連付けておく必要があるんじゃないかというのが1点
(HELP参照)

画面バッファに、u_timeの値を送っても、頂点データがない(格子状の頂点がない)ので、何も起こらない画面になるんじゃないかな?
 画面バッファは、フラグメントシェーダーで、書き換えるのがメインになるかも(自信なし)

ごめんなさい。ちゃんと検証していませんが、そんな気がしました。
どういうことがやりたいんでしょうか?(^^♪
シェーダー難しいですよね〜〜



ギバロウ

リンク

2023/3/25(Sat) 08:37:02|NO.99193

buhioさん、ご回答いただき、ありがとうございます。
また、勝手にスクリプトを使用したことについてはご容赦を願います。m(_ _;)mすみませんっっ

gpusershaderですね、、、こんな呪文があったとわ。。。
hgimg4についてほぼほぼ初心者なものですみませんです。

で、やりたいことなのですが、バックバッファのマテリアルを仲介としてオブジェクトが持つシェーダーに、値とか行列とか渡せないのかなー、と思ったのです。
gl_useProgram()みたいな感じで。
どうやらこれは的外れみたい。お恥ずかしい。

しかし、おかげ様で別の方法を思いつきました。


たしかにシェーダーは難しいですね。
hgimg4とgameplay3Dの内部がどうなってんのかわかんないし、複雑っぽいですしねぇ。
でも楽しい。

ありがとうございました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.99187への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.