Xcode(c++)で静的ライブラリ(.a)を作る方法

Xcodeでライブラリを作る方法

今記事では、c++で静的ライブラリ(.a)を作る方法を解説する。

  1. Create a new Xcode projectを選択する。

    f:id:mofox:20190309044345p:plain

  2. Framework&LibraryのLibraryを選択する。

    f:id:mofox:20190309044444p:plain

  3. Product Nameに適当な名前を入力し、FrameworkにはSTC(C++ Library)を、TypeにはStaticを設定する。f:id:mofox:20190309044913p:plain
  4. Sample.hppとSample.cppにプログラムを書いて、完成したら左上のBuildボタンをクリックして、ProductsのlibSample.aを作成する。

    f:id:mofox:20190309045450p:plain

  5. libSample.aを右クリックでshow in FinderでFinderを開き、libSample.aをコピーし、適当な場所に配置する。
  6. Sample.hppにおいても同様に行う。

    f:id:mofox:20190309045730p:plain

このとき、

ライブラリを使おうと思っているXcodeプロジェクト(今開いているSampleプロジェクトではなく、ライブラリを導入したいXcodeプロジェクト)のLibrary Search Pathに設定してある場所にlibSample.aを、Header Search Pathに設定してある場所にSample.hppを配置する。(設定していない場合は、適当な場所を設定する。)

 

また、そのプロジェクト(今開いているSampleプロジェクトではなく、ライブラリを導入したいXcodeプロジェクト)のBuild PhasesのLink Binary With LibrariesにlibSample.aを配置することによって、このプロジェクトで作成したライブラリを使うことができるようになる。

f:id:mofox:20190309050507p:plain

 

このように、ライブラリを使いたい場合は、.aファイルとhppファイルがあれば、ライブラリを使うことができるようになる。

Call of Duty : Modern Warfare Remastered フリープレイで遊べたので感想

 2007年に発売されたFPSタイトル「Call of Duty 4: Modern Warfare 」のリマスタータイトルである「Call of Duty : Modern Warfare Remastered 」の感想を書いていく。

キャンペーン

感じたこと

  • 敵を倒したのかどうか分かりにくいと思った。敵は死んだのかそれともまだ生きているのかは、敵が地面に横たわって動かなくなっている状態を見て確認しなければならない。
  • 死んだときに冷めてしまった。
  • 「操作してるキャラ=自分」感がない。
  • ショットガンで人を一発で仕留めるのが気持ちいい。
  • 映画的演出がかっこいい。

分析と考察

敵を倒したのかどうか分かりにくい

 敵を倒したのかどうか分かりにくいと思った原因として、他のゲームによくある「体力ゲージなどのUI」や「敵を倒したときのシステム効果音」などの要素を入れていないことがある。つまり、このゲームでは、ゲームとしての分かりやすさより、リアルさを重要視していることになる。

死んだときに冷めてしまった

 リアルさを感じられるだけあって、死んでしまったときに、「あっ、所詮これはゲームなんだな」と、再確認させられてしまう。そのため、冷めてしまったと思われる。よく死んでしまうゲームにおいては、「死ぬ」ということも、ゲームプレイの一部として、プレイヤに違和感を感じさせない仕掛けが、必要かもしれない。(ソウルシリーズのように)

操作してるキャラ=自分」感がない

 FPSゲームだから、仕方ないような気もするが、あった方がゲームとして面白いのは確実に言えること。

ショットガンで人を一発で仕留めるのが気持ちいい

 どんどん敵陣に攻め込んだスタイルで、敵を倒していくことで(リアルな戦場において、普通の人間にはできないこと)、自分は特別な人間なんだと思うことができるため、楽しさを感じることができると思われる。

映画的演出がかっこいい。

 映画的なダイナミックな演出の一部を自分で操作することができるが、映像的にかっこいいとは思っても、操作してる俺かっこいいとまでは、思えなかった。それは、「操作してるキャラ=自分」を感じさせる仕掛けが足りていないからと思われる。上でも書いたが、そもそもそれはあまり意識していないのかもしれない。

マルチプレイ

 もともと、FPSゲームが苦手なので、マルチプレイは楽しむことができない。苦手な人にとっては、マルチプレイで対戦を楽しむことはできないのだろうか。対戦して勝負に勝ったとき、人は楽しさを感じることができるのだろう。「下手だけど、やってて楽しい。」そんなゲームは、あるのだろうか。そういうゲームがあれば、やってみたいなと思う。

みんなの評価

やっぱりグラフィックを評価している人が多い。

戦争映画が好きな人にとって、このゲームは、最高なのかもしれない。戦場の空気感は、本当にうまく表現できているから。リアルな戦場は、全く知らないが、戦場ってこんな感じなんだろうなって思わせられる。

まとめ

結局、このゲームを楽しめる人は、戦争映画が好きな人。サッカー好きな人がサッカーゲームを楽しめるっていうのと同じと思われる。

Blenderでモデルを作る方法(テクスチャ貼り付け、OBJファイル出力)

Blenderにおけるモデルの作り方

この記事では、直方体に対してテクスチャを貼り付けるだけの、簡単なモデル作成方法について、説明しています。

f:id:mofox:20190304212824p:plain

操作順序と説明

  1. まず、Blenderを開いたとき、立方体が置かれてあるので、Property Editor->Scaleでモデルの大きさを変えて、直方体にする。また、y軸を上方向にしておきたい場合は、Editor->Rotationのx軸を90とする。f:id:mofox:20190304013407p:plain
  2. UV/Image Editorを開くf:id:mofox:20190304013607p:plain
  3. Image->Open Imageをクリックし、テクスチャをロード

    f:id:mofox:20190304013906p:plain

  4. Texture Paint Modeに変更し、Slots->Painting ModeをImageに変更した後、Canvas Imageにロードした画像を選択f:id:mofox:20190304014444p:plain
  5. Edit Modeに変更し、Mesh->UV unwarp->Unwarpをクリック

    f:id:mofox:20190304014802p:plain

  6. 面選択モードに変更

    f:id:mofox:20190304015036p:plain

  7. テクスチャを貼り付けたい面を右クリックで選択し、UV/Image Editorで貼り付けたい部分を設定する。

    f:id:mofox:20190304015423p:plain

    詳しい操作説明*1
  8. Texture Paint Modeで確認できる

    f:id:mofox:20190304021442p:plain

  9.  File->Export->Wavefrontをクリックして、Export OBJを選択して、OBJファイル出力できる。

    f:id:mofox:20190304021934p:plain

出力されたファイルに関して注意点*2

OpenGLで描画する場合は⬇️のようにExport OBJの設定を変更する

f:id:mofox:20190304211206p:plain

 

*1:UV/ImageEditorで範囲を設定するとき。角を右クリックしながら動かすことで、範囲を設定できる。

*2:このとき、.objファイルと.mtlファイルが出力される。.objは、頂点情報など、.mtlにはテクスチャの情報などが入っている。.objファイルを開いても、テクスチャを貼り付けた状態のモデルではない。OpenGLなどで描画するときに、プログラム内で結びつけて出力させる必要がある。

キングダムハーツ3 攻略 プラウドモードでクリアした感想

キングダムハーツ3プラウドモードでクリアしました!

 

その感想を書いていきたいと思います。

 

クリアした感想

率直な感想は、やや面白かった。

 

めちゃくちゃ面白かったとも言えないけど、面白くもないとも言えない。やや面白かったがあってるかなと思います。

 

正直、自分はキングダムハーツのめちゃくちゃなファンではないですが、期待はしてました。

期待通りの面白さではありましたが、期待以上とはなりませんでしたね。

 

面白かったところ

爽快なアクション、気持ちいい操作。

この2つが良かったと思います。

 

一般的なキングダムハーツ3の良さとなると、ディズニーなどのキャラクターが出てくる世界観などがあると思いますが、自分はあんまりディズニーキャラに思い入れはないので、そこは自分にとっての面白要素にはなりませんでした。

 

残念だったところ

ストーリーが幼稚に見えた。

 

よく言われるのが、キングダムハーツ3のストーリーは複雑だということですが、複雑なくせに、ストーリーの見せ方が幼稚というか、小さい子向けというか。

 

ムービーが多いんですけど、演出が小さい子向けなんですよね。戦隊モノを見ているかのような感じです。それなのに、ストーリーは複雑という笑。

 

特にゲーム終盤。

 

開発期間が迫っていて、焦っていたのかちょっと手抜き感が見られました。そこがちょっと残念だったかなと思います。

 

やり込み要素があるところは好き

クリアしても、各ステージを回って宝箱を探し回ったり、幸運のミッキーを写真で撮ったり、グミシップや隠しボスなど、やり込める要素はたくさんあります。

そういうところは好きです。

 

自分が買うゲームの基準が、長く遊べるゲームかどうかが一番大きいので、それには当てはまっていると思います。

 

一度クリアしたら、もう遊ばないかなというようなゲームは買いません。まだ学生なもんで、お金が。。。

 

やり込みたい人向けにも、やり込みやすいようになっていると思います。

 

おすすめ度は68%

キングダムハーツシリーズやったことない人には、あんまりお勧めできませんが、アクションは、まあ楽しめると思います。

「初心忘れるべからず」もっと強く願わないといけない。情熱が足りてるか?

結局は強い気持ちがあるかどうか。本当になりたいの願うかどうか。本当に思っているかどうかによって変わってくる。

 

それをすぐ忘れてしまう。

 

思い出せ。思い出せ。

 

なりたいんだろ。

 

俺はなりたい。

 

強く思え。情熱は足りてるか。

 

それにかかってくるんだぞ。

 

なりたい思え。中途半端に思ってたら絶対なれないぞ。俺は本当になりたいんだ。

 

なりたいなりたいなりたい。

 

それを強く願わないと。

なりたいなりたいなりたい。

 

強く願う。強く思う。頭から離れないほどに。強く願うんだ。

 

それにとらわれてしまうように。

 

それしか考えられないぐらいに。それぐらい強い気持ちで願え。

 

なりたいと思え。

強く願うんだ。

 

思い。根性。気持ち。結局そこが勝負の別れめなんだ。お前もわかってるだろ。

 

分かってるはずだ。

 

気持ちが足りない。全然足りない。ハングリーにならなければ。そうならないといけない。そうなるべきだ。ハングリーさ。これが今の俺には必要だ。

 

なれなれなれ。

 

貪欲になれ。だけどそれが難しい。トボトボと行くんです。それもまた難しい。

 

難しいなあ。でも、本当に原点に立ち返るのは大事なことだと思うよ。

 

自分の最初に思っていた気持ちを思い出すことは大事なことだと思う。

 

思い出せ。本当になりたかったんだ。

忘れるな初心に帰る。これは本当に大事な言葉なのかもしれない。

 

初心を忘るべからず。胸にちゃんとしまっておこう。

 

「初心忘れるべからず」という言葉は、初心者の頃の未熟な気持ちを忘れずに、やれということらしい。

 

初心者の頃のみっともなさを忘れるな。あの頃のような惨めな気持ちには戻りたくない。と思うことで精進できる。

 

本当にそうだな、と思う。あの頃のような惨めな気持ちには戻りたくない。どんなに惨めな気持ちだったか。思い出せよ。

なんだあの惨めな気持ちは。惨めという言葉にぴったりな気持ちだ。

惨めだったな。

 

自分がすごい無能のような扱いを受けて。実際そうだったし。すごく惨めだった。本当に惨めだった。めちゃくちゃ悔しかった。やっぱりそれを忘れてはいけないな。あの頃の惨めな気持ちを忘れてはいけない。忘れるな忘れるな忘れるな。

 

すごい惨めな気持ちだったなあ。あんな気持ちには二度となりたくない。

本当に惨めだったなあ。あの気持ちになれてはダメだ。惨めな気持ちになれてはダメだ。

なんて惨めだったんだ。惨めさを忘れるな。俺は、すぐ忘れようとしてしまうけど、あれは忘れてはいけない。本当に悔しかったし、怖かったし。あの時の気持ちを忘れてはいけない。怖いし、悔しいし、惨めだし。本当に惨めだった。

 

あの頃の気持ちを常に心に刻んで、日々精進するんだ。

 

キングダムハーツ3 発売

キングダムハーツ3発売

1月25日に発売します。ワクワクー!!!

ただ、正直言います。

 

買うかどうか迷いました。

 

youtubeでいろんな動画がupされていたので、見てはいたんですが、そこまでやりたい気持ちが高まらなかったので。

 

でも、昔、小さい頃よく遊んだなということを思い出して。

 

よし、買おうと決意しました。

9000円は高くね?

ダウンロード版は9000円。

高いけども、やりたいので書います。

 

ディスク版買えばいい話なのですが、ダウンロード版がいいのです。

 

ディスクを取り替えるのがめんどくさい。。。

 

それと、俺のps4がおかしくて、ディスクを入れながらやると、電源落ちたりするんです。。。

 

そろそろ、ps4も買い替えの時期か。

ブログもやっていきます

キングダムハーツ3のブログもやっていこうと思います。いつもブログやろうと思って、結局途中でやめてしまうんですけど。

 

今回は途中でやめないように、楽しくやっていきたいなと思います。

OpenGL ポイントスプライトの使い方ープログラムソースコードー

OpenGLでは、点に対してテクスチャをレンダリングさせる方法として、「ポイントスプライト」がある。

 

そのポイントスプライトの使い方を説明していく。(四角形に対してテクスチャを貼ることができることを前提として説明します。)

 

まず、バーテックスシェーダーのプログラムはこうなります。

#version 120

 

attribute vec3 position;

attribute vec2 vertexUV;

 

varying vec2 UV;

 

uniform mat4 mvp;

 

void main(){

    gl_Position =  mvp * vec4(position,1);

    UV = vertexUV;

}

 

フラグメントシェーダーのプログラムです。

#version 120

 

varying vec2 UV;

 

uniform sampler2D texture;

 

void main(){

    gl_FragColor = texture2D( texture, UV );

}

 

ポイントスプライトの場合は、四角形にテクスチャを貼るときに必要なUV座標の指定はいりません。

ただし、上記のように、バーテックス・フラグメントシェーダー内に書いておく必要はあります。

 

点を描画する前に指定するプログラム

    //点に対してテクスチャ座標を生成するようにする

    glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);

    /* テクスチャマッピング開始 */

    glEnable(GL_TEXTURE_2D);

    /* Point Sprite を有効にする */

    glEnable(GL_POINT_SPRITE);

 

他、通常のポイントを描画するプログラム以外に必要なプログラム

    glActiveTexture(GL_TEXTURE0);

    glUniform1i(mTextureLocation, 0);

  glEnableVertexAttribArray(mVertexUVLocation);

    glVertexAttribPointer(mVertexUVLocation, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

    glBindTexture(GL_TEXTURE_2D, mNormalMario);

    glUniformMatrix4fv(mMvpLocation, 1, GL_FALSE, &mPlayerMVP[0][0]);

    glDrawArrays(GL_POINTS, position, 1);

mTextureLocationは、フラグメントシェーダープログラムのuniform sampler2Dのtextureのことです。

mVertexUVLocationは、シェーダプログラムのUVのことです。

mNormalMarioは、読み込んだテクスチャです。

mMvpLocationは、シェーダプログラムのmvp。

mPlayerMVPは、main内で計算したMVP。

positionは、シェーダプログラムのpositionのことです。