当前位置: 首页>>代码示例>>C++>>正文


C++ Matrix34::multiply方法代码示例

本文整理汇总了C++中Matrix34::multiply方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix34::multiply方法的具体用法?C++ Matrix34::multiply怎么用?C++ Matrix34::multiply使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Matrix34的用法示例。


在下文中一共展示了Matrix34::multiply方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: update

void Bullet::update( const Vector3& enemyPos ){
	//敵の方に向ける。
	Vector3 dir;
	Vector3 p = *mModel->position();
	Vector3 a = *mModel->angle();
	dir.setSub( enemyPos, *mModel->position() ); //自分から敵へ
	//Y軸角度はatan2( x, z )。
	double ty = atan2( dir.x, dir.z );
	//180度以上差があれば+-360度して逆回し
	if ( ty - a.y > 180.0 ){
		ty -= 360.0;
	}else if ( a.y - ty > 180.0 ){
		ty += 360.0;
	}
	//X軸角度はY/(X,Z)。
	double zxLength = sqrt( dir.x * dir.x + dir.z * dir.z );
	double tx = atan2( dir.y, zxLength );
	//X軸角度はそもそも範囲が(-90,90)で180度以上離れることはない。そのままで良い。
	double hx = mHomingX; //別名
	double hy = mHomingY; 
	//ホーミング範囲内ならそのものに
	if ( tx - a.x < hx && a.x - tx < hx ){
		a.x = tx;
	}else if ( tx < a.x ){
		a.x -= hx;
	}else{
		a.x += hx;
	}
	if ( ty - a.y < hy && a.y - ty < hy ){
		a.y = ty;
	}else if ( ty < a.y ){
		a.y -= hy;
	}else{
		a.y += hy;
	}
	//おもろいのでz回転つけとくか
	a.z += 2.0;
	//角度更新
	mModel->setAngle( a );
	//位置はこの方向の回転行列で(0,0,1)を変換して足してやる
	Vector3 v( 0.0, 0.0, mSpeed );
	Matrix34 m;
	m.setRotationY( a.y );
	m.rotateX( -a.x );
	m.multiply( &v, v );
	p += v;
	mModel->setPosition( p );
	++mCount;
	if ( mCount >= mLife ){
		mCount = -1;
	}
}
开发者ID:rainbow23,项目名称:GameLib2008,代码行数:52,代码来源:Bullet.cpp

示例2: draw

void Batch::draw( 
const Matrix44& pvm, 
const Matrix34& wm, 
const Vector3& lightVector,
const Vector3& lightColor,
const Vector3& ambient,
const Vector3& diffuseColor ) const {
	Framework f = Framework::instance();
	//テクスチャセット
	if ( mTexture ){
		mTexture->set();
	}else{
		f.setTexture( 0 ); //空のテクスチャ
	}
	//ブレンドモードセット
	f.setBlendMode( mBlendMode );
	//ブレンドモードによってZバッファ書き込みのフラグをOn,Off
	if ( mBlendMode == Framework::BLEND_OPAQUE ){
		f.enableDepthWrite( true );
	}else{
		f.enableDepthWrite( false );
	}
	//ZテストはいつもOn
	f.enableDepthTest( true );
	//頂点をワールドに変換
	int vertexNumber = mVertexBuffer->size();
	Vector3* wv = new Vector3[ vertexNumber ];
	for ( int i = 0;i < vertexNumber; ++i ){
		wm.multiply( &wv[ i ], *mVertexBuffer->position( i ) );
	}
	//頂点を最終変換
	double* fv = new double[ vertexNumber * 4 ]; //final vertices
	for ( int i = 0;i < vertexNumber; ++i ){
		pvm.multiply( &fv[ i * 4 ], wv[ i ] );
	}
	//法線をワールド座標に変換する。本当はワールド行列ではいけない。
	Matrix34 wmNormal = wm; //ワールド行列から移動を抜いたもの
	wmNormal.m03 = wmNormal.m13 = wmNormal.m23 = 0.0;
	//前もって頂点単位で色を決めておく
	unsigned* colors = new unsigned[ vertexNumber ];
	for ( int i = 0; i < vertexNumber; ++i ){
		Vector3 wm; //world normal
		wmNormal.multiply( &wm, mNormals[ i ] ); //ワールド座標に変換
		wm *= 1.f / wm.length(); //長さを1にして
		colors[ i ] = light( lightVector, lightColor, ambient, diffuseColor, wm );
	}
	int triangleNumber = mIndexBuffer->size() / 3;
	for ( int i = 0; i < triangleNumber; ++i ){
		unsigned i0 = mIndexBuffer->index( i * 3 + 0 );
		unsigned i1 = mIndexBuffer->index( i * 3 + 1 );
		unsigned i2 = mIndexBuffer->index( i * 3 + 2 );
		f.drawTriangle3DH(
			&fv[ i0 * 4 ],
			&fv[ i1 * 4 ],
			&fv[ i2 * 4 ],
			&mVertexBuffer->uv( i0 )->x,
			&mVertexBuffer->uv( i1 )->x,
			&mVertexBuffer->uv( i2 )->x,
			colors[ i0 ],
			colors[ i1 ],
			colors[ i2 ] );
	}
	SAFE_DELETE_ARRAY( wv );
	SAFE_DELETE_ARRAY( fv );
	SAFE_DELETE_ARRAY( colors );
}
开发者ID:rainbow23,项目名称:GameLib2008,代码行数:66,代码来源:Batch.cpp


注:本文中的Matrix34::multiply方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。