ラベル プログラミング の投稿を表示しています。 すべての投稿を表示
ラベル プログラミング の投稿を表示しています。 すべての投稿を表示

2009/03/02

HLSLってなんだ!

ども。お久しぶりです。

近況を話します。
現在、学校が春休みに入り、のんびり休日ライフを満喫中です。

ということで、コーディングしてます。
はい。休日でもコーディングしてます。
最近。XNAでゲームを作っていまして、まあ、3Dとか無理なんで、2Dなんですけど。
そこで、GPU側のプログラムができるということにたどり着いて。
Programmable Shaderとかがあるらしいです。
現在、それを記述する言語である、HLSL(High Level Shader Language)をチョコチョコと勉強中です。

さて、このHLSLなんですが。

正直言ってよくわからない。

です。

昔は、アセンブリで書かなくてはならなかったので、それに比べればましなんでしょうが。
3Dの基礎がないですからね。その辺はさっぱりです。UV座標とか、フォグとか、法線ベクトルとか、よくわかりません。

それでも、ピクセルシェーダーぐらいは何とかわかりそうな気がするので、それをいじっています。
どうやら、あるピクセルを描画される情報を与えられ、入力された情報からそのピクセルの色を決める。
みたいなことをするのが、ピクセルシェーダーみたいです。

まあ、これ打っている間にいろいろ調べるんだがな、だんだんわからなくなっていくんだ。

さあ、気を取り直して。とりあえず、指定した色を透過させるプログラムを書いてみたよ。


uniform extern texture ScreenTexture;

sampler ScreenS = sampler_state
{
Texture = <ScreenTexture>;
};

float3 mask;

float4 PixelShaderFunction(float2 texCoord : TEXCOORD) : COLOR
{
float4 color = tex2D(ScreenS, texCoord);
if(any(color.rgb - mask)) return color;
else return float4(1.0, 0, 0, 0);
}

technique
{
pass p0
{
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}


解説とか、勘弁してくれよ。



any(x)は、xのいずれかの要素が、0以外なら真が返ってくる関数らしい。

もちろんmaskには、指定された色が入っている。



よくわからないけど、うん。勉強するよ。

・・・本でも買ってこようか・・・。

2009/02/14

カウンター製作日記 #2


サーバーの都合で設置できていないが。
ということで、ここですこし中身をさらしてみる。

全体の流れとして、こんな感じになっている。
データベースから、値を読み込む。

今日、一度目の訪問かチェック。一度目なら、カウントアップ

XMLで出力。

そして、登録制にしていて、いくつかのカウンタを作ることができる仕様。
ところどころに出てくるIDは、ユーザーID的なもの。

まずは最後のXML出力で、XMLSerializer使ったあたり。XML出力は、betaだけどこれが一番楽。

$options = array(
'indent' => "\t", //インデントに使う文字
'encoding' => 'utf-8', //エンコーディング
'rootName' => 'counter', //ルートの要素名
'rootAttributes' => array( //ルートの属性
'id' => $this->id
),
'addDecl' => true, //<?xml version="1.0"?>タグを付けるか
'returnResult' => true //serializeメソッド実行時にXMLを返すか
);
//str_pad(文字列, 文字数, 文字, オプション);
//指定された文字数になるまで、文字列に文字を追加する。
//STR_PAD_LEFTは、左側を文字で埋める、という意味。
$output = array(
'count' => str_pad($this->count, $this->digit, '0', STR_PAD_LEFT),
'today' => str_pad($this->today, $this->digit, '0', STR_PAD_LEFT),
'yesterday' => str_pad($this->yesterday, $this->digit, '0', STR_PAD_LEFT)
);
$serializer = new XML_Serializer($options); //オプションを指定して、XML_Serializeを作成
return $serializer->serialize($output); //配列をXMLで出力



こんな感じに実装している。

$this->countと$this->todayと$this->yesterdayは、名前のとおりのカウント数が入っている。


はずであったが、todayとyesterdayはまだ未実装。



$this->idは、受け取ったIDを出力しているだけ。



つぎに、「今日一度目の訪問」あたり、PEAR/Dataで翌日0時のUNIX時を取得する。




$d = new Date();
$d->hour = 0;
$d->minute = 0;
$d->second = 0;
$d->partsecond = 0.0;
return $d->getNextDay()->getTime();



うん。そのままだね。

時間、分、秒、を0にして、翌日を取得している。



最後に、カウントアップSQL。




UPDATE counter SET count = count + 1 WHERE MD5(id) = ?



MySQL前提で考えているのだが、こんな感じ。

SQLでカウントアップもしてしまおうという魂胆。


オーバーフローとか考えるのが面度かった。



 



最近、ねたはあるのだが、書く時間と気力がない・・・。

2009/01/31

カウンター製作日記 #1

今回は、このブログにカウンターをつけよう、ということらしい。
検索中・・・「よさげなカウンター」・・・・・・・・・・・検索結果:当該件数0件
と、いうことで、カウンターを作ってみることにした。

まず、どんなカウンターを作るのか?
現在考えているものとしては、PHPでいろいろな処理して、Flexで表示をするというもの。

ただね、例のサーバーのPHPがしょぼいからいろいろ大変です・・・。

2008/12/21

PEAR 「HTTP_Request」

今日は、RssCollectionの進行報告と一緒に、使っているPEARライブラリの解説をしたりしたいと思います。

まずは、報告。

前回言った「XML_Serializer」はbeta版しかないことが発覚につき、別のを考えます。

そして、xmlファイルをダウンロードするところに、「HTTP_Request」を使いたいと思います。

HTTP_Request : http://pear.php.net/manual/ja/package.http.http-request.php

で、PEARライブラリの解説ですが、とりあえずこの「HTTP_Request」の簡単な使い方をやります。

今回使ったのは、他サイトからxmlファイルをとってくるというものです。

$url = 'http://white-output.blogspot.com/rss.xml';

$request =& new HTTP_Request($url);
if(!PEAR::isError($request)){
echo $request->getResponseBody();
}



これが、家のサイトのRSSを取得し、表示するプログラムです。



//接続先のURL
$url = 'http://white-output.blogspot.com/rss';

//オプションのパラメーター 値は初期値
$params = array(
//使用するmethod GETやPOSTのこと (string)
'method'=>'HTTP_REQUEST_METHOD_GET',
//HTTPのバージョン 1.1か1.0 (string)
'http'=>'HTTP_REQUEST_HTTP_VER_1_1',
//Basic認証のユーザー名 (string)
'user'=>null,
//Basic認証のパスワード (string)
'pass'=null,
//プロキシサーバーのホスト (string)
'proxy_host'=>null,
//プロキシサーバーへの接続ポート (integer)
'proxy_port'=>null,
//プロキシ認証のユーザー名 (string)
'proxy_user'=>null,
//プロキシ認証のパスワード (string)
'proxy_pass'=>null,
//タイムアウト時間(秒) (float)
'timeout'=>null,
//リダイレクトの許可 (bool)
'allowRedirects'=>false,
//リダイレクトの最大値 (integer)
'maxRedirects'=>3,
//配列の変数に[]を追加するか (bool)
'useBrackets'=>true,
//レスポンスオブジェクト内にボディを保存するか (bool)
'saveBody'=>true,
//Socketの読み込みタイムアウト時間 (array(seconds, milliseconds))
'readTimeout'=>null,
//Net_Socketのオプション (array)
'socketOptions'=>null
);

$request =& new HTTP_Request($url, $params);


と、いろいろ設定があるみたいです。ドキュメントはあるんだけど仕様がなかった。ソース見たら分かったけど。




$request =& new HTTP_Request($url, $param);
//cockieの名前
$name = 'name';
//cockieの値
$value = 'value';
//cockieの追加
$request->addCockie($name, $value);
//レスポンスオブジェクト内にボディを保存するか
$saveBody = true;
if(!PEAR::isError($request->sendRequest($saveBody))){
//ステータスコードの取得
$request->getResponseCode();
//ステータスの取得
$request->getResponseReason();
//取得するヘッダーの名前 (nullだとヘッダーの連想配列を取得)
$headername = null;
//ヘッダーの取得
$request->getResponseHeader($headername);
//ボディの取得
$request->getResponseBody();
//Cockieの取得 (連想配列)
$request->getResponseCockie();
}


こんな感じで使ってください。



PEARの日本語ドキュメントはかけている部分があるので、ソース見なきゃいけないことがたびたびあるね。



でわでわ、今日はここで。

2008/12/18

進行報告 with RssCollection #2

ども。眠いです。しかし、やらなければ。

プロジェクト「RssCollection」の報告。

とりあえず現状の方針を書きたいと思います。

RSSの取得 : PEAR 「XML_Feed_Parser」を使用する。

RSSの書き出し : PEAR 「XML_Serializer」を使用する。

データベースアクセス : SQLite PDO を使用する。

こんな感じでしょうか。

そして、設定の保存とかの部分は大体書き終わりました。

設定はデータベースに保存しています。

今日はここらで。...やはり眠い。

2008/12/13

進行報告 with RssCollection

前回、使うといったライブラリ全部やめてPEARで組むことになるかもしれない。

現在検討中+用申請

2008/12/11

RssCollection

右下につけたプロジェクトリスト、今回から「RssCollection」を進めていきたいと思います。

ここでは、進度報告とプログラムの話を少ししようかと。

 

RssCollectionについて。

これは、複数のサイトのRSSの情報をまとめて、ひとつのRSSにしようという試みです。

使用言語:PHP データベース:SQLite

RSSは規格がいろいろあって面倒なので、その辺はライブラリを使うことにした。

使用ライブラリ

 

まずは、設定をデータベースに保存したりするとこから作ったよ。

CREATE TABLE rss_settings(
item varchar(20) not null primary key,
value text
);


こんな感じのテーブルを使う。



 



今日はここまで。



設定のところが打ち終わったらまた報告します。

2008/09/06

アドインの話

MSDN Library に System.AddIn名前空間たるものがあります。アプリケーションを拡張できるようにするものです。

これを使って、UIを返すアドインを WindowsForm で実装しようとしていたんですが、できません。どうやら、アプリケーションドメイン間でコントロールがうまく動いてくれないようです。

System.Windows.Forms.Control は MarshalByRefObject を継承してるくせにできません。ControlCollection.Add()とかで追加しようとすると、internal なメソッドにアクセスしたとか言うエラーが出ます。

ためしに、Control.Handleプロパティから取得したハンドルを渡して、Control.FromChildHandle()とかいうので取得しようとしてもだめです。null帰ってきます。アプリケーションドメインが違うとメモリ空間も違うってことでしょうか?

誰か解決法があったら教えてください。よろしくお願いします。

2008/07/10

Ruby on Rails

最近、Ruby on RailsをやることになったのでRubyをやり始めました。

とりあえず、Hello World!

ソース
p "Hello World!"

実行結果
"Hello World"

簡単です。

まだまだはじめたばかりですが、これからRuby on Railsの事も書いていこうと思います。

2008/06/21

Flex3をやってみる。

Flexたるものがあるとうわさを聞いて、調べてみた。

http://www.adobe.com/jp/products/flex/

Flexとは、どうやらFlashを作るための言語らしい。
Flashといっても、ムービーではなく、Webアプリケーションの開発を前提としたものらしい。
Flex自体はオープンソースらしい。

ということで、とりあえずSDKをさがすことに。
どうやら、日本語のサイトにはSDK単体はないらしい。
しかたなく、FlexBuilder体験版(Flex SDK入り)をダウンロード。そして、インストール。
とりあえず、ドキュメントのサンプルをコピーして、実行。



てなかんじで、Hello World!が表示されました。
うん。なんか、さすがAdobeって感じですね。見た目がいいです。

FlexBuilderをインストールしたくないって人は、
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3
からSDKを、
http://www.adobe.com/support/documentation/jp/flex/
から日本語ドキュメントをとってくるとよいです。

FlexBuilder自体はとても使いやすいです。体験版が終わるまでは、使わせてもらおうかと思います。