• 追加された行はこの色です。
  • 削除された行はこの色です。
#author("2016-08-12T12:53:22+00:00","","")
#author("2020-01-13T02:26:03+00:00","","")
**「^」 [#lafdceaa]
#areaedit
MS拡張の C++ /CLIでポインタを表す間接演算子。「*」と同じ。
C++標準ではなく、C++CLIというMicrosoft拡張のポインタ。これで確保したメモリアドレスはガベージコレクションの対象となるらしい。つまりメモリアドレスが変わっても自動的にポインタの中身が変わる?ということ。

 <templa^>^
「^」がシンプルすぎてググれない。CLIというワードを重ねると色々検索結果が出てくる。
なんというかソースコード的にわからなさをせせら笑われているようにしか見えない。

#areaedit(end)

**デバイスコンテキスト [#l5c29d99]
#areaedit
Windowsの下で動く実際のハードウェアへアクセスするための情報がはいったデータ。特定のデバイスを意識することなく、このデータを通じて制御するための仕組み。EpsonとCannonのプリンターを操作するのに共通の命令書を発行することで操作できるとすると、命令書の書き方だけを知っていれば、どちらのプリンターの知識も必要とせず操作可能になる。その命令書にあたるのがデバイスコンテキスト。

#areaedit(end)

**mt / md [#r8c6b023]
#areaedit
コンパイルオプションのMT/MDは、マルチスレッド対応のライブラリを使うかどうか?のオプションのMと、DLLを使うオプションのD/Tを組み合わせて使う。つまりこうなる。
|オプション|マルチスレッド|DLL|
|MD|○|○|
|MT|○|×|

LDはDLLそのものを作成することを表す
#areaedit(end)

**ASCII文字 [#t8e75463]
#areaedit
めったに使わなくなったけど、いざ使うとなるとテキストで探すのが面倒なのではっとく
  !"#$%&'()*+,-./
 0123456789:;<=>?
 @ABCDEFGHIJKLMNO
 PQRSTUVWXYZ[\]^_
 `abcdefghijklmno
 pqrstuvwxyz{|}~
#areaedit(end)

**サービス / デーモン [#u30abff1]
#areaedit
裏側で動作しているアプリケーションの働きを表す。表立って使われるアプリといえばエクセルとかワードのようにデスクトップ上で操作するソフト。裏側というのは目に見えない形でユーザーの操作や振る舞いを監視していたり機能を提供しているソフト。どちらかといえば「運行」という意味でのサービスに近い。有名な「メーラーデーモンさん」はメールの到着や送信などを管理していて、送信した結果、宛先がなかったときに「Mail Delivery Subsystem」という不在通知を送ってくるデーモン。デーモンとは神が関わりたくない雑事の担当らしく必ずしも悪というわけではないらしい。
#areaedit(end)

**スタティックとダイナミック [#p3838d95]
#areaedit
staticという言葉は何かとでてくるが日本語で言うと「静的」を表す。反対語が「ダイナミック(動的)」というとイメージしやすい。壁とか石とか動かないオブジェクトはstaticなオブジェクト。消えたりなくなったりしない変数はstatic変数。
static宣言されたglobal変数はソースコードや関数内に限定したスコープを持っており「制限された」という別の意味を持つ。global変数もstaticな存在だけど混同しがちなので注意。


#areaedit(end)

**バッファ [#n14dad84]
#areaedit
何かをためておくための風呂桶的なもの。メモリ領域そのものを指すことが多い。衝撃を緩和する緩衝材をバッファということから転じて工数の予備日をバッファということもある。3日でできるところを何らかのトラブルが発生することを見越して緩衝材としての2日をバッファとして計5日で計上する、みたいな言い方。
#areaedit(end)

**パフォーマンス・ヒット / オーバーヘッド [#w0bd34d4]
余計にかかる負荷、想定していた以上の負荷をいう。ほかと比べて処理負担の大きい仕事をするときにパフォーマンスヒットが発生するといった言い方をする。微妙なニュアンスの違いはあるが過去には「オーバーヘッド」という言い方もよくあった。これは動作させるときの負荷を指しており、16x16のスプライト同士の当たり判定を四角形同士で判定すれば1回ですむが、1ピクセル単位でのあたり範囲をとったりすると16x16=256回の判定が必要になり「オーバーヘッドが大きい」と言った言い方をする。


**ベイク [#m590d59f]
丁寧に言うと「ゲームで都合のいい形にデータを加工して用意しておいてください」といったところか。散らばっているデータをまとめて一つのデータに集約したり、先に計算しておいた結果をゲーム中で使うほうがリアルタイムで計算させるよりも効率がいい場合に素材を「ベイクしておく」といった感じで使う。

**イテレーション [#qbb48f6f]
アジャイルの製作工程で使われる言葉で、繰り返し行われる「工程の一連の流れ」そのものを指す。工程の中身はささない。つまり、パンをおいしく作るために「練る、発酵させる、食べる、評価する」というイテレーションを繰り返して、美味しいパンを作り上げる、みたいな感じ。

**レイヤー [#jbe8e8ff]
レイヤーとは1層目、2層目の「層」。グラフィックを背景、キャラ、UIと3層重ねて表示したりするときに、背景のレイヤー、UIのレイヤーといった言い方をする。プログラムにもレイヤーはあって、ハードウェアにアクセスするレイヤー、その上で動くゲーム層、「DirectXのレイヤーで処理しよう」みたいな感じでも使われる、この場合は「DirectX担当のプログラマにやらせよう」っていうのとほぼ同じ意味。

**ユニークID [#mc197215]
変数名やファイル名、SNSのID名などはユニークな名前が求められる。若い自分には分厚い本に書いてあるその制限に「僕のつけた名前が面白いかどうかどうやって判断できるねん」って理解に苦しんだ。でも本来の英語的には「ユニークな名前」とは、風変わりな、単独性のある~、といった意味で、ようは「他とかぶらない名前」にしなさい、ということ。僕が面白かったネットに書いてあったユニークな変数は1バイトの「char aznable;」

**アーキテクチャ [#l627930c]
#areaedit
コンピュータシステムの論理的構造のこと。難しい言葉だが「つくられかた」と思っていい。「アーキテクチャが異なる」とは「つくられかたが異なる」と読み替えられる。

 "管理や構築を複雑なツールに頼るシステムはエンドユーザにとって害になるだろう。
 「複雑なシステムを隠そうとすれば、その結局もっと複雑なシステムになってしまうのが落ちだ」。
 中身を隠すための抽象化レイヤーは決して良いものではない。その代わりに、隠さないで済むように中身を設計すべきなのだ。"
 
 アーロン・グリフィン
 アーロン・グリフィン(Arch Linux)

↑コレ好き、名言。


#areaedit(end)

***メモリ [#y3de054e]
#areaedit
メモリとは覚えた数を忘れないように、その数だけ電子の石を置いてメモっておけるシステム。メモる=覚えておく=忘れない=メモリー。1+3+6の計算をするとき、まず1+3の計算結果を忘れないように4個の石をキャンバスに置いておく。次にその4個の石の横に6個の石を置くことで、全部合わせて10個であることが見て取れる。メモリはそんな便利な「キャンバスと石」の仕組みを電気信号で再現したもの。紙と鉛筆なんかよりずっとずっと原始的。
#areaedit(end)


***8ビット [#xba0a498]
#areaedit
ビットというのはメモリの大きさを表す。たとえば8bitのメモリ空間というのは、8個の石をおけるキャンバスの大きさをあらわす。8個の石がおけるキャンバスって最大8までしか数えることができないように思うけど、工夫すれば256までの数字を表現することが出来る。たとえば3個しか石が置けない3bitのキャンバスを例に取ると下のように0~7の8種類のパターンを作ることができるので、3つの石があれば最大7まで記録することができる。同様の方法で石8個で256パターン、9個アレば512パターン、16個あれば65536パターン作ることができる。
たとえば8bitのメモリ空間というのは、8個の石をおけるキャンバス(=メモリ)の大きさをあらわす。8個おければ1バイト。8個の石がおけるキャンバスって最大8までしか数えることができないように思うけど、工夫すれば256までの数字を表現することが出来る。たとえば3個しか石が置けない3bitのキャンバスを例に取ると下のように0~7の8種類のパターンを作ることができるので、3つの石があれば最大7まで記録することができる。同様の方法で石8個で256パターン、9個アレば512パターン、16個あれば65536パターン作ることができる。

xxx ・・・0
xxo ・・・1
xox ・・・2
xoo ・・・3
oxx ・・・4
oxo ・・・5
oox ・・・6
ooo ・・・7

(xは何もなし、oは石、1ビット=1つの石と思えばいい)
(x = 何もなし / o = 石)
#areaedit(end)



***バイト [#b4567bb8]
#areaedit
1バイトというのは8bitのこと。12個のチョコで1ダースみたいにいうと8つのビットで1バイト。1バイトあれば256パターンを再現することができる。何しろ石が8個もあるからね。256パターンあれば表現できるものって何があるか?アルファベットは26個なので余裕。さらに大文字小文字に対応して、加えて記号をいれても256種類におさまりそう。

xxxxxxxo・・・1・・・A
xxxxxxoo・・・2・・・B
xxxxxoox・・・3・・・C

こんな感じで「数(8bitで表現した石のパターン)」と英文字を関連付ければ文が書けるかもしれない。8バイト(64ビット)あれば8文字の手紙が書けそう。そうやって作られたのがASCII文字(アスキー文字)で「半角文字」って言われている。全角文字は漢字も含んで256パターンに収まらないから1文字16bit(2バイト)で扱われていて、理論上65536種類の漢字まで対応できる。
こんな感じで、8bitで表現した石のパターンを「数」として扱い、その「数」を英文字と関連付ければ文が書けるかもしれない。8バイト(64ビット)あれば8文字の手紙が書けそう。その64個の石の並びをネットで送ればメールになるね。そうやって作られたのがASCII文字(アスキー文字)で「半角文字」って言われている。全角文字は漢字も含んで256パターンに収まらないから1文字16bit(2バイト)で扱われていて、理論上65536種類の漢字まで対応できる。
#areaedit(end)

**スクリプト / プログラム 違い [#d9938982]
#areaedit
明確な違いはないし、プログラムが書かれたファイルは「C言語スクリプト」という言い方もできる。「C言語でプログラムが書かれたスクリプト」である。コンパイルするからプログラム、インタープリターだからスクリプトという見方もあるようだ。
明確な違いはないし、C言語でプログラムが書かれたファイルは「C言語スクリプト」という言い方もできる。「C言語でプログラムが書かれたスクリプト」である。コンパイルするからプログラム、インタープリターだからスクリプトという見方もあるようだ。
#areaedit(end)


**プログラム / プログラマ 違い [#t312f47b]
#areaedit
これは違う、説明は不要だと思うが、運動会や発表会の1日の予定や順番、雨の場合の対処法が記されているのがプログラム。プログラマがCPUへの手順や例外の対処法を羅列してるのもプログラム。プログラムを書く人がプログラマ。運動会のプログラムを書く人は先生だな。
#areaedit(end)

**機械(マシン)語 / アセンブラ [#ma8b9d49]
#areaedit
C言語とアセンブラと機械語は全く違う。機械語は16進数で書かれた数字だけの暗号ファイルみたいなもので、コンピューターが理解することができる言葉。とはいえヒトも理解できる一定の法則によって成り立っている。なにしろ機械語はヒトが作った言葉だからね。CPUにより言語体系は異なる。たとえばインテル系のCPUの機械語とARM系CPUの機械語は英語とロシア語くらい違う。どちらも数字だけで構成されたいわゆる「バイナリ」なので同じように見えるが、それは日本語以外は全て外国語っていうくらい乱暴なわけかたになる。CPUの受け付ける命令の数や種類を文化とすると、数字の並び方の法則性は文化の違いにより全く異なる。
#areaedit(end)

***アッセンブル [#efe34013]
#areaedit
81-01-80-42みたいな全てが16進数の数字だと見た目にわからないから、数字の一部を''ADD 00 SUB 42''みたいに意味のある言葉に置き換えたものがアセンブラ言語(アセンブリ言語)。当然CPU文化に応じてアセンブリ言語の体型は大きく異る。下図のようにアセンブラはオペランド(OPE)と(DATA)の組み合わせでCPUに命令を与える、これをマシン語に変換する作業が「アッセンブル」という。

|アセンブラ(OPE)|(DATA)|マシン語|
|PUSH	|BP|	55|
|MOV	|BP,SP|	8B EC|
|SUB	|SP,4|83 EC 04|
|LEA	|AX,[BP-2]|	8D 46 FE|
|PUSH	|AX|	50|
|MOV	|AX,Z4|	B8 00 00|
|PUSH	|AX|	50|

このように命令とマシン語は1対1なので、できあがったマシン語のバイナリデータからアセンブリ言語に変換することも可能である。これを「逆アセンブル」する、といって出来上がった実行ファイルから元のプログラムを割り出すハッキング行為である。
#areaedit(end)

***C言語 [#g82faafb]
#areaedit
コンピューターにやらせたいことは同じなのにCPU毎に別のプログラムスクリプトを描くのはナンセンスである。異なるCPUやハードウェア間でも同じプログラム・スクリプトを使えるように言語体系やできることを統一(規格化)したのがC言語となる。

C言語はそれだけでなく、より人間の言葉に近い考え方や、記述方法でプログラムをかけるので複雑でもわかりやすいプログラムを書くことができる。そのC言語で書かれたプログラムを自動的にCPUに応じたアセンブリ言語やマシン語に翻訳してくれるのがCコンパイラ。人間語を機械語に翻訳してくれる「アプリ」である。
#areaedit(end)


**インタープリター / コンパイル [#o305fcaa]
#areaedit
人間が読めるC言語で書かれたプログラムスクリプトを機械が読める「機械語」に翻訳することを「コンパイル」するという。プログラムスクリプトの実行には、最初に全てのプログラムを翻訳してしまう「コンパイル方式」と、都度翻訳しながら実行する「インタープリター式」の2種がある。翻訳済み文書と、同時翻訳の違いのようなもの。前者は先に間違いをすべて直さないと実行できない。後者は間違いがあっても実行できるが、その間違いは、プログラムがその箇所を通るまできづけない。

C言語はコンパイラ言語、PHPはインタープリター形式の言語である。

一般的に事前に翻訳されたコンパイル方式のほうが、その場で同時通訳されるインタープリター方式よりも高速に動作する。
#areaedit(end)


***統合開発環境 [#t7a62679]
#areaedit
プログラムを組もうと思っても、プログラムを実行ファイルにするまでにはいろんなツールの力を借りる必要がある。例えばプログラムを書くメモ帳などのエディタや、コンパイラや、機械語に直されたファイルをくっつけてくれるリンカー、リンクされたプログラムを実行してデバッグするデバッガなどがそのツールの1つ。

それらのツールは本来別々のツールなので設定を各々してあげなくてはならないのだけど、それらを1つのソフトの中で全部設定してシームレスに使用できたらとても便利である。プログラムを書くエディタから直接コンパイルして、実行して、ターゲットマシンに転送しデバッグまでさせてくれる環境を1つにまとめて出来るようになっているの統合開発環境(IDE)である。WIN用のVisualStudioやmac用のXCodeはその代表で、最近だとAndroid-Studioというのも出てきた。で、これらの統合開発環境の状態を保存しておくことで、次回開発を再開するときに最後に開いていたプログラムや、ターゲットマシン、デバッガの設定などを起動後すぐに復元することができて便利。

最近ではUnityやUnrealEngineなどといったゲーム開発そのものと密接な機能をもつ統合開発環境は、IDEの発展版といえる。
#areaedit(end)

***プロジェクトファイル [#w075cf9c]
#areaedit
統合開発環境の保存ファイルは、windowsだと「*.sln」macだと「*.xcodeproj」という拡張子のファイルで、これがプロジェクトファイルだと思っていればいい。まあグラフィックで言うところ個々のレイヤー情報をまとめて持っているpSDファイルみたいなものだと思えばいい。
統合開発環境の保存ファイルは、windowsだと「*.vcproj」macだと「*.xcodeproj」という拡張子のファイルで、これがプロジェクトファイルだと思っていればいいかもしれない。まあグラフィックで言うところ個々のレイヤー情報をまとめて持っているPSDファイルみたいなもの。
#areaedit(end)

***ソリューション [#h8967bde]
#areaedit
製品に含まれる複数のプロジェクトを管理しているのがソリューション。簡単に言うとパックマンのソリューションには、ファミコン用のプロジェクト、プレイステーション用のプロジェクト、XBOX360用のプロジェクトが含まれている、みたいなイメージ。
#areaedit(end)

***エディット&コンティニュー [#ndfb4326]
#areaedit
この便利さは神がかっている。プログラムを途中で止めて、ソースを変更して、続きから実行できる。メニューを構築したりするのに、なんどもソース中の座標を変更してリコンパイル、とかしなくていいし、ゲームのバランス調整にも実に便利。VisualStudio系以外では見たことがない。

VC2015ではなぜか1コンパイルに付き1度しかエディットできるチャンスがない。なんか設定ミスってるのかな、と思ったが制限がかかっているらしい。

https://www.infoq.com/jp/news/2015/08/enc-vs2015
#areaedit(end)

***ポインター [#ve638c04]
#areaedit
簡単に言うと変数へのショートカット。特定の変数に値を代入する時に、その場所にない(別の場所にいてる)変数へのショートカットを作ると便利。このショートカットがポインター。変数へのショートカットといったが本当は変数の値が格納されているメモリへのショートカット。ショートカット自体はメモリのどこだったか、そのメモリのアドレスを記録している。だから、ショートカットに記録されているアドレスに値を入れれば変数の中身が変わる。

アドレスには数字データやテキストが所狭しとぎゅぎゅうに並べられている。そこに型をはめることでその型にあう変数やテキストが区分けされる。型を間違えるとおかしな区分けになる。だからポインタは何型のポインタだったかを覚えておく必要がある。違う型に無理やりはめ込むことを「型キャスト」という。


AAA BBB CCCC型
012 345 6789  

A B CCCCCCCC型
0 1 23456789   ←データの中身は同じだが型により切り分け方が異なる
#areaedit(end)

***ボイドポインター [#w0ca03c6]
#areaedit
ボイド(void)とは何もないことを指す。ポインタはアドレスを示すマーカーみたいな変数。それらが組み合わさってボイドポインター。通常ポインタにはそのマーカーが何を指しているかを示しておかないと、その先何バイトがそのマーカーのさす範囲なのか明確にできないので、「~型のポインタ」という形で扱うのが普通。A型のメモリ領域をB型で指し示すことはできない。しかしボイドポインタは明確な型を持たない分、A型でもB型でもなんでも型として受け入れられる。しかしボイドポインターに代入して、deleteした場合、明確な型がわからないので、デストラクタが呼ばれなくて困る。
ボイド(void)とは何もないことを指す。ポインタはアドレスを示すショートカット。それらが組み合わさってボイドポインター。通常ポインタにはそのマーカーが何を指しているかを示しておかないと、その先何バイトがそのマーカーのさす範囲なのか明確にできないので、「~型のポインタ」という形で扱うのが普通。A型のメモリ領域をB型で指し示すことはできない。しかしボイドポインタは明確な型を持たない分、A型でもB型でもなんでも型として受け入れられる。しかしボイドポインターに代入して、deleteした場合、明確な型がわからないので、デストラクタが呼ばれなくて困る。
#areaedit(end)

***メモリとCPU [#dd0b9a07]
#areaedit
CPUは車の速さ、メモリは車の荷台。荷台の大きさが1、速さ5の車で、10個の荷物を運ぶと50のコストがかかる。荷台の大きさが5、速さ5なら10のコストで運び終わる。

荷台の大きさが10あれば、5のコストで運び終わるが、さらに大きく荷台の大きさを20にしても5のコストは絶対かかるので、これ以上荷台を大きくしてもメモリを増やしても)意味は無い。

そもそも10個の荷物じゃなくて20の大きさの荷物を5の速度の車で運ぼうと思うと、荷台に載り切らない。この場合は大きなトラックを呼んできて20の大きさの荷物を積んでもらう必要があるが、トラックを呼んでくる分遅くなる。HDDスワップっていうのは、メモリに載り切らないデータを一時的にHDDに読み込んで無理やり処理することができるのだけれども、HDDを呼び出す分遅くなる。そもそも、HDDはメモリに比べて圧倒的に遅い。
#areaedit(end)

#areaedit(end)


***C++11 [#h5fb6039]
#areaedit
いまのC++の標準ですって。boostとかstdとかstlとか複雑になって取り残された僕にはJavaでもなくC#でもなくもう一度あの時愛したC言語に戻るチャンスかもしれないと思ってみてみたら、しばらく見ないうちに「髪型変わった?」っていうレベルじゃなかった、別人じゃん。C++2とかC++8とかがあるわけじゃなくて、2011年に久しぶりに策定されたCの標準化らしい。ANSIとかで定義されてたCの標準化の2011年版だと思えばいい。2014年版のC++14もあるけど、もうそっ閉じ。
#areaedit(end)


***ラムダ式 [#u1610269]
#areaedit
C++11から追加された新仕様。

 void onConnectedController(Controller* controller, Event* event)
  ↓

 controllerListener->onConnectedController = [&](Controller* controller, Event* event)
 {
 };

見慣れたソースから書き直すとこんな感じ。コールバック関数の挙動をひとまとめにかけるのが便利なんですって。関数の中に関数を書くとか、初見で意味がわからないが、関数内にテーブルを定義するのに近いと強引に思い込んで関数の最後はセミコロンで閉じよう「{ ~ };」
#areaedit(end)

***レキシカルスコープ [#y667be61]
#areaedit
関数の中に関数を書いたりするアレ。
 test()
 {
  test2(){
  };
 
  test2();
 }
#areaedit(end)


***微分 / 積分 [#k4e80f98]
#areaedit
微分、積分、サインコサインタンジェント、数学は色々難しいし、なんの役に立つのかわからない。微分の計算がわからなくとも概念は知っておこう。1フレームに2.8ドット移動するキャラを考えると、1秒間に2.8x60=168ドットの距離を移動することになる。この時1/60秒単位にスライスしているのは、秒間あたりの移動速度に微分していると言えるし、秒間あたりの移動距離は積分しているといえる。
#areaedit(end)

*** 外積 / 内積 [#pca0629c]
#areaedit
外積、内積とは「2つの線と線の平行具合」である。内積の場合、線と線の関係が平行に近いほど0になり、垂直に近いほど1に近づく。外積の場合はその逆で「直交具合」と言える。

レースゲームなら車が壁にぶつかった時の車体のベクトル(線1)と壁のベクトル(線2)で内積をとって1に近いほど速度を落とす。1っていうことは壁に真正面からぶつかったことになるし、ゼロだとほぼ平行にあたって「擦っただけ」といえる。ちなみに英語では、外積とはcross Product、内積とはdot Productという。自分で外積、内積を取るプログラムもシンプルなので使っているうちに覚えられる。

 typedef struct Vector2D
 {
  Float32 x;
  Float32 y;
 } Vector2D;
 
 
 //ベクトル内積
 Float32 DotProduct(Vector2D *vecL, Vector2D *vecR) {
  return vecL->x * vecR->x + vecL->y * vecR->y;
 }
 
 //ベクトル外積
 Float32 CrossProduct(Vector2D *vecL, Vector2D *vecR) {
  return vecL->x * vecR->y - vecL->y * vecR->x;
 }

内積は2つのベクトルのなす角度を求めることができるし、平面上に点があるかどうかも判定可能。外積はポリゴンの向き(法線ベクトル)や平面上の三角形と点の内外判定に利用できる。
#areaedit(end)


**フレーム [#ld841926]
#areaedit
一般的に1/60秒の時間を表す。テレビは1秒間に60枚のパラパラ漫画を再生することで動いているのはご承知の通り。秒間に60枚ということは1コマ1/60秒(約0.016秒)なので、見えないほど速い時間ではない。ゲームではキャラクタの動きを1/60秒毎にスライスしてプログラムされている。
#areaedit(end)



*グラフィック関連 [#dc6683da]
***クランプ、アドレッシングモード [#r333ad6b]
#areaedit
スプライト表示の際、テクスチャの範囲外を指定してしまった時に、範囲外の表示をどのように表示するか、いくつかあるアドレッシングモードから選ぶことができる。

-クランプ・・・端っこの色をひきずって表示する
-ミラー(逆さに表示)
-ラップ(ゼロに戻って表示)
#areaedit(end)

***アルファ・ブレンディング [#l5bb8f52]
#areaedit
アルファとは半透明のこと。赤いセロファンと緑のセロファンを重ねて上から見れば黒っぽく見える。こんな感じで半透明を混ぜあわせるからアルファのブレンデイング。

0がスケスケ、100が不透明として、下地を50%の半透明度、上にかぶせるセロファンを50%の半透明みたいな感じで混ぜ合わせる。上にかぶせるセロファンの透明度が100%の場合、下の色は全く見えない。
計算としては、例えばRGBのr成分が100の時、上にかぶせる赤色(100)を50%で混ぜあわせると
100*0.5 + 100*0.5 = 100 となる。
#areaedit(end)

***ブレンドファンクション [#l6feeb8b]
#areaedit
ブレンドの仕方もいろいろある。ただ下の色と上の色を組み合わせる場合だと上の色を70%とした場合に下の色を30%とすることで合わせて100%の普通のブレンディングとなる。
しかし、70%の下地に対して、70%の色を加算合成すると、140%になる。現実的に100%以上の色にはならないので全部が白くなっていく。
#areaedit(end)

***ワイルドカード [#eaff9ff1]
#areaedit
よくファイル名で使われる「*.bmp」とかいう謎の記号が出てくるが、この米マークは知っての通り「アスタリスク」という。ファイル名に使われるアスタリスクは「ワイルドカード」と言って、「???」を表す。よくわからないだろうが「???.bmp」と考えればいい。bmpの拡張子を持ったファイル全てを表す。検索するときに便利。a*.bmpをすれば、頭がaで始まるbmpファイルを指定できる
#areaedit(end)

***OpenCV [#l7df6a9b]
#areaedit
ビデオカメラに関する汎用プログラミングライブラリ。
#areaedit(end)

***grep [#c3e73ba9]
#areaedit

#areaedit(end)

**演算 / 計算 違い [#n90d25fd]
#areaedit
計算・・・計ったり数えたりすること
演算・・・法則にそって計算すること

演算は計算に含まれる。プログラマが決めた法則によって計算されるプログラムは全て演算。
#areaedit(end)

**パーサー [#v504bdb7]
#areaedit
XMLのパーサーとかJSONのパーサーという風に使う。難しく言うと構文解析器。構造をもったテキストのカッコとかを解釈してデータを取り出すためのプログラム。XMLデータはXMLパーサーを使わないと(作らないと)中のデータを正しく取り出せない。なぜならXMLには不要なカッコがたくさんテキストについているからだ。そいつらを構文解析してデータ化する(パースする)必要があるのだが、色々めんどくさい。
XMLのパーサーとかJSONのパーサーという風に使う。難しく言うと構文解析器。構造をもったテキストのカッコとかを解釈してデータを取り出すためのプログラム。XMLデータはXMLパーサーを使わないと(作らないと)中のデータを正しく取り出せない。なぜならXMLというフォーマットはテキストエディタで見るとデータを区別するために色んなカッコで括られているからだ。そいつらを構文解析してデータだけ抜き出す(パースする)必要があるのだが、色々めんどくさい。
#areaedit(end)

***文字の扱い [#j9f134a7]
#areaedit
|シングルバイト| 1バイト固定   ASCII文字|char*|
|ダブルバイト | 2バイト固定   Shift-JIS(漢字部位)|char*|
|マルチバイト | 1~nバイトの可変 Shift-JIS|char*|
|ワイド文字  | ユニコード UTF-8とか|wchar_t*|

WindowsAPIの変換関数
|MultiByteToWideChar| Shift-JIS > UTF-8|char* > wchar_t* |
|WideCharToMultiByte| UTF-8 > Shift-JIS|wchar_t > char*|

古い標準関数はマルチバイトにしか対応しておらず、新しい関数はワイド文字が標準化してきている。
つまり、Shift-JISからUTF-8へ標準が移ってきているので、UTF-8に対応しきれていないC標準関数などが必然的に廃れていく。
#areaedit(end)

***JIT [#d81620f8]
#areaedit
一般的には機械語への翻訳方式の1つ。インタープリターやコンパイルに対しての方式の名前で実行直前にコンパイルする方式。Just - In - Timeの略。
インタープリターと違うところは実行する行に来て都度機械語に翻訳するのではなく、実行直前に全てをコンパイルするところ。

C言語などの事前に全てをコンパイルしておく方式との違いは、実行されるマシン上でマシン環境に合わせたコンパイルが行われるところ。また実行前に時間を食ってしまう最適化は行われない。

エミュレーターにおけるROMの解釈などは他のプラットフォーム用に書かれた機械語の塊(ROM)をJIT方式で翻訳している、といえる。
一般的には機械語への翻訳方式の1つ。インタープリターやコンパイルに対しての方式の名前で実行直前に機械語翻訳する方式。Just - In - Timeの略。インタープリターと違うところはアプリ実行中に実行行に来てはじめて機械語に翻訳するのではなく、アプリ起動直前に全てを翻訳するところ。C言語の起動するべきアプリそのものを機械語翻訳(コンパイル)してアプリを生成する。
#areaedit(end)


***DCCツール [#x5b71cf3]
#areaedit
Degital Content Creation ツールの略。PhotoShopとかMayaのこと。デジタルコンテンツを作り出すツールの総称&略称。
#areaedit(end)

***ビヘイビア [#l037e6ab]
#areaedit
Unityなんかでよく使われる言葉。「挙動」「動作」を表す言葉。
Actionとかに似ているかもしれない。
「Death Behavior=死んだ時の挙動」といったニュアンスで使われる。
#areaedit(end)

***ポリゴン / モデル / メッシュ / 3D [#n13ad854]
#areaedit
3Dゲームで使われているキャラクターを指して
「このポリゴンすげえ」っていう一般人とか「このモデルよく出来てるね」っていうグラフィッカーとか、「このメッシュ何ポリゴンなのかな」っていうプログラマと、「この3Dええな」っていう営業がいる。同じような意味だけど、それぞれ違う。
#areaedit(end)

*** 3D / ポリゴン [#m8b9805d]
#areaedit
ポリゴンとは多角形。三角形ポリゴンとか四角形ポリゴンがある。線がつながって最後に閉じていない折れ線状態のものはポリラインという。

ポリゴンを形成する頂点を2Dなら平面上で回転させることができ、3Dなら立体的に回転をさせることができる。2Dならサイン、コサインの三角関数で2次元空間内のみの計算でことたりるが、3Dで計算するには行列をつかった3次元空間での計算が必要になる。

つまり、ポリゴンとは多角形を表す形、3Dとは多角形の存在する空間をあらわすといえる。日本語で言うと「この3次元空間ええな」っていう営業はなんかかっこいいし、「この多角形すげえ」っていう一般人はよくわからないがなんか逆に凄いマニアックさを感じる。
#areaedit(end)

*** モデル / メッシュ [#db34a54a]
#areaedit
モデルとは3Dで形成された造形の総称。ボーンが入ってようが、テクスチャがついてようがついてなかろうが、なんでも「モデル」。このモデルをつくることをモデリング。一般的にメッシュは、テクスチャやボーンのない点、線、面の集合で形成された3Dモデル。しかしボーンが入ってない動かないモデルをさしてスタティック・メッシュという言い方もするので定義はあやふや。しかし動かないモデルをスタティックモデルとは言わない。

テクスチャやボーンやマテリアルやら入れた完成品が3Dモデル。そこから出力された「形」のみのデータがメッシュっていうイメージ。
#areaedit(end)

***プリミティブ [#y610f13d]
#areaedit
最小単位
#areaedit(end)

***オブジェクト [#y99ad3ec]
#areaedit
「モノ」のこと。3Dモデルにも使われるし、C言語プログラムの中間状態もオブジェクト、モノを表す言葉はなんでもオブジェクトである。誰なのよオブジェクトなんて抽象的な種類名をつけたのは。
#areaedit(end)

3Dにおけるオブジェクトはしばしばメッシュと混同されるが
 「オブジェクトは3Dモデルの位置・回転・大きさを定義し、
 メッシュは3Dモデルの頂点・辺・面を定義するもの」
ということらしい
#areaedit(end)

***スプライト [#qe38d369]
#areaedit
英語的には「妖精」のこと。画面内を飛び回るキャラクタをイメージして妖精呼ばわりされる。昔はハードウェアでキャラクタを描く機能が別にあったため、背景はBG機能、キャラクタはスプライト機能で描く的な表現がされておりハードによってスプライトの表示枚数の限界値が異っていたが、今はスプライトをハードでもつ必要はなくポリゴンとテクスチャで代用されるため機能としては搭載されていないが、画面を飛び回る2Dキャラクタを表現するポリゴンを指してスプライトという言い方だけが生きている
#areaedit(end)

***テクスチャ [#k1a27b27]
#areaedit
英語的には「生地」、プラモデルのデカール的な存在でポリゴンに貼り付ける絵素材のこと。昔はスプライトとか画像とかBMPとかいろんな表現があったが、近年ではスプライトはポリゴンに貼り付けたテクスチャで代用されることから絵素材を総称して「テクスチャ」と呼ばれる

※画面上の点はピクセル、テクスチャ上の点はテクセルという呼び分け方があってポリゴンの頂点座標(X,Y)に対してテクスチャ上の座標は(U,V)で表現されるが、意味はx,yと同じ。
#areaedit(end)

***マテリアル [#k7337dd5]
#areaedit
英語的には「材質」。
じゅうたんにどれだけ鉄っぽい絵を書いても床が金属質に見えないのは光の反射率のせい。絵が張り付いているものの材質を設定するのがマテリアル。ポリゴンとテクスチャをつなぐ接着剤のような存在。どんなテクスチャで反射率がどのくらい、っていうのが設定される。
#areaedit(end)

***サーフェース [#z5396e47]
#areaedit
英語的には「表面」。ポリゴンにテクスチャを貼り付けてマテリアル情報を加えた状態の総称。テクスチャ + マテリアル + ポリゴン = サーフェースみたいな感じ
#areaedit(end)

*** 裏読み / ストリーミング読み込み [#v615acf8]
#areaedit
NOW LOADINGなんかでゲームの進行をとめてステージを読み込むのとは対照的にゲームの動作中に、裏でデータを少しずつ読みこんでおきシームレスに次のステージにつなげたりすること。ストリーミング読み込みとも呼ばれる。
簡単な例ではオンデマンドの動画再生なんかは、全てをダウンロードしてから動画がみられるようになっているわけではなく、ストリーミング読み込みとなっていて、とりあえず最初にみられる5秒位の動画データをダウンロードして、それを見せてる間に5秒後以降のデータを順次読み込むことで、できるだけ待ち時間をなくしている。
#areaedit(end)

*** オンデマンド [#wf277779]
#areaedit
ユーザーのリクエストを受け付けて初めて配信を開始する方式。youtubeなんかはそれの代表例。ではオンデマンドでないものとはなにか?時間枠にそって自動的に配信しているテレビ放送がそれにあたる。要はユーザーがテレビに合わせるのか、テレビがユーザーにあわせるのかの違い。
#areaedit(end)

*** QueryInterface(オブジェクトの種類ID , *オブジェクト) [#wc57729a]
#areaedit
この関数を通じてオブジェクトを使用可能か判断してくれるらしい。使える場合にはそのインターフェースのポインタをオブジェクトに返してくれるとのこと。なんだかわからないけど手順に沿っていつも入れていた。
#areaedit(end)

***ユニコードとかUTF-8とか [#yc7fddb9]
「この文字は、ユニコードなのか、UTF-8なのか、マルチバイトなのか?」といった質問は画像で言うと「この絵は実写なのかBMPなのかパレット画像なのか?」といった感じで、いろんな規格がごちゃ混ぜになった質問で答えにくい。各国の言語が色々な規格でバラバラでは使いにくいので単一(uni)の文字コードで中国語も日本語も英語も扱えるようにしたのがユニコード。UTF-8、UTF-16はユニコード規格の中の文字の格納方法(フォーマット)。そのフォーマットが1文字2バイト固定ならワイド文字、1~4バイトのいずれかで構成されている場合はマルチバイト形式。つまり「この文字はユニコードでUTF-8フォーマットで出来ているからマルチバイトです」が正しい答え方。

***オーバーレイ [#zd343b9b]
#areaedit
#areaedit(end)