Example #1
0
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : col >>>
*-----------------------------------------------------------------------------------------*/
static	void	ComCol(void)
{
	if(meta->pTex == NULL)
	{
		sys.bError = true;
		sys_error("meta.pTex が NULL です。col の設定が Material { の外で行われています。"); return;
	}
	else
	{
		iMetaCount += PARAM_GET(&meta->pTex->afCol[1], &MetaText[iMetaCount]);	// r
		iMetaCount += PARAM_GET(&meta->pTex->afCol[2], &MetaText[iMetaCount]);	// g
		iMetaCount += PARAM_GET(&meta->pTex->afCol[3], &MetaText[iMetaCount]);	// b
		iMetaCount += PARAM_GET(&meta->pTex->afCol[0], &MetaText[iMetaCount]);	// a
	}
	iMetaCount++;
}
Example #2
0
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : Material >>>
|	入力	bUV = false : uv のチェックを行わない(法線マップを作成する際に使用)
*-----------------------------------------------------------------------------------------*/
static	void	ComMaterial(BOOL bUV)
{
	float	a;

	iMetaCount	   += PARAM_GET(&a,	&MetaText[iMetaCount]);
	meta->iMatCount	= (int)a;				// マテリアル総数
	iMetaCount	   += 1;					// "{" 分移動
											// テクスチャーデータの書き込み位置を設定
	meta->pTex		= &meta->atex[meta->iMatID];
	//--- 各パラメータ抽出 ------------------------------------------
	while(MetaText[iMetaCount] != '}')
	{										// 改行を見つけたら、次へすすむ
		char	str[512];

		if(MetaText[iMetaCount]	== '\r'	&& MetaText[iMetaCount + 1]	== '\n')
		{
			meta->iMatID++;					// マテリアル読み込み終了なので、次へ進める
											// テクスチャーデータの書き込み位置を設定
			meta->pTex  = &meta->atex[meta->iMatID];

			iMetaCount += 2;
			//--- マテリアル名を得る --------------------------------
			int		i  = GET_STRING(str, &MetaText[iMetaCount]);

			if(meta_obj_name_func != NULL)	// オブジェ名を外部へ渡す
			{
				void(*func)(int iNum, char *str);
				func = (void(*)(int iNum, char *str))meta_obj_name_func;
				(*func)(meta->iMatID, str);
			}
			iMetaCount += i;
			//-------------------------------------------------------
		}

		//--- コマンドチェック --------------------------------------
		BOOL	bRet = CommandCheck(bUV);

		//--- 半角・全角チェック ------------------------------------
		if(!bRet)
		{
			//char	str[512];				// ダブルクォーテーション中に コマンドが入っているのを防ぐため、こうする。
			int		i   = GET_STRING(str, &MetaText[iMetaCount]);
			iMetaCount += i;
			if(i ==	0)
			{
				if(ISKANJI(MetaText[iMetaCount])){ iMetaCount += 2;}	// 全角
				else							 { iMetaCount += 1;}	// 半角
			}
		}
	}
	iMetaCount++;
	meta->pTex = NULL;						// テクスチャーデータの書き込み位置をクリアー
}
Example #3
0
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : vertex	>>>
*-----------------------------------------------------------------------------------------*/
static	void	ComVertex(void)
{
	float	fAns;							// 頂点数
	iMetaCount += PARAM_GET(&fAns, &MetaText[iMetaCount]);
	iMetaCount += 3;						// "{" と改行分を移動させる

	// ベース設定
	meta->iPosBase = meta->iPosCount;

	//--- 頂点データを保存 ------------------------------------------
	VEC3	*p = &meta->avecPos[meta->iPosCount];
	for(int	i =	0; i < (int)fAns; i++, p++)
	{
		iMetaCount += PARAM_GET(&p->x, &MetaText[iMetaCount]);
		iMetaCount += PARAM_GET(&p->y, &MetaText[iMetaCount]);
		iMetaCount += PARAM_GET(&p->z, &MetaText[iMetaCount]);
		p->z	   *= -1;
		*p		   *= SCALE;				// スケールを合わせる
		iMetaCount += 2;					// 改行を進める

		meta->iPosCount++;					// 登録数増やす
	}
}
Example #4
0
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : dif, amb, emi,	spc, power >>>
|	入力	iType =	0 :	dif、1 : amb、2	: emi、3 : spc、4 :	power
*-----------------------------------------------------------------------------------------*/
static	void	ComDifAmbEmiSpcPower(int iType)
{
	if(meta->pTex == NULL)
	{
		sys.bError = true;
		sys_error("meta.pTex が NULL です。色の設定が Material { の外で行われています。");
		return;
	}
	else
	{										// ポインタを使い無理やり値を代入
		float	*f  = &meta->pTex->fDif;
		iMetaCount += PARAM_GET(&f[iType], &MetaText[iMetaCount]);
		iMetaCount++;						// } を進める
	}
}
int fixedwing_attitude_control_att_params_update()
{
	PARAM_GET (fixedwing_attitude_control_att_parameter_handles.roll_p, &(fixedwing_attitude_control_att_parameters.roll_p));
	PARAM_GET (fixedwing_attitude_control_att_parameter_handles.rollrate_lim, &(fixedwing_attitude_control_att_parameters.rollrate_lim));
	PARAM_GET (fixedwing_attitude_control_att_parameter_handles.pitch_p, &(fixedwing_attitude_control_att_parameters.pitch_p));
	PARAM_GET (fixedwing_attitude_control_att_parameter_handles.pitchrate_lim, &(fixedwing_attitude_control_att_parameters.pitchrate_lim));
	PARAM_GET (fixedwing_attitude_control_att_parameter_handles.yawrate_lim, &(fixedwing_attitude_control_att_parameters.yawrate_lim));
	PARAM_GET (fixedwing_attitude_control_att_parameter_handles.pitch_roll_compensation_p, &(fixedwing_attitude_control_att_parameters.pitch_roll_compensation_p));

	return 0;
}
int multirotor_rate_control_params_update()
{
	PARAM_GET (multirotor_rate_control_parameter_handles.yawrate_p, &(multirotor_rate_control_parameters.yawrate_p));
	PARAM_GET (multirotor_rate_control_parameter_handles.yawrate_i, &(multirotor_rate_control_parameters.yawrate_i));
	PARAM_GET (multirotor_rate_control_parameter_handles.yawrate_d, &(multirotor_rate_control_parameters.yawrate_d));
	//PARAM_GET (multirotor_rate_control_parameter_handles.yawrate_awu, &(multirotor_rate_control_parameters.yawrate_awu));
	//PARAM_GET (multirotor_rate_control_parameter_handles.yawrate_lim, &(multirotor_rate_control_parameters.yawrate_lim));

	PARAM_GET (multirotor_rate_control_parameter_handles.attrate_p, &(multirotor_rate_control_parameters.attrate_p));
	PARAM_GET (multirotor_rate_control_parameter_handles.attrate_i, &(multirotor_rate_control_parameters.attrate_i));
	PARAM_GET (multirotor_rate_control_parameter_handles.attrate_d, &(multirotor_rate_control_parameters.attrate_d));
	//PARAM_GET (multirotor_rate_control_parameter_handles.attrate_awu, &(multirotor_rate_control_parameters.attrate_awu));
	//PARAM_GET (multirotor_rate_control_parameter_handles.attrate_lim, &(multirotor_rate_control_parameters.attrate_lim));

	return 0;
}
int multirotor_attitude_control_params_update()
{
	PARAM_GET (multirotor_attitude_control_parameter_handles.yaw_p, &(multirotor_attitude_control_parameters.yaw_p));
	PARAM_GET (multirotor_attitude_control_parameter_handles.yaw_i, &(multirotor_attitude_control_parameters.yaw_i));
	PARAM_GET (multirotor_attitude_control_parameter_handles.yaw_d, &(multirotor_attitude_control_parameters.yaw_d));
	//PARAM_GET (multirotor_attitude_control_parameter_handles.yaw_awu, &(multirotor_attitude_control_parameters.yaw_awu));
	//PARAM_GET (multirotor_attitude_control_parameter_handles.yaw_lim, &(multirotor_attitude_control_parameters.yaw_lim));

	PARAM_GET (multirotor_attitude_control_parameter_handles.att_p, &(multirotor_attitude_control_parameters.att_p));
	PARAM_GET (multirotor_attitude_control_parameter_handles.att_i, &(multirotor_attitude_control_parameters.att_i));
	PARAM_GET (multirotor_attitude_control_parameter_handles.att_d, &(multirotor_attitude_control_parameters.att_d));
	//PARAM_GET (multirotor_attitude_control_parameter_handles.att_awu, &(multirotor_attitude_control_parameters.att_awu));
	//PARAM_GET (multirotor_attitude_control_parameter_handles.att_lim, &(multirotor_attitude_control_parameters.att_lim));

	//PARAM_GET (multirotor_attitude_control_parameter_handles.att_xoff, &(multirotor_attitude_control_parameters.att_xoff));
	//PARAM_GET (multirotor_attitude_control_parameter_handles.att_yoff, &(multirotor_attitude_control_parameters.att_yoff));

	return 0;
}
Example #8
0
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : facet	>>>					※ スムージングの値
*-----------------------------------------------------------------------------------------*/
static	void	ComFacet(void)
{
	iMetaCount   += PARAM_GET(&meta->fSmooth, &MetaText[iMetaCount]);
	meta->fSmooth = R(meta->fSmooth);
}
Example #9
0
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : mirror	>>>
*-----------------------------------------------------------------------------------------*/
static	void	ComMirror(void)
{
	float	fAns;
	iMetaCount		 += PARAM_GET(&fAns, &MetaText[iMetaCount]);
	meta->iMirrorType = (int)fAns;
}
Example #10
0
/*-----------------------------------------------------------------------------------------*
| <<< コマンド : face >>>
|	入力	bUV = false : uv のチェックを行わない(法線マップを作成する際に使用)
*-----------------------------------------------------------------------------------------*/
static	void	ComFace(BOOL bUV)
{
// faceチャンクから表面数を読み取り、その分だけ面を作成する
// V(0 1 3 2) ← MvtSub[0],	MvtSub[1], MvtSub[3], MvtSub[2]	の頂点情報からなる面である
// meta[メタセコファイル番号].face[登録表面数]

	float		fFaceCount;					// 面数
	iMetaCount += PARAM_GET(&fFaceCount, &MetaText[iMetaCount]);

	iMetaCount += 3;						// "{" と改行を移動させる

	float	a, afIndex[4], afUV[8];

	afIndex[3] = 0;
	//--- 表面データを保存 ------------------------------------------
	for(int	i =	0; i < (int)fFaceCount; i++)
	{
		//--- 頂点数 ------------------------------------------------
		float	fVertexCount;
		iMetaCount += PARAM_GET(&fVertexCount, &MetaText[iMetaCount]);

		//--- V() ---------------------------------------------------
		iMetaCount +=2;						// V( を進める
											// 総面数を計算、四角形は2面となる
		int	iPoly;
		if(fVertexCount	== 4){ iPoly = 2;}
		else				 { iPoly = 1;}
		
		// 頂点番号を得る
		for(int j =	0; j < (int)fVertexCount; j++)
		{
			iMetaCount += PARAM_GET(&afIndex[j], &MetaText[iMetaCount]);
			afIndex[j] += meta->iPosBase;
		}
		iMetaCount++;						// カッコ閉じる

		//--- M() ---------------------------------------------------
		SPACE_DEL(MetaText,	&iMetaCount);
		uint	uiMat = 0;
		if(MetaText[iMetaCount]	== 'M')
		{
			iMetaCount += 2;				// 材質情報
			iMetaCount += PARAM_GET(&a, &MetaText[iMetaCount]);
			uiMat	    = (int)a;
			iMetaCount++;					// カッコ閉じる
		}

		//--- UV() --------------------------------------------------
		BOOL	bUV = FALSE;
		SPACE_DEL(MetaText,	&iMetaCount);
		if(MetaText[iMetaCount]	== 'U' && MetaText[iMetaCount +	1] == 'V')
		{
			iMetaCount += 3;
			for(int j =	0; j < (int)fVertexCount * 2; j++)
			{
				iMetaCount += PARAM_GET(&afUV[j], &MetaText[iMetaCount]);
				//while(afUV[j] > 1){ afUV[j] -= 1;}	// UV は 0 〜 1 に丸める
			}
			iMetaCount += 3;
			bUV         = TRUE;
		}
		else
		{
			iMetaCount += 2;
		}

		//--- バッファ登録 ------------------------------------------
		FaceSub(afIndex, afUV, uiMat, bUV, iPoly == 2, 0);
	
		if(meta->iMirrorType)
		{
			FaceSub(afIndex, afUV, uiMat, bUV, iPoly == 2, meta->iMirrorType);
		}

		//--- ポリ数を加算 ------------------------------------------
		if(meta->iMirrorType){ meta->iPolyCount += iPoly * 2;}
		else			     { meta->iPolyCount += iPoly;}
	}
	iMetaCount		 +=	3;
	meta->iMirrorType =	0;
}