2012年6月1日金曜日

ヴィータを「有機EL照明」にしてみました!

今回の記事では、PSVITA(プレイステーションヴィータ)を「有機EL照明」にしてみた話について書かせて頂きたいと思います。

今、LED照明が大流行ですが、LEDの光は目に刺さるどぎつさが難点で、次世代のイルミネーションは有機EL照明だと言われているようです。
ヴィータがまさに有機ELなので、あっ、いいんじゃない?と思いついてC#言語で作ってみました・・・といっても、大げさな事では一切なくて、単に白色カラーを表示するだけの簡単なもんです。

操作につきましては、せっかくのヴィータなので、ハードウェアキーを活用しています。
Rキーで「照明ON」
Lキーで「照明OFF」にしてみました。
照明OFFは、画面に黒を表示し、テキストでタイトルを入れています。
そう、有機ELは、液晶と違って、黒色を表示するだけで完全な闇が得られるため、プログラムでバックライトの制御をしなくて良い(※バックライトが無い)という特徴があります。

写真は「黒を表示している」状態のヴィータなんですが、本体色の黒とモニタの黒が完全一体化しているレベルの真っ暗さったらどうでしょう。
有機ELの「特長」には驚かされることばかりですね。

試しに、闇の中で、Rキーを押して有機EL照明をつけて、手のひらパソコンのLOOX U/G90を照らしてみます。

写真を差し替えてあります。当初、LOOX U/G90の上にゴミが落ちてたんで撮り直しました。申し訳ありませんでした。

5インチという大画面という事もあり、確かにそこそこの照明になりますね!!
光が目に優しいという有機ELですが、なるほど、ふんわりとしたホッとするような灯りです。
ただ、ヴィータはそんなに輝度が高いマシンではないので、さすがに災害時にも安心というわけではないでしょうが・・・

■有機ELと液晶の違いは?■

難しい話を一切抜きにして語ると、「自分で光るのが有機EL」「自分では光れないので、バックライトで照らしてもらうのが液晶」となります。

液晶は、黒色も何も一緒くたにバックライトで照らしてしまいますので、本当の黒を作る事が出来ません。
有機ELは、自分で光る事が出来るため、バックライトに頼る必要が無く、黒を出したければ画素を消灯して本当の黒を生み出す事が可能なんです。
応答速度も液晶とは比較にならないほどに高速で、ゲームから写真の鑑賞までベスト・デバイスと言えるものです。

欠点は、耐久性や寿命と言われていますが、いかんせん新しいデバイスなのでまだ行く末がどうなるか分かっていません。


今度は、Lキーを押して「消灯」したところです。
めりこむような真っ暗な中に、フワッとタイトルの文字が浮ぶという状態は、画素が自発光の有機ELならではの特徴ですね。
仮にこれが液晶であれば、黒の部分がバックライトに照らされて全体がグレーとなって浮かび上がるため、タイトル文字だけがLOOX U/G90のボディに映りこむという事は出来ません。

闇と一体化出来る黒色表示。
プラズマテレビもそうなんですが、有機ELの方がもう一歩強烈かな?
この真の黒色に慣れてしまうと、映画館やプラネタリウムで「黒色」が表現出来ない事に気がついて非常に落ち着かなくなっちゃうくらいです。

Rキーで再び照明開始。
ゲーム機なのに、思いつきでパパッとプログラムを作って動かして遊べるのって、ヴィータの良さの一つですねー。

ちなみにプログラムは非常に短いので全文掲載させて頂けます。こんな感じです。

using System;
using System.Collections.Generic;
using Sce.Pss.Core;
using Sce.Pss.Core.Environment;
using Sce.Pss.Core.Graphics;
using Sce.Pss.Core.Input;
using Sce.Pss.HighLevel.UI;

namespace mmmVitaIllumination
{

 
 
 public class AppMain
 {
  public enum COLOR_MODE : int
  {
   White = 1,
   Black
  }
  
  private static GraphicsContext graphics;
  private static COLOR_MODE eCM;
  private static bool bEND;
  
  public static void Main (string[] args)
  {
   Initialize ();
   
   //@@@@@@@@@@[LOOP-START]@@@@@@@@@@
   while (!bEND) {
    SystemEvents.CheckEvents ();
    Update ();
    Render ();
   }
   //@@@@@@@@@@[LOOP-END  ]@@@@@@@@@@
  }

  public static void Initialize ()
  {

            graphics = new GraphicsContext ();
            UISystem.Initialize(graphics);
   
   Scene oSC = new Sce.Pss.HighLevel.UI.Scene();
   
   Label oLBL = new Label();
   
   oLBL.X = 10;
   oLBL.Y = 10;
   oLBL.Width = 960;
   oLBL.Text = "PlayStation VITA -有機EL照明-";
   oSC.RootWidget.AddChildLast(oLBL);
   UISystem.SetScene(oSC,null);
   
   bEND = false;
  }

  public static void Update ()
  {
   // Query gamepad for current state
   var gamePadData = GamePad.GetData (0);
   
   if((gamePadData.ButtonsDown & GamePadButtons.R) !=0)
   {
   
    eCM = COLOR_MODE.White;
   }
   else if((gamePadData.ButtonsDown & GamePadButtons.L) !=0)
   {
    eCM = COLOR_MODE.Black;
   }
   else if((gamePadData.ButtonsDown & GamePadButtons.Start) !=0)
   {
    bEND = true;
   }

  }

  public static void Render ()
  {
   if(eCM.Equals(COLOR_MODE.White))
   {
             graphics.SetClearColor (1.0f,1.0f, 1.0f, 1.0f);
   }
   else if(eCM.Equals(COLOR_MODE.Black))
   {
    graphics.SetClearColor (0.0f, 0.0f, 0.0f, 0.0f);
   }
            graphics.Clear ();

            UISystem.Render ();

            graphics.SwapBuffers ();
  }
 }
}


ヴィータは、UISystemによる画面(シーン)と、それを使わない画面を重ね合わせる事が出来るので、ビジネスアプリでも思わぬ面白いゲーム的なものを作ったり出来そうですね。