ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ゲーム創り隊@ど素人コミュのProgram Utilitys

  • mixiチェック
  • このエントリーをはてなブックマークに追加
う〜んちょっと作り過ぎかな、グラフィックに関する事も書きたいのですが教えられる程知識が無いので・・・申し訳ないです。

ここでは主にプログラムやグラフィック関係(又はゲーム制作)に役に立つ豆知識を書き連ねていきます。
言語は何でもいいです、兎に角役に立ちそうな事をなんでもいいのでドンドン書いていきましょう!

○●ちょっとした決まり●○
・プログラムでもグラフィック関係でも構いません。
・あくまで「豆知識」です、長くなりすぎるものは別トピックとして分けた方が良いかもしれませんが、その辺はアバウトです(笑)
・豆知識とは、例えば「○○を楽にする方法!」や「役に立つ○○!」みたいな感じです。
・サンプルソースやデータ公開とかあると良いですね。自分も努力します。
・分かりやすく誰でも簡単に利用できる!を目標に!


○●テンプレート●○
[言語/ソフト]

【名称】

【方法】

【効果】

【メモ】

○●使用例●○
[言語]
C++

【名称】
STATIC_ASSERT(式)

【方法】
#define STATIC_ASSERT(exp) typedef int _dummy[(exp) ? 1 : -1]
と、どこか適当な場所に書きます。

【効果】
何とコレはSTATIC_ASSERT内の式の結果が偽になると【コンパイルエラー】を発生させるものです。
例えばAAAという値がBBBというdefine値を越えて欲しくない場合、
STATIC_ASSERT(AAA < BBB); と、コンパイル対象ソースのどこかに書いておくと、AAA >= BBB になった時にコンパイルエラーが起きます。

【メモ】
boost C++より拝借
なぜエラーが起きるかと言うとSTATIC_ASSERT内でローカルな配列を作っていますが、-1の配列は作れない為その場でエラーが発生します。


こんな感じでお願いします!

コメント(2)

[言語/ソフト]
C/C++

【名称】
NUM_OF(配列)

【方法】
#define NUM_OF(array) (sizeof((array)) / sizeof((array)[0]))
と、やはり好きなところに書きます(笑)

【効果】
コレは配列の要素数を数えるマクロです。array[] = ... のような配列を作った時、要素数を取得するのに便利です。

【メモ】
例えばint array[] = {0,1,2}; と言う配列を作ったとします。
次に NUM_OF(array);とすると3が返ってきます(要素数は3つですよね)
[言語]
プログラム全般(今回はC++ですが他にも流用できるはず)

【名称】
簡易B-Spline計算クラス

【方法】
何も考えずに、下のコードを貼り付けてもらえばOKです(笑)

まずコード実装部分(.cpp)に
//---------------------------------------------------------------------------------------------------
/**
* @file CFBSpline.cpp
* @brief B-スプライン曲線計算クラス
* @Data 2009/01/12 Totakke
*/
//---------------------------------------------------------------------------------------------------
#include "CFBSpline.h"

//--------------------------------------------------------------------------------
/**
* @brief コンストラクタ
*/
//--------------------------------------------------------------------------------
CFBSpline::CFBSpline(void)
{
m_fStartPoint = 0;
m_fMiddlePoint = 0;
m_fEndPoint = 0;
}

//--------------------------------------------------------------------------------
/**
* @brief デストラクタ
*/
//--------------------------------------------------------------------------------
CFBSpline::~CFBSpline(void)
{
}

//--------------------------------------------------------------------------------
/**
* @brief 始点、中点、終点セット
*/
//--------------------------------------------------------------------------------
void CFBSpline::SetPoints( float fStart, float fMiddle, float fEnd)
{
m_fStartPoint = fStart;
m_fMiddlePoint = fMiddle;
m_fEndPoint = fEnd;
}

//--------------------------------------------------------------------------------
/**
* @brief 計算更新
* @param [in] fTime : 0.0f 〜 1.0fを入れるの
*/
//--------------------------------------------------------------------------------
float CFBSpline::UpdatePosition( float fTime )
{
// 時間外は終点を返しておく
if( fTime > 1.0f )
{
return m_fEndPoint;
}

//計算結果,一時計算用
float Result;
float AnsA, AnsB, AnsC;

// この辺最適化したいね。
AnsA = ((1.0f - fTime)*(1.0f - fTime)) * m_fStartPoint;
AnsB = (( fTime * 2.0f) * (1.0f - fTime)) * m_fMiddlePoint;
AnsC = (fTime * fTime) * m_fEndPoint;

Result = AnsA + AnsB + AnsC;

return Result;
}


そしてヘッダ(.h)に
//---------------------------------------------------------------------------------------------------
/**
* @file CFBSpline.h
* @brief B-スプライン曲線計算クラス
* @Data 2009/01/12 Tottake
*/
//---------------------------------------------------------------------------------------------------
#ifndef ___CFBSPLINE_H___
#define ___CFBSPLINE_H___

class CFBSpline
{
public:
//コンストラクタ,デストラクタ
CFBSpline(void);
~CFBSpline(void);

public:
void SetPoints(float fStart, float fMiddle, float fEnd);
f32 UpdatePosition(float fTime);

float GetStartPoint(void) { return m_fStartPoint; };
float GetMiddlePoint(void){ return m_fMiddlePoint; };
float GetEndPoint(void) { return m_fEndPoint; };

private:
float m_fStartPoint; //始点
float m_fMiddlePoint; //中点
float m_fEndPoint; //終点
};

#endif /** ___CFBSPLINE_H___ **/


と、この長ったらしいコードをペタっと貼り付けましょう。

【効果】
B-Splineとは始点と中点と終点の間を良い感じに(笑)移動するものだと考えてください(詳しくは調べると良いです)

基本的な使い方はまずSetPointsに始点中点終点の三つをセットします。
次にUpdatePosition()を呼べば移動後の位置が返ってきます(移動量ではないです!)
UpdatePosition()の引数は時間です、0.0が始点で1.0が終点の位置なので、自分で適当に調整して加算してください。

【メモ】
最近の3Dゲームで使われる浮遊物とかはこの挙動が使われる事が多いらしいです(有名なのはホタルの挙動ですね。)
途中でランダムに中点とか終点を切り替えて良い感じに動かすらしいです。

あと明日仕事なのでそろそろ寝ないとヤバイ・・・お休みです。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

ゲーム創り隊@ど素人 更新情報

ゲーム創り隊@ど素人のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング