Python3 3Dゲームプログラミング(Pythonではじめる3Dゲーム開発)

2020年の12月に拙著「Python3 3Dゲームプログラミング」を出版しました。

https://www.kohgakusha.co.jp/books/detail/978-4-7775-2129-6

ところがなぜか、いくつかのオンライン書店で「Pythonではじめる3Dゲーム開発」というタイトルに間違えて登録されているようです。

理由はわかりませんが、両者とも同じ「Python3 3Dゲームプログラミング」の画像が使われているはずなので、確認してご購入してください。

ゲーム開発ではじめるPython3

工学社から「ゲーム開発ではじめるPython3」を出版しました。

ただ問題があって、工学社のサポートページにある「PygameSamples.zip」で解凍したフォルダ名の名前の変更が必要です。

https://www.kohgakusha.co.jp/support/pygame/

解凍して作成された「PygameSamples」フォルダ名を「PyGame」フォルダに名前を変更してください。

FABER-CASTELL色鉛筆ケースの開け方

「ファーバーカステル」の色鉛筆ケースが開けにくいので、簡単に開けられる開き方を紹介します。

次の写真のように、腕を色鉛筆ケースの上に横たえます。

次に5本指を上蓋の側面に引っ掛けて、その手を持ち上げると、次の写真のように簡単に蓋を開けられます。

「FABER-CASTELL」は世界中のプロが1番使っている色鉛筆の1つです。

ちなみに入門用の「トンボ」の色鉛筆のケースは押したら簡単に開けられるようになっています。

工学社から「ビットパズル」を出版

2019年8月30日工学社から「ビットパズル」を出版します。

https://www.kohgakusha.co.jp/books/detail/978-4-7775-2085-5

2進数の「0」「1」を「□」「■」のドット絵にするパズルゲームです。さらに8進数・16進数・10進数などを2進数に変換してドット絵を描きます。

この本に関して注意点があります。

問題を解く際には必ず下敷きを敷いてください。

プロジェクトファイル’ ‘は名前が変更されているか、またはソリューションには存在しません

Windows版「Visual Studio」のC++だけかはわかりませんが、ビルドしようとすると以下のようなエラーが出ることがあります。

「プロジェクト ファイル’ ‘は名前が変更されているか、またはソリューションには存在しません。」

僕の場合、別のマシンへソリューション全部をコピペした場合によく起こりました。

解決方法は、このエラーが出たら、Visual Studioの「ファイル」→「ソリューションを閉じる」を実行したとき、ソリューションを保存するか聞かれるので、「いいえ」で保存せずに閉じるだけです。
こうすると、なぜか次回同じソリューションを開くと、エラーが起きません。

OpenSubdivで独立頂点があるとエラーが出る不具合

現在、フキダシの指示に従って3Dデザインしていくだけで3DCGが上達する「お手本モデラー」を開発中です。
さらにプロのデザイナーが3Dデザインする過程を記録してフキダシのお手本にして、プロの技術が学べる予定です。


https://otehon.cco24.com

そこで困ったプログラミングの解決策をシェアします。
ディズニー傘下の「Pixar」がオープンソースで公開している3Dモデルの曲面化ライブラリ「OpenSubdiv」でエラーに悩まされました。
頂点や面の3DデータをOpenSubdivに渡したらそれを、指定したmaxlevelまで曲面にしてくれます。
最初はそれほど苦労しなかったのですが、公式サイトを見て解決したことがあります。
https://graphics.pixar.com/opensubdiv/docs/subdivision_surfaces.html#non-manifold-disconnected-vertex
普通の3Dプログラムでは面を構成する頂点インデックスが頂点を指し、面の頂点インデックスで使われない頂点があってもOKです。
ところがOpenSubdivはなぜか独立した頂点があるとエラーが出ます。
特に三角形のあるモデルに、ラインなどがあると独立頂点となってエラーがでます。それなのにReleaseビルドだとエラーが出ないこともあり、Debugビルドでは必ずエラーになるので、最初エラーに気づきませんでした。
そこで独立頂点を無くして、すべての頂点がいずれかの三角形面や四角形面に属するようにしたら無事解決しました。

ホームページを公開したおかげで

2002年、8年間在籍した大阪大学を中退し、ほぼニート状態になった。
当時から「ニート」と言う呼び名だったかははっきり覚えていないが、病気とは言え、学校も仕事も行っていないのは、言われなくても恥ずかしいことだった。
「ほぼ」と言ったのは実家が会社を経営していて、数合わせで役員をしているだけで、手伝いぐらいしかできず、親の会社の後も継げない病状だった。
ただ1つ特技があると言えば、子供の頃からパソコンでプログラミングなどをしてきたことだけだ。
本題だが、最初ホームページを作った時は特に目的もなく、ただ自分のホームページを持つことに憧れがあっただけで、これで仕事になるとは思いもしなかった。
大学在学中に初めてホームページを作ったのだが、まずさっき特技と言った創作物を公開することにした。初めて公開したのはWindowsゲーム作品「FREIGHT」で、元々は中学生の時に買ったパソコン「X68000」で開発したものをWindowsに移植したものだ。タイトルの意味通り貨物列車のサイコロゲームだ。
FREIGHTは2Dゲームだったが、次第に3Dゲームを作りたい欲求が大きくなっていた。
そのために3Dアニメーションツール「Cyberdelia」と、ポリゴンモデラー(3Dオブジェクトを作成編集するツール)「Centigrade」を開発し、ホームページで公開した。僕自身が自作の3Dゲームを開発するのにこれらも使ったので、ホームページを見てくれる人にもダウンロードして3Dゲームを作ってもらうためだ。
そんな時、試しに出版社の人に2つのソフトウェアの開発過程を入門書に出来ないか、初めて本の企画を提案してみた。当時は企画書と呼べるものでもなかったのだが、「工学社」と言うIT系の出版社からOKの返事をもらえたのだ。
だが今でこそ18冊も本を出版しているが、1冊目は本当に書くのに苦労した。いきなり何を書いていいのか全くわからなかったのだ。そこで共著しようとしたりもしたのだが、それもうまくいかず、結局下手でも何とか単著で出版は出来たのだった。こんなに下手でもいいのか、と調子に乗って下手なまま、ホームページで公開したコンテンツの作り方を2冊目、3冊目と書いていった。しかし「説明が足らん」などクレームもあり、解説文を多く書くようにして、今ではマシになったと思う。
こうして、2004年に技術書作家デビューしたのだが、ニート呼ばわりされないように、できるだけ毎年本を出版している。ほとんど本を書くためにホームページを公開しているようなものだ。
技術書を商業出版したいなら、ホームページでコンテンツを公開して、それを企画書に書いて提案すればいいだろう。

3Dクイズ.com

このタイトルを聞いてピンときたら、ありがとう。でも他の人には何のことなのかさっぱりわからないだろうから説明しよう。
これは文字通りホームページの名前だ。僕がデザインしたのだが、よかったら「3Dクイズ」を検索してプレイして欲しい。面倒ならこちらのURLにアクセスしよう。
https://3d-quiz.com
どんな内容かと言うと、2つの絵が同じ3Dシーンの中で異なるカメラアングルから見て間違い探しする、僕のオリジナルのクイズだ。

ところで話は変わるが、恥ずかしながら僕は、親の会社で手伝い程度しか貢献出来ていないのに、役員報酬だけはもらって生活している。そんな時この間違い探しを思いつき、コンテストに入賞し、フジテレビで出題され、本も出版された。
さらに他局の全国放送の番組でも毎週使われて「これで本が売れる!親に恩返しできる!」と喜んだのも束の間、一向に宣伝してくれず、悔し涙を飲んだ。
だけどこのホームページだけは、後世にまで遺していきたい。
この機会に「3Dクイズ.com」は僕のオリジナルだぞ!と主張し証明できたら本望だ。

自宅で散髪するための業務用バリカン

自宅で散髪するために、家電メーカーが販売している5000~6000円ぐらいのバリカンを使ったことがある人もいるでしょう。
でもとても髪の毛が刈りにくく、すぐ髪の毛が詰まってしまって、困ってる人も多いと思います。
そこで業務用のバリカンがあればいいけど、高価なんじゃないかと諦めている人もいませんか?
意外にも業務用のバリカンは2~3万円で専門店で購入できるんです。
毎月理容院に行ったとしたら、1年で元がとれる金額です。
ただし髪の毛をうまく刈るにはコツがいるのですけどね。

2Dと3Dの円の角度でsinとcosが逆

2Dと3Dで円周上の点の座標を求めるとき、XとYのベクトル、XとZのベクトルでsinとcosが逆になることに気づきましたか?

その原因は、2DではX軸にプラスの方向、つまり右方向が回転角度が0度になります。
それに対して3Dでは、Z軸に手前の方向が回転角度が0度になるからです。
本当は3DもX軸にプラスの方向を回転角度を0度にすべきかもしれません。