yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2018/07 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
被害者はマスコミを告訴することに決めた
2007/10/19(Fri)21:46:14
 「市町村窓口は信用ならない」と言い放ち、それに対して抗議を受けるところまではまだ常識的なやり取りではあるものの、あろうことか「小人のざれ言に付き合う暇があったら、私はもっと大事なことをやらなくてはいけない」という言語堪能どころか日本語すら理解できていない一言を放った舛添氏。突っ込まれると、今度は「市長は頭が悪い、バカ市長と言うよりマシ」と、これまた言語能力の低さを裏付けるような一言。しかし、このほどようやく不適切であることを認めたようです。
 対戦相手に向かって「ゴキブリ」などの暴言を吐き、「切腹」を宣言して散々ののしった亀田氏。無論、負けても切腹することはありませんでしたが、異例とされる厳重な処分を受けて、ようやく本人が対戦相手となった内藤選手に謝罪しました。
 これらの共通項は1つ。実力の伴わない人間をマスコミがやたら騒ぎ立てたことです。彼らは本来そのような器の人間ではないにもかかわらず、マスコミの取り上げ方次第で世論の反応は嫌というほど変わってしまいます。舛添氏に関しては、無賃残業合法化法案を「家庭だんらん法案」などという白々しい名称に変更して提出するよう指示したということがほとんど報じられていませんし、ボクシング界では「マスコミ受け」が良い亀田家の言動は黙認され、明らかに特別待遇を受けていたようです。
 しかし、こうしたマスコミにだまされないようにすることは可能です。例えば亀田家、私はボクシングをほとんど知りませんが、試合前に関連記事を見た時にはあきれ果てたものです。注目されていた舛添氏に関しても、「家庭だんらん法案」の時点で完全に見限りました。その後に「小人のざれ言」発言が飛び出すなど、本性は隠せないものです。
 マスコミが持ち上げる一方、私が極めて強い不快感を抱き、結局没落した人間は他にも存在します。ブログで取り上げた例で言えば、安倍氏、堀江氏、村上氏などがそれに当たります。これは別に「私には先見の明がある」ということではなく、明らかに主張が支離滅裂であったり、自分のことしか考えていなかったりと、没落することが明らか、あるいは没落しなければ国民が困るような事例に関して、不快感を抱いたり、没落を予想しているに過ぎません。
 堀江氏、村上氏は言うに及びませんし、安倍氏に関しては総裁選の段階で「氏では拉致解決が困難」であることをブログ中で予想しています。氏は「憲法改正」や「教育改革」など理念は持っていたようですが、国民を無視して良いか悪いかも分からない理念をごり押しするなど、国民に対する愛情や配慮が全く感じられず、単なる自己満足に陥っていました。このブログ中にも少々言いすぎともいえる表現はありましたが、こうしたことからあえてそのままで記載しています。そして実際、(「教育バウチャー」など国民にとって利になるとも限らない)理念ばかり先行し、そのためには国民も拉致もそっちのけにし、結果的に「国民への愛情がない首相に拉致問題解決は不可能」との主張が的中してしまいました。
 さらに、「没落後の醜態」もマスコミの特徴です。堀江氏、村上氏、安倍氏、亀田家などを最大限持ち上げておいて、没落したらよってたかって集団リンチを振るう様はみっともない限りです。没落後に相手を非難できるのは、没落以前から相手を批判していたマスコミのみ、百歩譲っても中立のマスコミのみであり、これまで散々持ち上げていたマスコミが最初にすべきは自己批判です。
 舛添氏はまだ没落の手前の段階で、現在マスコミが持ち上げているところですが、福田氏が十分に注意をしない限り、没落も時間の問題でしょうか。また、没落するかしないかはともかくとして、まさに世論扇動タイプである麻生氏には注意が必要です。
 このような報道姿勢は何とかすべきと言いたいところですが、マスコミが絶対にまともな自主規制や自己批判を行わないことは知れていますので、受け手が気をつけるしかありません。

 放火事件の調書が漏えいし、「僕はパパを殺すことに決めた」という本に丸写しされた事件で、情報を漏えいした医師が逮捕されました。いくつかのマスコミは「逮捕は不要」「知る権利を侵害する」などと騒ぎ立て、中には「著者は取り調べて取材源を話さなかったが、本には調書が丸写しされており、結果的に取材源を秘匿できなかったのは問題である」という意見もありました。
 毎度のことながら、このマスコミの姿勢にはあきれ果てます。犯罪行為を行った人間が逮捕されるのは当然であり、もし「被疑者が接触した相手はマスコミ・言論関係者だから」と逮捕しないようなことがあれば、それは身内の犯罪行為を見逃すのと全く同等の行為です。不祥事警官や横領社会保険庁職員はかばうなと言っておきながら、マスコミにかかわる人間を逮捕するなと言うのは、完全に論理が破綻しています。
 中には「逮捕は見せしめ」なる意見も見られましたが、それが真実であるかはともかく、犯罪を捜査して逮捕するのが警察の役目です。それをしない警察は単なる職務放棄であり、今回の逮捕は何の違法性も不適切さもない正当なものです。被疑者は自ら漏えいを認めており、調書からは本の著者の指紋も見つかったといいますから、冤罪の恐れもまずないでしょう。
 この正当な逮捕に対して、マスコミは「報道が萎縮する」などと訳の分からないことを主張していますが、取材だからといって違法行為が許されるわけではありません。状況や証拠次第では本の著者の逮捕も考えられます。ちなみに朝日新聞は07/10/16分社説で次のように述べています。

 取材源を守れなかったという落ち度があるとはいえ、このまま医師が起訴されていいわけがない。取材協力者もメディアも萎縮し、報道の自由、ひいては国民の知る権利が脅かされることになりかねないからだ。さらに筆者が「身分なき共犯」で立件されるようなことになれば、その心配はいっそう大きくなる。

 重要な点として、刑法には次のように記されています。

(秘密漏示)
第百三十四条
 医師、薬剤師、医薬品販売業者、助産師、弁護士、弁護人、公証人又はこれらの職にあった者が、正当な理由がないのに、その業務上取り扱ったことについて知り得た人の秘密を漏らしたときは、六月以下の懲役又は十万円以下の罰金に処する。 2 宗教、祈祷若しくは祭祀の職にある者又はこれらの職にあった者が、正当な理由がないのに、その業務上取り扱ったことについて知り得た人の秘密を漏らしたときも、前項と同様とする。

(親告罪)
第百三十五条
 この章の罪は、告訴がなければ公訴を提起することができない。

 今回の調書漏えい事件は被害者が告訴したものであり、また親告罪であるため被害者の告訴なしに公訴の提起はできません。捜査機関が勝手に捜査して逮捕したのではありません。つまり、被害者が実際に存在し、被害を訴えて告訴したにもかかわらず、マスコミは「逮捕してはいけない」と意味不明なことを称しているのです。
 これはもはや、信号無視で交通事故を起こしたドライバーが「信号無視だからと逮捕するのは運転者を萎縮させる」「責任追及や被害回復は民事裁判でやればいい」と言っているようなものであり、全く筋が通りません。自分が漏えいの被害者であるなら、このようなマスコミの身勝手な言い分には怒りすら覚えるに違いありません。
 ちなみに「身分なき共犯」といいますのは、

(身分犯の共犯)
第六十五条
 犯人の身分によって構成すべき犯罪行為に加功したときは、身分のない者であっても、共犯とする。
2 身分によって特に刑の軽重があるときは、身分のない者には通常の刑を科する。

 これのことでしょう。
 意味を簡単に説明すれば、例えば「公務員職権濫用」罪、これは「公務員が」職権を利用して人に義務のないことを行わせ、あるいは権利の行使を妨害した際に適用されるものなのですが、仮に公務員でない何者かが共犯であったら、「公務員でなくとも」罪に問われます。
 2項は、例えば「特別公務員暴行陵虐」罪、名古屋刑務所事件でも適用された系統の罪ですが、仮にこうした暴行に一般人がかかわっていたら、公務員はこの罪に、一般人は暴行や傷害といった罪に問われるものと考えて良いでしょう。
 今回の事件でいえば、「医師、薬剤師、医薬品販売業者、助産師、弁護士、弁護人、公証人又はこれらの職にあった者」が本の著者に情報を漏えいして逮捕されたのですが、この著者も共犯であるとみなされれば、先の「身分犯の共犯」の規定によって著者をも逮捕することができます。情報漏えいという犯罪行為を行った人間が逮捕されるのは当然ですが、それをそそのかした人間の逮捕が検討されるのもまた当然です。
 「知る権利」の権利者である国民の立場からしても、マスコミに「知る権利」なる言葉を乱発されるのは極めて迷惑です。「知る権利」はマスコミではなく国民の権利にもかかわらず、なぜマスコミが勝手に「知る権利」を口にするのでしょうか。国民がその情報を知りたいと望んでいるか、また知ることが適切かどうかにかかわらず「知る権利」を乱発されても困ります。「知る権利」は国民が持つ権利であり、国民が主張するものではありますが、マスコミが勝手に主張できるものではありません。国民不在で「知る権利」なる言葉を乱発されても、白々しいだけです。
 さらに、マスコミの重視する「取材源の秘匿」も大半の場合は偽善か自己満足です。無論、時として取材源の秘匿が重要な場合はあります。例えば、とある公務員が犯罪行為を告発し、そのおかげで不正な組織犯罪が明るみに出たとして、国や組織が告発者を血眼で捜しているような場合は、取材源は秘匿されるべきです。
 しかし、今回の場合を含む多くの場合の「秘匿」は公益性もなければ意味もないものであり、単なる報道関係者の偽善か自己満足、あるいは「取材に応じてくれる人がいなくなるから」という損得勘定でしかありません。ことによっては、結果として犯罪の片棒を担がされる場合すらあります。しかも、取材源の分からない記事はいわば匿名記事であり、マスコミ自身が批判する「インターネットの匿名掲示板の書き込み」と同じ次元です。「記者が裏付け取材をすれば良い」との意見もあるでしょうが、記者がねつ造を行うような状態では、それも期待できません。
 警察はこのような声に惑わされず、犯罪はしっかり取り締まるべきです。ただでさえ「身内に甘い」と批判されたり、不祥事が起きて評判が落ちているのに、その上「身内とマスコミだけは逮捕しない」ということになっては存在意義がなくなります。
 しかし、なぜマスコミは「逮捕は当然」「取材とはいえ違法行為は許されない」と主張しないのでしょうか。「利益のためなら違法行為も許される」を標榜した派遣業者、利益のためなら詐欺も不正もいとわぬファンドや社長、詐欺師などと重なる部分があり、うすら寒さすら覚えます。

 先に参照カウント式GC機能つきスマートポインタを作成しましたが、あれには1つ欠点があります。vectorなどコレクションの要素として使用できないのです。必要な演算子は全部オーバーロードされているはずなのに、なぜか。それは、vectorなどが演算子に渡している型は「const T&」であるためです。C/C++では、通常の型をconstの参照やポインタに変換することはできますが、const型を通常の参照やポインタに変換することはできません。const型の変数を通常の型に代入する行為は、constされた変数は変更されず、新しい変数はコピーとして生成されるため、可能です。
 それではconstについて少々。C/C++言語はやたら深い言語ですから、constにも色々あります。最もポピュラーなのが変数を変更不可能にするconstで、Javaの変数に対するfinalとおおむね同じです。C++では配列の要素数に使うこともできます。
const int MAX = 10;
int array[MAX];
 また、参照やポインタにconstを定義することもできます。const型の値は変更されてはいけないため、const型のアドレスを格納するポインタや参照はconstでなければなりません。
const int a = 10;
int b = a;	// OK - コピーである
int *c = &a;	// NG
int &d = a;	// NG
const int *e = &a;	// OK - ポインタも const
const int &f = a;	// OK - 参照も const
 ポインタがconst宣言されている場合、ポインタが示すデータを変更することはできません。しかし、ポインタ自体は変更できます。
int a = 10;
int b = 10;

const int *p = &a;
*p = 10;	// NG - const であるため変更できない
p = &b;	// OK - ポインタ自体への書き込みである
 ポインタの中身ではなくポインタ自体の変更を封じるのであれば、int* constなどとして宣言します。
int a = 10;
int b = 10;

int* const p = &a;
*p = 10;	// OK - ポインタが指し示すデータは変更可能
p = &b;	// NG - ポインタ自体に書き込もうとした
 この両方を行うこともできます。このポインタはもはやいかなる変更も受け付けません。
int a = 10;
int b = 10;

const int* const p = &a;
*p = 10;	// NG - ポインタが指し示すデータは変更できない
p = &b;	// NG - ポインタ自体も変更できない
 クラスに定義されたメンバ関数はconst宣言することができます。関数をconstで宣言すると、thisポインタがconst宣言されたような状態になり、その関数から自分自身のデータを変更することができなくなります。関数の実装をクラス外部に書く場合には、クラス内の関数プロトタイプと関数の実体の両方にconst宣言が必要です。
class Const{
	int member;
public:
	void a() const;
	void b() const;
};

void Const::a() const{
}
void Const::b() const{
	member = 1;	// NG - const 関数内ではメンバを変更できない
}
 const関数内ではメンバに書き込むことはできませんが、読み取ることは可能であるため、getter関数には大抵constをつけることができます。
 もう1つ重要な点として、constはintなどの基本型に限らず、オブジェクトやそのポインタに対してもつけることができるのですが、
class Const{
public:
	void YesConst() const{
	}
	void NoConst(){
	}
};

void main(){
	const Const c;
	const Const* p = &c;
}
 const宣言されたオブジェクトやポインタからはconst宣言された関数以外の関数を呼ぶことはできません。同様に、const宣言された関数内から自分自身のconst宣言されていない関数を呼び出すことはできません。
// const 宣言されたオブジェクトの例
class Const{
public:
	void YesConst() const{
	}
	void NoConst(){
	}
};

void main(){
	const Const c;
	c.YesConst();
	c.NoConst();	// NG - const 宣言されていない関数
}

// const 宣言された関数から他の関数を呼び出す例
class Const{
public:
	void CallNoConst() const{
		NoConst();	// NG - const 宣言されていない関数
	}
	void NoConst(){
	}
};
 これを踏まえて、参照カウント式GCスマートポインタの修正版は以下のようになります。
class Counter{
	int count;
public:
	Counter();
	void operator ++(int);
	bool operator --(int);
	bool IsAlive();
};
Counter::Counter(){
	count = 1;
}
void Counter::operator ++(int i){
	count ++;
}
bool Counter::operator --(int i){
	count --;
	return IsAlive();
};
bool Counter::IsAlive(){
	return count > 0;
};

template<class T> class Reference{
	T *value;
	Counter *counter;

public:
	Reference(T *v){
		value = v;
		counter = new Counter();
	}
	template<class V> Reference(const Reference<V> *p){
		value = p->GetValue();
		counter = p->GetCounter();
		(*counter) ++;
	}
	~Reference(){
		if(!((*counter) --)){
			delete counter;
			delete value;
		}
	}

	// 本来は 自身と Pointer に対して friend し、private にすべき関数
	T* GetValue() const{
		return value;
	}
	Counter* GetCounter() const{
		return counter;
	}
};

template<class T , class R = Reference<T> > class Pointer{
	R *ref;
public:
	Pointer(){
		ref = NULL;
	}
	Pointer(T *p){
		ref = new Reference<T>(p);
	}
	template<class V> Pointer(const Pointer<V> &p){
		ref = new Reference<T>(p.GetReference());
	}
	template<> Pointer(const Pointer<T> &p){
		ref = new Reference<T>(p.GetReference());
	}
	~Pointer(){
		ReferenceRelease(ref);
	}
	Pointer& operator =(T *p){
		// すでに ref にデータが存在するなら削除
		ReferenceRelease(ref);

		// 新しい Reference を確保
		ref = new Reference<T>(p);

		return *this;
	}
	template<class V> Pointer& operator =(const Pointer<V> &p){
		return Equal(p);
	}
	template<> Pointer& operator =(const Pointer<T> &p){
		return Equal(p);
	}
	template<class V> Pointer& Equal(const Pointer<V> &p){
		// 右辺値として自分自身が渡されている(p = p など)
		// かもしれないので、削除は登録後に行う
		// 削除用のポインタを取得
		Reference<T> *r = ref;

		// 受け取った Pointer の Reference を登録
		ref = new Reference<T>(p.GetReference());

		// すでに ref にデータが存在するなら削除
		ReferenceRelease(r);

		return *this;
	}
	T& operator *(){
		return *(ref->GetValue());
	}
	T* operator ->(){
		return ref->GetValue();
	}
	template<class V> bool operator ==(Pointer<V> &p){
		return ref->GetValue() == p.GetReference()->GetValue();
	}
	template<class V> bool operator !=(Pointer<V> &p){
		return ref->GetValue() != p.GetReference()->GetValue();
	}

	// 本来は自身に対して friend し、private にすべき関数
	R* GetReference() const{
		return ref;
	}
private:
	void ReferenceRelease(Reference<T> *p){
		if(p != NULL){
			delete p;
		}
	}
};
 修正点は「演算子オーバーロード関数の引数に対するconst宣言」及び「その関数内から呼び出している関数に対するconst宣言」です。
 コレクションにはこのように渡します。
class View{
public:
	virtual void view() = 0;
};
class CoutView : public View{
public:
	void view(){
		std::cout << "cout" << std::endl;
	}
};
class PrintfView : public View{
public:
	void view(){
		printf("printf\n");
	}
};
class PutsView : public View{
public:
	void view(){
		puts("puts\n");
	}
};
class DummyView : public View{
public:
	void view(){
	}
};

Pointer<View> GetView(char *type){
	Pointer<View> p = new DummyView();
	if(strcmp(type , "cout") == 0)
		p = new CoutView();
	else if(strcmp(type , "printf") == 0)
		p = new PrintfView();
	else if(strcmp(type , "puts") == 0)
		p = new PutsView();

	return p;
}

void main(){
	std::list<Pointer<View> > v;
	v.push_back(GetView("cout"));
	v.push_back(GetView("printf"));
	v.push_back(GetView("puts"));
	v.push_back(GetView("undef"));

	for(std::list<Pointer<View> 
		>::iterator i = v.begin(); i != v.end(); i++)
		(*i)->view();
}
 ちなみに、listであれば割と効率的に処理されるのですが、vectorでは再割り当てや位置の移動が発生するたびにコピーコンストラクタを呼び出すため、やや効率が悪いです。
 C/C++のconstに相当するものとして、Javaにはfinalがあります。ところが、プリミティブ型が定数となるのは分かるとして、Javaのオブジェクトはすべて参照(というよりポインタ)であり、JavaのfinalはC++でいうところのType* constです。したがって、他のインスタンスを代入することはできませんが、インスタンス(ポインタが示すデータ)は変更できてしまいます。
 しかし、メソッドやクラスの継承を封印するのがfinalなのは分かるとして、なぜ変数の変更を阻止する宣言までがfinalなのでしょうか。Javaでは宣言後の初期化も(1度だけ)できるのですが、性質はほとんどconstです。
final Object o;
o = new Object();
 それなら、継承封印の宣言をfinalにして、変数変更の遮断をconstにした方が分かりやすかったのでは、と前々から考えているのですが。ちなみにJavaではconstは(使われていませんが)予約語です。PHPでは定数がconst、継承封印がfinalです。

 色々とリファクタリングしていたDualKnight。これだけ作れば、とりあえず簡単なゲーム程度なら作れるでしょうか。相変わらず重いのですが。


 怪しげな目玉。おそらく次のようなストーリーです。
「このにっくき目玉め、私の魔法で成敗してやるわ!」
「あの、イリアスさん、失礼ですが、この目玉と何か因縁でもおありなのですか?」
「いや、別にないけど・・・気味悪いし・・・」
「イリアスさん、人間は情報の9割を目に頼っているのですよ」
「サーラ、本当に大切なものは目には見えないのよ」
「・・・といいますと、どのようなものでしょう」
「例えばそこの角を見てよ。人か何か見えるかしら?」
「今のところ、見当たらないようですが・・・」
「じゃあサーラ、もし車でそこの角に差し掛かって、子どもが飛び出してきたらどうするのよ」
「飛び出しや出会い頭の衝突に備え、曲がり角付近など見通しの悪い場所は徐行場所ですよ」
「だから、大切なものは目には見えないのよ」
「そういう問題ですか・・・?」


「いくらグローシェーディングされていようと、気味悪いものは気味悪いのよ!」
 きっとこのようなむちゃくちゃな理由による攻撃なのでしょう。TidalWaveImpl。


「ではイリアスさん、フォンシェーディングならよろしいのですか?」
「どれでも同じよ」
 コンフラグレイション。この目玉は192個の三角形で構成されています。割と丸く見えるのはシェーディング処理のおかげです。


「これで素粒子レベルまで消し飛べばいいわ!・・・ところでサーラ」
「何でしょうか」
「ソリュウシって何?」
 ブラックホール。「照明を吸い取る照明」が使えるのが3Dの面白いところです。


「しかしイリアスさん、いくら目玉だからといって、無条件で攻撃するのはよくありません」
「サーラ、あの目玉、大量破壊兵器を隠し持ってるのよ!」
「大量破壊兵器・・・ですか?」
「しかも45分以内に使用可能だそうよ」
「・・・左様でございますか」
 3D波動諷詠剣。このようなシンプルなエフェクトは作りやすそうで作りづらいのです。


「サーラ、実は私、もっと強力な魔法を使おうとしたのよ」
「はい」
「その魔法はスーパーセルを重ねた強力な魔法なんだけど、デザインパターンでいうところの集約の手法を使ってるのね」
「はい」
「で、そのクラスの集約オブジェクトにスーパーセルの実装のインスタンスを渡そうとしたら、うっかりスーパーセルの参照実装を発動してしまったのよ。どうすればいいかしら」
「・・・・・・」
「集約オブジェクトはコレクションになってて、本当なら1度の操作を行うだけで、登録されたスーパーセルを全部まとめて起動するはずなんだけど・・・」
「イリアスさん、どういう操作ミスですか・・・」
「オブジェクト指向って意外とデリゲートなのよねぇ・・・」
 SupercellImpl。カトリーナなどの例を見ての通り、スーパーセル1つで都市が壊滅します。物騒な魔法もあったものです。

 リファクタリングによる修正の成果として、頂点演算のみでテクスチャに照明を適用できるようになりましたので、ついでに適当なテクスチャを置いてみます。


 コンフラグレイションのエフェクトに包まれる目玉とサーラ・テクスチャ(画像は奈月さん作)。見たところ目玉とテクスチャの高さは同等程度ですが、サーラの設定身長は2メートルを超えているはず。この目玉、2メートルもあるのでしょうか


 しかし、いくらなんでもサーラまで大業火に巻き込まなくても、と言いたいところですが、実はこのサーラ・テクスチャ、ハリボテです。それらしく見せるには、少なくとも前後左右4方向、可能なら8方向以上、この画像のように上空から見る可能性があるなら上部や上斜めからの画像も用意し、視点からのベクトルで画像を切り替えるようにしなければ。

 今回は何の罪もない目玉がエフェクトの実験台になっていますが、うらまれて夢に出てきたらどうしましょう。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -