パリーンですパリーン。ガシャーンかな?(どうでもいい)
いままでこれに手を出さなかった理由、それは、
三角形が描画できない!
これです。
画像を切り取ってバラバラに描画することがどうしてもできませんでした。
四角形なら簡単なのですが、三角形の、それもイビツな形のものは皆目見当がつきませんでした。
今回よさげなエフェクトを思いついたので、ぜひとも実現しようとDixqさんにDXライブラリでできないか尋ねました。
「DrawPolygon3Dでできますよ」
と言って、私がそれでも「?」だったのでサンプルコードを書いていただきました。
(サンプルコードはちょっと変えてあります)
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),DxLib_Init();
VERTEX3D Vertex[ 3 ]={}; //ポリゴン数X3つ必要
int GrHandle = LoadGraph("sample.png");
Vertex[ 0 ].pos = VGet( 100.0f, 380.0f, 0.0f ) ;//表示する座標(左上)
Vertex[ 0 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;//法線ベクトル(面がどっちに向いてるかってこと)
Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ;//拡散光色
//反射光色も指定出来るけど省略
Vertex[ 0 ].u = 0.3f ;//画像中のどこか。uは画像のx、vは画像のy(0~1で指定)
Vertex[ 0 ].v = 0.2f ;
Vertex[ 1 ].pos = VGet( 380.0f, 240.0f, 0.0f ) ;//表示する座標(右)
Vertex[ 1 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;//法線ベクトル(面がどっちに向いてるかってこと)
Vertex[ 1 ].dif = GetColorU8( 255, 0,255,255 ) ;//拡散光色(緑を抜いてみた)
Vertex[ 1 ].u = 0.8f ;//画像中のどこか。uは画像のx、vは画像のy(0~1で指定)
Vertex[ 1 ].v = 0.5f ;
Vertex[ 2 ].pos = VGet( 50.0f, 60.0f, 0.0f ) ;//表示する座標(左下)
Vertex[ 2 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;//法線ベクトル(面がどっちに向いてるかってこと)
Vertex[ 2 ].dif = GetColorU8( 0,255,255,255 ) ;//拡散光色(赤を抜いてみた)
Vertex[ 2 ].u = 0.2f ;//画像中のどこか。uは画像のx、vは画像のy(0~1で指定)
Vertex[ 2 ].v = 0.7f ;
DrawPolygon3D( Vertex, 1, GrHandle, FALSE ) ;//表示
WaitKey() ;
DxLib_End() ;
return 0 ;
}
[album]373[/album]
なん・・・・だと・・・!?
ことは単純だったのです。VERTEX3Dクラスのuとvで画像のどの部分を描画するかを決めていたのです。
今まで0.0fと1.0fしか代入したことなかったので理解できなかったのです。
その基本的なところをDixqさんに教わりました。サンプルコードまで書いていただいて本当にありがとうございます。
よっしゃ!バリバリ割れるエフェクト作ったるで!
このエフェクトを使う予定が四種類ほどあってですね、これを使う弾幕は作るのが楽しみです。
次はどうしたら三角形が四角形になるか、ですね。破片のなかには四角形になるものもあるので、その条件を考えたいと思います。