static void Main(string[] args) { // Altseed2 を初期化します。 if (!Engine.Initialize("PostEffect - LightBloom", 640, 480)) { return; } // 画像を表示するノードを作成して登録します。 // 詳しくはSpriteのサンプルを参照してください。 var node = new SpriteNode { Texture = Texture2D.Load(@"TestData/Graphics/flower.png"), Scale = new Vector2F(0.5f, 0.5f) }; Engine.AddNode(node); // ライトブルームを適用するポストエフェクトを作成して登録します。 var postEffect = new PostEffectLightBloomNode { // ライトブルームの強さを設定します。 Intensity = 5.0f, Threshold = 0.5f }; Engine.AddNode(postEffect); // メインループ。 // Altseed のウインドウが閉じられると終了します。 while (Engine.DoEvents()) { // Altseed を更新します。 Engine.Update(); } // Altseed の終了処理をします。 Engine.Terminate(); }
static void Main(string[] args) { // Altseed を初期化します。 Engine.Initialize("~ Altseed2 DEMO ~", 640, 480); Engine.ClearColor = new Color(0, 0, 0); // テキストを描画するノードを作成し、エンジンに登録します。 var title = new TextNode(); title.Font = Font.LoadDynamicFont("Courier.ttf", 64); title.FontSize = 48; title.Text = Engine.WindowTitle; title.CenterPosition = title.ContentSize / 2; title.Position = new Vector2F(320.0f, 80.0f); Engine.AddNode(title); // スペクトルバーを示す図形ノードを作成し、エンジンに登録します。 var spectrumBars = new RectangleNode[16, 16]; for (int i = 0; i < 16; ++i) { for (int j = 0; j < 16; ++j) { spectrumBars[i, j] = new RectangleNode(); spectrumBars[i, j].RectangleSize = new Vector2F(20.0f, 8.0f); spectrumBars[i, j].CenterPosition = new Vector2F(10.0f, 4.0f); spectrumBars[i, j].Position = new Vector2F(28.0f * i + 110.0f, 16.0f * j + 60.0f); spectrumBars[i, j].Color = HSV2RGB((int)(22.5 * i), 255, 255); Engine.AddNode(spectrumBars[i, j]); } } // シークバーを示す図形ノードを作成し、エンジンに登録します。 var seekBarLine = new LineNode(); seekBarLine.Point1 = new Vector2F(0.0f, 0.0f); seekBarLine.Point2 = new Vector2F(500.0f, 0.0f); seekBarLine.Thickness = 5.0f; seekBarLine.Position = new Vector2F(70.0f, 400.0f); var seekBarDot = new CircleNode(); seekBarDot.VertNum = 360; seekBarDot.Radius = 12.0f; seekBarDot.Position = new Vector2F(0.0f, 2.5f); seekBarLine.AddChildNode(seekBarDot); Engine.AddNode(seekBarLine); // ライトブルームのポストエフェクトを作成し、エンジンに登録します。 var lightBloom = new PostEffectLightBloomNode(); lightBloom.Intensity = 5.0f; lightBloom.Threshold = 0.1f; lightBloom.CameraGroup = 1; Engine.AddNode(lightBloom); // 音ファイルを読み込んで再生します。 var sound = Sound.Load(@"sample.ogg", false); var soundId = Engine.Sound.Play(sound); // メインループ。 // Altseed のウインドウが閉じられると終了します。 while (Engine.DoEvents()) { // スペクトル情報を取得します。 var spectrum = Engine.Sound.GetSpectrum(soundId, 1024, FFTWindow.Blackman); // スペクトル情報を区分ごとに合計し、スペクトルバーにその値を反映させます。 for (int i = 0; i < 16; ++i) { var amplitude = spectrum.Skip(i * 8).Take(8).Average(); for (int j = 0; j < 16; ++j) { var color = spectrumBars[i, 15 - j].Color; color.A = (byte)((amplitude > j * 4.5) ? 255 : 0); spectrumBars[i, 15 - j].Color = color; } } // スペクトル情報を全て平均し、ライトブルームの光の強さに使用します。 var amplitudeTotal = spectrum.Average(); lightBloom.Exposure = amplitudeTotal * 0.5f; // 曲の長さと再生位置を取得します。 var songLength = sound.Length; var songPosition = Engine.Sound.GetPlaybackPosition(soundId); // 曲の長さと再生位置を、シークバーに反映させます。 seekBarDot.Position = new Vector2F(songPosition / songLength * 500.0f, 2.5f); // Altseed を更新します。 Engine.Update(); // 音が止まっていたらメインループを終了します。 if (!Engine.Sound.GetIsPlaying(soundId)) { break; } } // Altseed の終了処理をします。 Engine.Terminate(); }