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


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0321
buhio頂点シェーダーから高さ情報を得たい2解決


buhio

リンク

2024/3/21(Thu) 19:46:25|NO.101434

 皆様、こんにちわ

 HSPでシェーダーに継続的に挑戦しております。
 試行錯誤の結果、波シェーダーが少しだけリアルに改変できました。
 https://youtu.be/v3ZetzLjXSU

 そこで、この波の高さに従ってキャラクターを動かそうと、y座標が知りたくなりました。
 別のbufferを作成し、頂点データをカラー情報としてレンダリングして取得しようとし、レンダリングはできたようですが、
 pget(画面ピクセルの色取得)はhspdishでは非サポートとなっているため、取得できませんでした。

 頂点ごとの座標ではなく、現在地の波の高さが知りたいため、フラグメントシェーダーで補完された位置情報を利用したいのですが、
 何か方法がありますでしょうか。。

 ヒントを頂ければ幸いです。よろしくお願いいたします。



この記事に返信する


usagi

リンク

2024/3/22(Fri) 00:47:30|NO.101437

こんにちわ。ビデオメモリからメインメモリに転送する必要があるので結構難しそうな気がします。
一例ですが、pgetの代わりとして裏技的に直接OpenGlの関数を呼び出すサンプルです。
(GL版のみ)


#include "hgimg4.as" #uselib "opengl32.dll" #define GL_RGBA 0x1908 #define GL_UNSIGNED_BYTE 0x1401 #func global glReadPixels "glReadPixels" int, int, int, int, int, int, var gpreset wx = 512 : wy = 512 screen 0, wx,wy buffer 1, wx, wy, screen_offscreen sdim col, wx*wy*4 repeat ; オフスクリーン gsel 1 redraw 0 gradf 0,0,wx,wy, 1, $ff0000, $00ff00 color : line wx/2,0,wx/2,wy : line 0,wy/2,wx,wy/2 redraw 1 ; openGL限定、現在バインドされているテクスチャから読みだすので ; 直後に読みだす事(gselでバインドされているっぽい) glReadPixels 0,0,wx,wy, GL_RGBA, GL_UNSIGNED_BYTE, col ; pget的な部分(αも取れる) if mx >= 0 & mx < wx & my >= 0 & my < wy { idx = (mx+(wy-1-my)*wx)*4 r = peek(col, idx+0) g = peek(col, idx+1) b = peek(col, idx+2) a = peek(col, idx+3) } ; メイン gsel 0 mx = mousex : my = mousey redraw 0 pos 0,0 : celput 1 rgbcolor $FFFFFF : pos 0,0 mes strf("Mouse: %d,%d",mx, my), 4 mes strf("Color: %d,%d,%d,%d",r,g,b,a), 4 redraw 1 await 1000/60 loop

ビデオ側にあるテクスチャをメインメモリへコピーする処理は比較的重たいと思われますので、
ループの中で複数回呼び出すなど、速度を維持したままリアルタイムで行おうとしたら、
海の場所が決まってれば高さは先に計算したテーブル用意してしまうとか、
頂点が少なければCUP側で計算してしまった方が良いかもしれませんね。
(この例程度ならそこまで問題ないとは思いますが)



buhio

リンク

2024/3/22(Fri) 19:08:38|NO.101438

>>usagi師匠

 むむむ。毎度毎度ありがとうございます。
 速度的に厳しいのですね!

 別案で頂いたCPU側で、頂点シェーダーと全く同じものをスクリプトでこしらえて、
 なんとか波の高さを得られました。(同じなんであたりまえなんですが)
 ほんとに合っているのかだんだんわからなくなってきてますが(笑
 
 うーむ!難しい!!
 次は、法線を計算して海の色を出していかないといけないそうですが、
 絶対わからんところが出てくるので、どうかどうか気長にお付き合いください。。
 
 夏のコンテストまでに間に合うんだろうか、、

 本当にいつもいつも皆様ありがとうございます。



記事削除

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

NO.101434への返信

マスコット

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

名前

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

削除用パスワード

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

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

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