daruma3940の日記

理解や文章に間違い等あればどんなことでもご指摘お願いします

「自分用」DXライブラリでHLSLシェーダー

「DXライブラリでピクセルシェーダを使う その1-Quita」を参考にした。
情報がまとまってるページだけど死んでしまっているので「このページを参考にしました!」だけじゃなくてちゃんとどんなことをしたのか書いておこうと思う。







hoge.fx がHLSLシェーダーのソースコード
DXライブラリをダウンロードしたときについてくるShaderCompilier.exeを使ってコンパイルするとhoge.psoというのが作成される。

ShaderCompiler.exe /Tps_2_0 hoge.fx

ここで /Tps_2_0 はピクセルシェーダ2.0を使うということ。
これは32のテクスチャ命令と64の算術命令までしか実行できないので、/Tps_3_0にした方が良いのかもしれない。

DxLib_Init()を呼ぶ前に

SetUseDirect3DVersion(DX_DIRECT3D_9EX);

を呼ぶ必要がある。(これはピクセルシェーダーのバージョンによるかもしれない。)


以下はコードの必要そうな部分を抜き出してきたつぎはぎ(ちゃんと動かないかもしれない)
ーーCPPーーー

#include "DxLib.h"
typedef int ImageHandle;
typedef int ShaderHandle;

ShaderHandle  barreldistort;
ImageHandle imh;
const std::string BarrelDistortshaderpath = "./shader/ShaderCompiler/barreldistort.pso";

int ShaderScreen;
//頂点の設定
VERTEX2DSHADER vertex[4];

void initVertex() {
	for (int i = 0; i < 4; i++)
	{
		vertex[i].pos = VGet((i % 2) * 640.0f, (i / 2) * 640.0f, 0);
		vertex[i].rhw = 1.0f;
		vertex[i].dif = GetColorU8(255, 255, 255, 255);
		vertex[i].spc = GetColorU8(0, 0, 0, 0);
		vertex[i].u = vertex[i].su = (float)(i % 2);
		vertex[i].v = vertex[i].sv = (float)(i / 2);
	}
}


void TestBarrelShader() {
	float mousex = float(MyMouse::posx) / 640.0f;
	float mousey =float(MyMouse::posy) / 640.0f;
	

	SetDrawScreen(ShaderScreen);

	
	DrawModiGraph(0, 0, 640, 0, 640, 480, 0, 480, imh, TRUE);

	SetDrawScreen(DX_SCREEN_BACK); 
   //定数渡し
	SetUseTextureToShader(0, ShaderScreen);//0なのでs0
	SetPSConstSF(0, 1.30f);//0なのでc0
	SetPSConstSF(1, 2.0f);//0なのでc1

	SetPSConstSF(2, mousex);//0なのでc2
	SetPSConstSF(3, mousey);//0なのでc3

  //シェーダーを適用
	SetUsePixelShader(barreldistort);
	DrawPrimitive2DToShader(vertex, 4, DX_PRIMTYPE_TRIANGLESTRIP);


}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{
	SetUseDirect3DVersion(DX_DIRECT3D_9EX);//これを入れないとシェーダーが使えない

	ChangeWindowMode(TRUE);
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;				// エラーが起きたら直ちに終了
	}
       imh = (ImageHandle)LoadGraph("BG.png");
      const std::string BarrelDistortshaderpath = "./shader/barreldistort.pso";

      barreldistort = LoadPixelShader(BarrelDistortshaderpath.c_str());


       ShaderScreen = MakeScreen(640, 480);
	initVertex();
	while (!ProcessMessage() && !ClearDrawScreen() && !Key[KEY_INPUT_ESCAPE])
	{

		SetDrawScreen(DX_SCREEN_BACK);
		// 画面をクリア

		ClearDrawScreen();
		
		
		//画面の更新処理
		{
	
			TestBarrelShader();
		
		}
		MousePos();

	
		ScreenFlip();
	
	
		if (ProcessMessage() != 0) break;

	}

	
	DxLib_End() ;				// DXライブラリ使用の終了処理

	return 0 ;					// ソフトの終了
}

ーーHLSLーー
これBarrelDistortのプログラム。
t!=1.0にしたときの境界があんまりきれいにならないので上手い処理の方法があれば教えてください
PSいい感じになりました
https://www.geeks3d.com/20140213/glsl-shader-library-fish-eye-and-dome-and-barrel-distortion-post-processing-filters/2/

struct PS_INPUT
{
    float4 DiffuseColor       : COLOR0 ;
    float4 SpecularColor      : COLOR1 ;
    float2 TextureCoord0      : TEXCOORD0 ;
    float2 TextureCoord1      : TEXCOORD1 ;
} ;

// ピクセルシェーダーの出力
struct PS_OUTPUT
{
    float4 Output             : COLOR0 ;
} ;


sampler Texture : register( s0 ) ;

float BarrelPower : register( c0 );
float t : register( c1 );

float mousex : register( c2 );
float mousey : register( c3 );

PS_OUTPUT main( PS_INPUT PSInput )
{
    PS_OUTPUT PSOutput ;

    float2 xy=2.0*PSInput.TextureCoord0.xy-1.0;
    float2 mouse;
    mouse.x=mousex;
    mouse.y=mousey;
    mouse=2.0*mouse.xy-1.0;
    
    float2 xy2=t*(xy-mouse);
    float dist=length(xy2);
    float2 CalcPos;
    float4 TextureColor;

    if(dist>=1.0){
        CalcPos=PSInput.TextureCoord0.xy;
        TextureColor = tex2D( Texture , CalcPos );
    }
    else
    {
        float theta=atan2(xy2.y,xy2.x);
        float dist2=pow(dist,BarrelPower);
        //float dist2=dist*t;

        CalcPos.x=dist2*cos(theta);
        CalcPos.y=dist2*sin(theta);
        CalcPos*=1.0/t;
        CalcPos+=mouse;
        CalcPos=0.5*(CalcPos+1.0);
        TextureColor = tex2D( Texture , CalcPos );
        TextureColor.rgb  -= clamp(0.3*(1.0-dist),0.0,0.8);
    }
     
    PSOutput.Output = TextureColor;
    return PSOutput;
}

こんな感じになる

Magma Live 行ってきた

アンコール含めて2時間3曲。
まあ1曲はメドレーなので3曲とカウントしてよいかは怪しい。

1,Kohntarkorz
メンバーが舞台に上がってきてハーヴ・アクニンによる「ハマタイ」の掛け声から唐突に始まる。
こういったライブではまず最初にメンバーによる挨拶とかがあるんだろうなと勝手に思っていて「ハマタイ」からメンバーによる挨拶が始まるんだろうと思っていたが、
ハマタイ」の後楽器がジャーンと鳴り始めてここでようやくKohntarkorzが始まったことに気が付いた。

緊張していて何があったのかあまり覚えていない。

2,Theusz hamtaahk Trirogy Medley

(ちゃんと覚えているわけではないが)
Makawelekaahmが終わったらZeuhl wortzまで飛ぶ。
Slibendi deh theuszも飛ばされていた。
Zortsungをし、そこから唐突にWurdah ItahのWainsahtへ。

Wurdah Itahはあんまり聞いていないのでどこを飛ばしていたかは分からない。
多分そこから先はほとんどフルでやっていたように思う。

そこからMDKのDa Zeuhl wortz mekanik, Nebehr gudahtt,MKで終了。

Medleyでは中途半端になってしまうのでTheusz hamtaahkかMDKを一曲やってほしかった感があるが。
2時間という時間の制限でうまくやろうとした結果なのかもしれない、
Nebehr gudahttはヴァンデが歌っていたが苦しそうだった。

3,De Futura
ブゾネのベースがすごかった。というかこの曲に限らずこのバンドやはりベースがすごい。
ベースをずっと見ていたい気持ちになるがハーヴ・アクニンがベースの前にかぶってきたりしてほげほげした。
ベースが遊びを入れてもいいようなところであんまり遊びを入れてないような気がしたが腕が痛そうにしていたので仕方ないのかもしれない。
ビブラフォンが音板と音板の間にバチを歯間ブラシを歯と歯の間に通すようにこすりつけて音を出していたりしてそんなこともできるのかと思った。


感想

非日常的な空間すぎてどういう感情を抱くべきなのか分からなかった。
多分すごかったんだとおもう。たぶん。しかしそれと同時にまあこんなもんなのかという気持ちにもなった。
私の今の感受性の問題かもしれない。


先のイベント以降何をすればよいのか分からなくなってしまった
一人で何をするわけでもなくぼーっとするだけの昼下がりは寝ても覚めても牢獄に閉じ込められているような気分になる

親知らずを来週の火曜日に抜くことになったのでそれも原因かもしれない。

今朝の夢

季節は夏。田舎にいます。
田舎といっても田んぼだらけで家がまばらにしかないようなところではなく、近くに駅があるような所だ。そこまで田舎ではない。

各々の家の前にはベビーコーンぐらいのサイズのキュウリっぽい野菜を紫色に染めたものが置かれている。
なぜそれが元々紫色をしてるのではなくて、染めたものだと分かったのかというと、そのキュウリっぽい野菜の置かれた灰色のコンクリートに紫色の水染みが出来ていたからだ。

ある家では老婆が家先でそのキュウリっぽい野菜の準備をしている。
他の家ではビニールのプールで水着の子供たちが水遊びをしている。
敷きたてでまだ真っ黒なアスファルトの一本道を振り返るときれいな入道雲が見える。

いつの間にか、田舎にありがちな大きな家が目の前に建っていた。
そうだった。ここが目的地なんだった。

僕は明日から川崎で行われるイベントに参加する。
僕の知り合いがお金のない僕のためにイベント前日から彼の実家に泊めてくれるというのでありがたく彼の実家に泊まることにしたのだ。

ここは田舎ではあるけど東京だ。
東京にはまだこんな田舎も残ってるんだなぁと今更ながら思う。

とりあえず彼に挨拶して家に上がる。
彼の家のダイニングには東京の地図が壁に貼り付けてあった。
そういえばここまではひたすらYahoo路線とにらめっこをしてきたのでここが東京のどの辺とか全然分からない。
彼にここがどのあたりなのか教えてもらう。(夢の中の東京は南北に長かった)
ここは結構北の方で「長嶋」とかそういう地名だった気がする。(いやここはかなり曖昧)
ここよりさらに北には「奥長嶋」という地名の場所があるらしく、そこに行くには洞窟を通らないといけないらしい。
面白そうで行ってみたいなと思ったが口には出さない。

ここから川崎までどれぐらいかかるのかと聞いてみたら3時間かかると言われてしまいすこし面食らった。
イベントに間に合うかなぁ。

そうこうしてる間にいつの間にか彼の高校時代の友人が家に来た。当たり前だが彼らとは初対面なので僕は居心地が悪くなってしまった。
とりあえず挨拶をして彼と高校時代の友人の話にテキトウに相槌を入れておく。

彼のことは大学に入ってからしか知らないんだが当然ながら彼にも今の彼とは違う高校時代とかがあるわけで、高校時代の友人から僕の印象とは全く違う彼の高校時代の話を聞かされると彼のことを何も知らずに「彼はこういう人間だ」と決めつけていた自分に後ろめたさみたいな気持ちを感じた。(夢の中なのでフィクション)


そうこうしているとお昼ご飯の時間になったらしい。
彼のお母さんっぽい人がご飯を運んできた。彼の妹っぽい人(夢の中なのでフィクション)もお代わりをよそうのを手伝わされている。
結構昭和的な男女の役割みたいなのを重んじる家庭らしい。(夢の中なのでフィクション)

ふと目をダイニングから廊下をはさんで向かいの部屋に向けると
おじさんっぽい人がお爺さんっぽいひとの介護をしていた。(夢の中なのでフィクション)
お爺さんはもう意識もないようで、ひたすら体を前後させて白目をむきながら何も口に入っていないのに口をもごもごさせている。(夢の中なのでフィクション)

自分はこうなってまで生きていたくはないなと思ったが、そういうことを思ってしまうのは彼の家族に対して失礼だなと思ったので目を逸らした。

ここからは覚えていない

行ってきました




正直まだ書きたくないもう少し冷静になってから書きたいというのがあるんだがちゃんと今の感情を記録しておいた方が良いんだろう

こんなザコザコなゲームを作ってシューティングゲームを作った気になっていた自分は愚かだった

他の人の作っていたゲームはどれも素晴らしかった。
私と同じようにシューティングゲームを作ってきていた人たちのゲームはとても素晴らしいゲームだった。

私の周辺のブースにはたくさんの人だかりができていた。
いやまあそうなることは、サークルカットとかを見れば十二分に分かることではあったんだがそれを事実として突きつけられると辛いものがある。
まあ自分より強い人間がいっぱいいるのは当たり前なんだがその当たり前を実際に突きつけられると辛い。

というかもっと勧誘をすべきだったんだよな。通りがかりに私のゲームをチラッと見た人に対して「遊んでいきませんか?」ぐらい声を掛けれただろ。
やっぱり事前準備でもっとビジュアル面を何とかすべきだったんだよ。ビジュアルが悪いと誰も興味を持てないんだよ。
なんで事誰も興味ないようなリプレイ機能の実装と結局左右サークルに気を使って流さなかったBGMの作成をしてたんだよ。
自分が作ってて楽しいのと遊んで楽しいのは違うんだよ。
誰かが言っていた将棋ソフトは強くないと内容に興味を持ってもらえないんだという話を思い出すなぁ。

こういうことを考えると研究室の進捗発表スライドなんかは「相手がちゃんと自分の話を聞いてくれる」という前提に立ちすぎているんだよなぁ。
就活が始まってようやくこういうことを考えるようになった。

というか内容も十分ではなかったろ。全然システムも完成してなかったし。遊んでもらった人たちに申し訳なささえ感じた。時期尚早すぎたんだよ。
隣のサークルはあのゲーム作るのに5年かけたと言ってたじゃないか。

こういう人生イベントがあると自分の甘さというか愚かさに気が付く。
もっとしっかりやっていきたいという気持ちも当然起こる。
しかし何というか今回はそんな勢いは全くなくて、頑張ろうと思うたびにガラスがミシッと音を立ててヒビが入るような感覚が心(そんなものがどこにあるんだ)に発生する
趣味なんだし好きなことをしていきたいという気持ちはあるがこれが自分の好きなことなのかといわれると分からない
そこまでしてこれをしたいかといわれると分からない
何にも本気になれない
こんなことなら家で黙ってシコっておけばよかったんだという気持ちになる

陳腐なことだけど俺がこんなダメダメな人間でも家に帰ればちゃんと俺の相手をしてくれる母とか弟とか家族ではないけど友達とかそういうのがいてくれるおかげで俺は発狂しないで済んでると思うのでありがとう


こういう気分の時に限ってツイッターでどんどん強い人間を見つけてしまう

高校生の完全上位互換が現れたので人生終了です

最近読んだ本

最近読んだやつ。 通学中の電車の中でゆっくり読んでる。次の本買うのもお金がかかるしゆっくりと内容を反芻する時間を取りたいので。

*感想の隠し方を教わったので更新

予告された殺人の記録 (新潮文庫) G. ガルシア=マルケス

Amazon CAPTCHA

感想

友達にお勧めされて読んだがどこが面白いのか分からなかった。 なんというかここまで殺人が予告されてるんだからどこかでどんでん返しが入るんだろうと期待していたんだが... 解説を読んで、OOを上手く表現した本だと言われてもフーンという感じ。

あのひとは蜘蛛を潰せない(新潮文庫) 彩瀬 まる

Amazon CAPTCHA

感想 部活の後輩に数年前勧められてあんまり面白くなくて途中で読むのを辞めてしまっていたのを続きから読んだ。 後半は表現が丁寧で日常的な生活の中の人間の繊細な内面を描き出していて面白いと思うことが出来た。

でもなんというか僕は愛についての話が苦手なんだよな。 いやこれは語弊のある言い方で。 アニメにあるような愛についての描写は何とも思わないんだけどなまなましい恋愛を描いた作品が苦手というか。 具体的で生々しいセックスの描写や、男女が付き合っている描写みたいなのを見ると嫌悪感を抱いてしまう所があって。 価値観が童貞くさい。

 ファストアンドスロー

感想

長い本なので何書けば良いか迷ったが「人間って割と雑な生き物なんですねぇ」とだけ。 いやまあこれも語弊のある言い方なんで。 具体的な質問が載っていたりしてわかりやすく読めた。 こういうのを知っていても結局システム1から逃れられないのであれば意味ないじゃんという人もいるが そういうのを知っていれば、自分がシステム1に騙されてないかと疑問を立てることが出来たり、マジックのミスディレクションみたいな感じではないが人を説得するときに有効に活用出来たり、いい加減な部分を補うために人間の外部の制度を整えたりして補おうとできるんじゃないかとね思いますね。

オエッオエッ(柄にもないことを言ってしまった反動で吐いている)

木馬の騎手

感想 2012年センター試験追試の小説問題にメリーゴーランドという小説があってそれに割と衝撃を受けたのを思い出したのでそれが入ってる短編集を買った。 ものすごく残酷だったり、悲しい事実だったりが目の前で繰り広げられているがそれを子供のそのことについて何も知らない、何もわかっていない純粋な視点から書かれていて面白かった。

銃 病原菌 鉄

感想 長い本だが地理的な要因からいろいろ考察されていて面白い。 そういえば高校の頃好きな科目は地理だったのでそういう本を探してみても良いかもしれない。

FACTFULLNESS

感想 データをちゃんと見るとまあ全体としてみれば世の中悪くはなってないんですねという感じ。 ただまあこういう本って自分に都合の良いデータしか見せなかったりするんで「ほんとに?」という気持ちにもなる

 灼眼のシャナ 1巻

感想 中学の頃買って全く読んでなかったのを読んだ。 面白かった(雑すぎる)

夏目漱石 夢十夜

感想 弟に勧められた。ふーん。面白くはない。

タイムマシン H.G.ウェルズ

感想 ジョージ・オーウェルとH.G.ウェルズを誤解していた。(ホントはジョージ・オーウェルの一九八四年を読みたかった) 内容はフーンって感じ。古い作品をあんまり面白いと思えない。

変身 カフカ

感想 身内に精神障害者がいるとグレーゴル・ザムザの家族の方に共感してしまうがいつ自分がグレーゴル・ザムザの立場になってしまうのか分からないのが怖いんだよな。

ハーモニー 伊藤計劃

感想 面白かった。虐殺器官よりこっちの方が好き。

Self-Reference ENGINE

感想 なんかちょっとしたことをやたらと複雑にこねくり回す感じの本で読みづらいんだけど 読了後は爽やかな気持ちになれた。

 抜きゲーみたいな島に住んでる貧乳は どうすりゃいいですか?

感想 これは本ではなくエロゲ。 面白かった。 ヒナミルートが一番好き。他のルートも面白くはあるんだがそこまで響かない。 人間何も特別なギミックがなくてもここまで物語に対して没入できるもんなんだよ

(何も特別なギミックがなくてもというのは語弊があって没入できるようにキチンとゲームをデザインしてくれている人、ストーリーを考えてくれている人がいる)

「物語に対して真剣に向き合っているか?」などというのはトリックとして面白いかもしれないがそんなものを問いかける必要はないんだ。 むしろそんなのは「これは物語です」と言ってしまってプレイヤーとキャラとの間にある壁を認識させているようなもんなんだよという気持ちになってきた。

というかあるキャラクターのルートを選択してしまうと他のルートのキャラクターが出てくる度に「申し訳ない」という気持ちでいっぱいになってしまう。 これkanon問題という有名なやつらしいですね。 精神が童貞くさい人間なのでエロシーンは飛ばしてた。これどうなんでしょうね。

//今読んでる

日本人のための第一次世界大戦

感想 軍事系も面白いかもしれないなと思い始めたので。 本のタイトルがアレで辛い..... 前借りた第一次世界大戦の本が前提知識がないと読めない本だったので軽めの本をさがした。 割と面白めではあるが著者の政治的意見みたいなのが入っていてちょっと...ってなる

Megabit

Megabit申し込みました

こういうの出てみてぇなぁと思っていたところに良いのがあったので。


CDにゲームを焼いて持ってくる人が多いと思うが面倒なので、ノートPCを一台持っていて試遊してもらい興味を持ってもらえればダウンロードリンクが書かれている名刺を渡す感じにしようと思います
税金関連がややこしいのでもうタダで配るゾ。


締め切りがあればそこに向けて頑張ろうと思えるだろと思っていたけど全く頑張れてないっすね。
天国の一丁目が完成しちゃってるんで今作ってるのが駄目でもそっち出来てるしいっかみたいな気持ちになっている。



というか参加する前から予測出来てたことだけど周りのクオリティ高いな?



ひぇ~~~とは思うがじゃあ自分も頑張ろうとは思えないのが駄目。

当日まで後15日なんだけど何を優先してやっていけばよいんじゃんろうな。


グラフィックが良くないと誰も興味持ってくれないというのはそうなんだけど「グラフィックに力入れるぞ!」と思えば15日ぐらいですぐに良くなるもんなのかと言われるとう~ん。
まあ今のが雑すぎるのでだいぶマシになるとは思う。

というかその前に基本的なシステムが出来てないとだめだよなぁという気持ちもある。
ゲームバランス未調整だから難易度が無茶苦茶になってしまっているし、今のままだとAIはこちらの弾をほとんど完全に避けるのでほぼ勝てないし

多分ゲームバランス調整やAI改造はプログラミングすれば良くて、プログラミングの方が心理的ハードルが低いのでそっちやっていきそう。


というか気恥ずかしかったので宣伝ツイートをコバイア語でしてしまったの悪手で、他の参加者にちゃんと把握されたほうがよかったのではという気持ちになる。
お前は何を目的に参加するんだよ。分からん。自己満足。死。