コード例 #1
0
	void CEditDirctionLine::Render() const
	{
		if( m_vEnd.x == m_vStart.x )
			return;

		size_t PointNum = 2 + m_nWeight * 4 + 4;

		VerColor3D* pVB;
		RenderState* pRS;
		CMatrix* pMatrix = CGraphic::GetInst()->GetRenderStack( RS_DEFAULT, NULL, NULL, PT_LINELIST, 
			PointNum, PointNum/2, VerColor3D::Format, sizeof(VerColor3D), 
			(void**)&pVB, NULL, (void**)&pRS );
		pRS->m_LightEnable = FALSE;
		pMatrix->Identity();

		pVB[0].p = m_vStart;
		pVB[1].p = m_vEnd;
		pVB[0].diffuse = pVB[1].diffuse = m_dwColor;

		int startIndex = 0;
		for ( int m = 1; m <= m_nWeight; ++m )
		{
			CVector3f temp = CVector3f(0.0f, 0.0f, m * fStep);

			pVB[startIndex].p = m_vStart + temp;
			pVB[startIndex].diffuse = m_dwColor;
			++startIndex;

			pVB[startIndex].p = m_vEnd + temp;
			pVB[startIndex].diffuse = m_dwColor;
			++startIndex;

			temp = CVector3f(0.0f, 0.0f, -m * fStep);

			pVB[startIndex].p = m_vStart + temp;
			pVB[startIndex].diffuse = m_dwColor;
			++startIndex;

			pVB[startIndex].p = m_vEnd + temp;
			pVB[startIndex].diffuse = m_dwColor;
			++startIndex;
		}

		pVB[startIndex].p = m_vStart;
		pVB[startIndex+1].p = m_vEnd;
		pVB[startIndex].diffuse = pVB[startIndex+1].diffuse = m_dwColor;


		pVB[startIndex+2].p			= m_vEnd;
		pVB[startIndex+2].diffuse	= m_dwColor;
		pVB[startIndex+3].p			= m_vEnd + CVector3f(-8.0f, 5.0f, 2.0f);
		pVB[startIndex+3].diffuse	= m_dwColor;

		pVB[startIndex+4].p			= m_vEnd;
		pVB[startIndex+4].diffuse   = m_dwColor;
		pVB[startIndex+5].p			= m_vEnd + CVector3f(-8.0f, -5.0f, 2.0f);
		pVB[startIndex+5].diffuse   = m_dwColor;

		pMatrix->Identity(); 
	}
コード例 #2
0
ファイル: CRenderAudio.cpp プロジェクト: LaoZhongGu/RushGame
//------------------------------------------------------------------------------
CRenderAudio::CRenderAudio(const CRegionAI& AudioInfo,const SString& AudioName,ILogicHandler* pHandler) 
: CRenderNode(pHandler),m_uUnitSetIndex(0)
{
	m_pAEmitter = GetAudioModule()->CreateAudioEmitter();
	m_pAEmitter->SetAutoStop(true);

	m_uUnitSetIndex		= AudioInfo.SetIndex;
	SetPosition(AudioInfo.cX,AudioInfo.cY,AudioInfo.cZ);
	m_bPlayNotRepeat	= AudioInfo.bPlayNotRepeat;
	m_uPlayTimeLenMin	= AudioInfo.uPlayTimeLenMin;
	m_uPlayTimeLenMax	= AudioInfo.uPlayTimeLenMax;
	m_uPlayIntervalMin	= AudioInfo.uPlayIntervalMin;
	m_uPlayIntervalMax	= AudioInfo.uPlayIntervalMax;

	m_uCurRandomPlayTime = GetRandomValue(m_uPlayTimeLenMin,  m_uPlayTimeLenMax);
	m_uCurRandomInterval = GetRandomValue(m_uPlayIntervalMin, m_uPlayIntervalMax);

	m_strAudioName	= AudioName;

	CVector3f mMin = CVector3f(-30.0f, 0.0f,  -30.0f);
	CVector3f mMax = CVector3f( 30.0f, 60.0f,  30.0f);
	float fRange = eGridSpan * AudioRange;

	mMin = mMin  - CVector3f(fRange, fRange, fRange);
	mMax = mMax  + CVector3f(fRange, fRange, fRange);

	m_OrgAABB.setExtents(mMin, mMax);
	UpdateBox();

	m_pAEmitter->SetPosition(GetPosition());
	m_bNeedPlayBegin     = true;
	m_bNeedIntervalBegin = true;
	m_bPlayError		 = false;
}
コード例 #3
0
void SetupLights(void)
{
	g_p_LightManager = new CLightManager();

	g_p_LightManager->setMaxLights(::g_ShaderUniformVariables.MAXLIGHTS);

	g_p_LightManager->CreateBasicOpenGLLights(true);

	g_p_LightManager->GetLightPointer(0)->setLightType(CLight::POINT);
	g_p_LightManager->GetLightPointer(0)->position = CVector3f(224.0f, 328.0f, 244.0f);
	g_p_LightManager->GetLightPointer(0)->bIsEnabled = true;

	g_p_LightManager->GetLightPointer(1)->setLightType(CLight::POINT);
	g_p_LightManager->GetLightPointer(1)->position = CVector3f(0.0f, 10.0f, 0.0f);
	g_p_LightManager->GetLightPointer(1)->ambientColour = CVector3f(0.0f, 0.0f, 1.0f);
	
	g_p_LightManager->GetLightPointer(1)->bIsEnabled = true;


	//for (unsigned int i = 0; i < vecLightsInfo.size(); i++)
	//{
	//	g_p_LightManager->GetLightPointer(i)->setLightType(vecLightsInfo[i].type);
	//	g_p_LightManager->GetLightPointer(i)->position = vecLightsInfo[i].pos;
	//	g_p_LightManager->GetLightPointer(i)->bIsEnabled = true;
	//	g_p_LightManager->GetLightPointer(i)->diffuseColour.x = vecLightsInfo[i].col.x;
	//	g_p_LightManager->GetLightPointer(i)->diffuseColour.y = vecLightsInfo[i].col.y;
	//	g_p_LightManager->GetLightPointer(i)->diffuseColour.z = vecLightsInfo[i].col.z;
	//	g_p_LightManager->GetLightPointer(i)->constantAttenuation = vecLightsInfo[i].constAtten;
	//	g_p_LightManager->GetLightPointer(i)->linearAttenuation = vecLightsInfo[i].linAtten;
	//	g_p_LightManager->GetLightPointer(i)->quadraticAttenuation = vecLightsInfo[i].quadAtten;
	//	g_p_LightManager->GetLightPointer(i)->calculateRangeFromAttenuation(vecLightsInfo[i].attenRangeStart, vecLightsInfo[i].attenRangeEnd);
	//}

	return;
}
コード例 #4
0
ファイル: Square.cpp プロジェクト: LaoZhongGu/RushGame
	void CSquare::SetDepth(float fDepth)
	{
		m_fSizeInDepth = fDepth;
		m_vPos[0] = CVector3f(-m_fSizeInWidth*0.5f, 0.0f, -m_fSizeInDepth*0.5f);
		m_vPos[1] = CVector3f(-m_fSizeInWidth*0.5f, 0.0f, m_fSizeInDepth*0.5f);
		m_vPos[2] = CVector3f(m_fSizeInWidth*0.5f, 0.0f, -m_fSizeInDepth*0.5f);
		m_vPos[3] = CVector3f(m_fSizeInWidth*0.5f, 0.0f, m_fSizeInDepth*0.5f);
	}
コード例 #5
0
CtrlState CGUICameraCtrller::_DoCameraCtrl( uint32 uCurTime,CCamera* pCamera, CSceneQuery* pQuery )
{
	if ( m_NeedReQuery )
	{
		if ( m_fWearAlready < m_fWearTime )
		{
			m_bInMove = true;
			float fDeltaTime = float(uCurTime - m_uCurTime) * 0.001f;
			m_fWearAlready += fDeltaTime;
			m_fWearAlready = m_fWearAlready < m_fWearTime ? m_fWearAlready : m_fWearTime; 
			float temp_scale, temp_xdis, temp_ydis, temp_zdis;
			if (m_bNormal)
			{
				// 从近景到远景的调整
				// 调整X
				temp_scale = 1.0f + (GUI_CAM_XSCALE_MAX - 1.0f) * m_fWearAlready / m_fWearTime;
				temp_xdis = (m_fCurXDis - m_LookAt.x) * temp_scale + m_LookAt.x;
				// 调整Y
				temp_scale = 1.0f + (GUI_CAM_YSCALE_MAX - 1.0f) * m_fWearAlready / m_fWearTime;
				temp_ydis = (m_fCurYDis - m_LookAt.y) * temp_scale + m_LookAt.y;
				// 调整Z
				temp_scale = 1.0f + (GUI_CAM_ZSCALE_MAX - 1.0f) *  m_fWearAlready / m_fWearTime;
				temp_zdis = (m_fCurZDis - m_LookAt.z) * temp_scale + m_LookAt.z;
				pCamera->SetPosition( CVector3f( temp_xdis, temp_ydis, temp_zdis ) );
			}
			else
			{
				// 从远景到近景
				// 调整X
				temp_scale = 1.0f + (GUI_CAM_XSCALE_MAX - 1.0f) * m_fWearAlready / m_fWearTime;
				temp_xdis = (m_fCurXDis - m_LookAt.x) / temp_scale + m_LookAt.x;
				// 调整Y
				temp_scale = 1.0f + (GUI_CAM_YSCALE_MAX - 1.0f) * m_fWearAlready / m_fWearTime;
				temp_ydis = (m_fCurYDis - m_LookAt.y) / temp_scale + m_LookAt.y;
				// 调整Z
				temp_scale = 1.0f + (GUI_CAM_ZSCALE_MAX - 1.0f) *  m_fWearAlready / m_fWearTime;
				temp_zdis = (m_fCurZDis - m_LookAt.z) / temp_scale + m_LookAt.z;
				pCamera->SetPosition( CVector3f( temp_xdis, temp_ydis, temp_zdis ) );
			}

			if ( !(m_fWearAlready < m_fWearTime) )
			{
				// 完成远近景切换
				m_fCurXDis = temp_xdis;
				m_fCurYDis = temp_ydis;
				m_fCurZDis = temp_zdis;
				m_bNormal = !m_bNormal;	
				m_NeedReQuery = false;
				m_fWearAlready = 0.0f;
				m_bInMove = false;
			}
		}
	}

	return CS_CTRL;
}
コード例 #6
0
void CBouncingBall::CollisionResponse()
{
	float convergenceThreshold = 0.5f;
	if (m_velocity.Length() > convergenceThreshold)
		m_velocity = CVector3f(m_velocity.x, -m_velocity.y * m_coefficientOfRestitution, m_velocity.z);
	else {
		m_velocity = CVector3f(0, 0, 0);
		m_acceleration = CVector3f(0, 0, 0);
		m_position = CVector3f(m_position.x, m_radius, m_position.z);
		m_isActive = false;
	}
}
コード例 #7
0
ファイル: ToonixGrid3D.cpp プロジェクト: benmalartre/Toonix
// place a triangle mesh in the grid
void TXGrid3D::PlaceIntoGrid(TXGeometry *geom) 
{
	m_min = CVector3f(FLT_MAX, FLT_MAX, FLT_MAX);
	m_max = CVector3f(-FLT_MAX, -FLT_MAX, -FLT_MAX);

	// compute bounding box
	int totalTriangles = 0;

	TXTriangle* tp;
	CVector3f p;

	for(ULONG t=0;t<geom->m_triangles.size();t++)
	{
		tp = geom->m_triangles[t];
		totalTriangles++;
		for(int i=0;i<3;i++)
		{
			p = tp->m_v[i]->m_pos;
			m_min.Set(
				MIN(m_min.GetX(),p.GetX()),
				MIN(m_min.GetY(),p.GetY()),
				MIN(m_min.GetZ(),p.GetZ())
			);
			m_max.Set(MAX(m_max.GetX(),p.GetX()),
				MAX(m_max.GetY(),p.GetY()),
				MAX(m_max.GetZ(),p.GetZ())
			);
		}
	}

	Application().LogMessage(L"Total Triangles : "+(CString)totalTriangles);

	// select grid size
	int grid_size;
	if (totalTriangles <= 10000) grid_size = 10;
	else if (totalTriangles <= 40000) grid_size = 15;
	else grid_size = 20;

	// create grid
	CreateGrid(grid_size);

	m_xstep = (m_max.GetX() - m_min.GetX()) / m_size;
	m_ystep = (m_max.GetY() - m_min.GetY()) / m_size;
	m_zstep = (m_max.GetZ() - m_min.GetZ()) / m_size;

	for(ULONG t=0;t<geom->m_triangles.size();t++)
	{
		PlaceTriangle(geom->m_triangles[t]);
	}
	 
}
コード例 #8
0
ファイル: CFlareSprite.cpp プロジェクト: LaoZhongGu/RushGame
CFlareSpriteProp::CFlareSpriteProp( UINT ID, IEffectClassDesc* pEffectClassDesc )
	: CEffectUnitProp( ID, pEffectClassDesc )
{
	m_vecRotate		= CVector3f( 0, 0, 0 );
	m_vecNormal		= CVector3f( 0, 0, -1 );
	m_fMaxAngle		= 0.785f;
	m_byMinAlpha	= 0x00;
	m_byMaxAlpha	= 0xff;
	m_fMinSize		= 0;
	m_fMaxSize		= 10;
	m_eFaceType		= SPRF_CAMERA;
	m_eBlendModel	= SPRB_ADD;
	m_eZTest		= Z_TESTONLY;
	m_bLightEnable	= FALSE;
}
コード例 #9
0
bool CCollisionBox::IsColliding(CCollisionBox& other)
{
	CVector3f _min(CVector3f(m_position.x - (1 * m_scale.x), m_position.y - (1 * m_scale.y), m_position.z - (1 * m_scale.z)));
	CVector3f _max(CVector3f(m_position.x + (1 * m_scale.x), m_position.y + (1 * m_scale.y), m_position.z + (1 * m_scale.z)));

	CVector3f oMin(CVector3f(other.GetPosition().x - (1 * other.GetScale().x), other.GetPosition().y - (1 *other.GetScale().y), other.GetPosition().z - (1 * other.GetScale().z)));
	CVector3f oMax(CVector3f(other.GetPosition().x + (1 * other.GetScale().x), other.GetPosition().y + (1 *other.GetScale().y), other.GetPosition().z + (1 * other.GetScale().z)));

	return(_min.x > oMin.x &&
		_min.x < oMax.x &&
		_max.y > oMin.y &&
		_min.y < oMax.y &&
		_max.z > oMin.z &&
		_min.z < oMax.z);
}
コード例 #10
0
ファイル: SQRChart.cpp プロジェクト: LaoZhongGu/RushGame
void SQRChartLineGraph::OnRender()
{
	if(GetVisible() == false || Empty())
		return;

	// 绘制常数计算
	CFRect wndRect;
	m_phost->GetWndRect(wndRect);
	const float height = wndRect.bottom - wndRect.top;
	//const float zoomSize = m_phost->m_hWnd->m_pGUI->GetZoomSize();
	const PointGroup default_pg = {CVector3f(0.0f, 0.0f, 0.0f), GetColor()};

	// 绘制数据准备
	UIVector<PointGroup> pgList(Count(), default_pg);
	for(size_t i = 0; i < Count(); i++)
	{
		pgList[i].vPoint.x = (wndRect.left + i * m_spanX + m_deltaX);// * zoomSize;
		pgList[i].vPoint.y = (wndRect.top  + height - m_data[i] * m_zoomY - m_deltaY);// * zoomSize;
	}

	// 数据点的绘制
	for(UIVector<PointGroup>::const_iterator it = pgList.begin(); it != pgList.end(); ++it)
	{
		CFRect rect(it->vPoint.x - 2, it->vPoint.y - 2, it->vPoint.x + 2, it->vPoint.y + 2);
		m_phost->GetGraphic()->DrawRect(rect, m_color, NULL);
	}

	// 线的绘制
	if(pgList.size() > 1)
	{
		m_phost->GetGraphic()->DrawLine(&(pgList[0]), static_cast<int32>(pgList.size()), true, m_phost->GetWndHandle()->m_eRS );
	}
}
コード例 #11
0
ファイル: CVector3f.cpp プロジェクト: songtianyi/motionLib
CVector3f CVector3f::normalized() const
{
    FLOAT squmrt = sqrt((FLOAT)x*x+(FLOAT)y*y+(FLOAT)z*z);
    if( squmrt )
        return CVector3f( (FLOAT)x/squmrt,(FLOAT)y/squmrt,(FLOAT)z/squmrt);
    return *this;
}
コード例 #12
0
ファイル: CEditModel.cpp プロジェクト: LaoZhongGu/RushGame
void CEditModel::RenderBone(void)
{
	if( !GetSketetalFrame() || !GetAnimateGroup()||!GetAnimateGroup()->GetAniById( m_RenderMatrix.m_CurAnimate ))
		return;
	RenderParam	RP;
	//大小
	RP.m_RS.m_Material.Ambient = CColor4(0.5,0.5,0.5,1);//MOD
	RP.m_RS.m_Material.Diffuse	= CColor4::Green;//ADD
	RP.m_RS.m_LightEnable		= true;

	CMatrix tScaleMat;
	CMatrix	tRotateMat;

	CRenderPipeline::GetInst()->SetLight(0, CMainWindowTarget::GetInst()->GetGroup()->GetLightSystem()->GetGlobalLight()->GetLightStruct());//ADD

	for( UINT i = 1; i < m_RenderMatrix.GetSkeletalCount(); i++ )
	{
		if(!m_RenderMatrix.m_pMatrixUnit[i])
			continue;
		tRotateMat.SetRotateZ(-CMath::half_pi);
		tScaleMat.SetScale(CVector3f(m_SkeletalPos[i].m_Scale.x,m_SkeletalPos[i].m_Scale.y,m_SkeletalPos[i].m_Scale.z));
		RP.m_Mat = tScaleMat*tRotateMat*m_RenderMatrix.m_pMatrixUnit[i]->GetMATRIX();
		if( m_SkeletalPos[i].m_IsSelected )
			RP.m_RS.m_Material.Diffuse	= CColor4::Red;//MOD
		else
			RP.m_RS.m_Material.Diffuse	= CColor4::Green;//MOD
		CRenderPipeline::GetInst()->Render( &CEditorCore::TP_RO_BONE, &RP );
	}
}
コード例 #13
0
ファイル: CmdMoveObject.cpp プロジェクト: LaoZhongGu/RushGame
	void CCmdMoveObject::_UnExecute()
	{
		// back to stationary state
		COpearationLog::GetInst()->WriteOperationLog("UNDO LShift Or C move object");

		

		CTerrainMesh * pTerrainMesh = CMapEditApp::GetInst()->GetEditingMesh();

		CMapEditObject * pModel = m_diff.pObject->GetModelGroup()->GetSelfPresentation(0);

		pModel->SetGroupOffset(CVector3f(0.0f,0.0f,0.0f));

		// write center image info
		int nCenterGridIndex = pModel->GetUserOffsetAdjustedGridIndex(m_diff.nCenterGridIndex);
		SGrid & gridCenter = pTerrainMesh->GetGrid(nCenterGridIndex);
		gridCenter.vecCenterObjects.push_back(m_diff.pObject);

		// assumption: no pre active object exists
		CToolSetModel::GetInst()->RemoveActiveObject(m_diff.pObject);
		//CEditStateOpertiaonMgr::GetInst()->SetIsCalObjectWorOffset(true);
		m_diff.pObject->SetCenterGridIndex(m_diff.nCenterGridIndex);
		m_diff.pObject->GetModelGroup()->SetEditState(sqr::EES_PLACED);
		//CEditStateOpertiaonMgr::GetInst()->SetIsCalObjectWorOffset(false);
	}
コード例 #14
0
int CToolSetTileBlock::GetExactGridIndex(const int nGridIndex)
{
	CTerrainMesh * pTerrain = CMapEditApp::GetInst()->GetEditingMesh();

	SGrid &hotgrid = pTerrain->GetGrid(nGridIndex);
	CVector3f girdCenter = hotgrid.vCenter;

	CTObject * p = NULL;
	CVector3f v = CVector3f(0.0f, 0.0f, 0.0f);
	DWORD dwGridIndexHot = CPicker::GetInst()->GetPickPos(&p,&v);
	int nWhichSubIndex = 0;

	if ( v.x < girdCenter.x )
	{
		if ( v.z < girdCenter.z )
			nWhichSubIndex = 0;//0;
		else
			nWhichSubIndex = 2;//2;
	}
	else
	{
		if ( v.z < girdCenter.z )
			nWhichSubIndex = 1;//1;
		else
			nWhichSubIndex = 3;//3;
	}

	map<int, int>::iterator iter = hotgrid.subGridIndex.begin();

	for ( int i = 0 ; i < nWhichSubIndex; ++i )
		++iter;

	return iter->first;
}
コード例 #15
0
ファイル: FileIO.cpp プロジェクト: IvanHakstok/BaboViolent2
CVector3f FileIO::getVector3f()
{
	float x,y,z;
	x = getFloat();
	y = getFloat();
	z = getFloat();
	return CVector3f(x,y,z);
}
コード例 #16
0
void CGUICameraCtrller::SwitchCamState()
{
	if ( m_bInMove )	// 当前摄像机还在移动状态
	{
		//立即完成当前移动
		CCamera* pCamera = (CCamera*)m_pCtrlNode;
		if (!pCamera)
			return;

		float temp_xdis, temp_ydis, temp_zdis;
		if (m_bNormal)
		{
			// 从近景到远景的调整
			temp_xdis = (m_fCurXDis - m_LookAt.x) * GUI_CAM_XSCALE_MAX + m_LookAt.x;
			temp_ydis = (m_fCurYDis - m_LookAt.y) * GUI_CAM_YSCALE_MAX + m_LookAt.y;
			temp_zdis = (m_fCurZDis - m_LookAt.z) * GUI_CAM_ZSCALE_MAX + m_LookAt.z;

			pCamera->SetPosition( CVector3f( temp_xdis, temp_ydis, temp_zdis ) );
		}
		else
		{
			// 从远景到近景
			temp_xdis = (m_fCurXDis - m_LookAt.x) / GUI_CAM_XSCALE_MAX + m_LookAt.x;
			temp_ydis = (m_fCurYDis - m_LookAt.y) / GUI_CAM_YSCALE_MAX + m_LookAt.y;
			temp_zdis = (m_fCurZDis - m_LookAt.z) / GUI_CAM_ZSCALE_MAX + m_LookAt.z;

			pCamera->SetPosition( CVector3f( temp_xdis, temp_ydis, temp_zdis ) );
		}

		m_fCurXDis = temp_xdis;
		m_fCurYDis = temp_ydis;
		m_fCurZDis = temp_zdis;

		m_bNormal = !m_bNormal;	
		m_NeedReQuery = false;
		m_fWearAlready = 0.0f;
		m_bInMove = false;
	}

	// switch
	m_NeedReQuery = true;
	m_fWearAlready = 0.0f;
	m_uCurTime = (float)((uint32)GetProcessTime());
}
コード例 #17
0
ファイル: CEditEllipse.cpp プロジェクト: LaoZhongGu/RushGame
	CEditEllipse::CEditEllipse()
	{
		m_vCenter = CVector3f(0.0f, 0.0f, 0.0f);
		m_fRadiusX = m_fRadiusY = 1.0f;
		m_fSlices = 20;
		m_dwColor = 0xffff0000;

		m_fRadiusX = 40;
		m_fRadiusY = 20;
	}
コード例 #18
0
ファイル: CEditEllipse.cpp プロジェクト: LaoZhongGu/RushGame
	/*
	x = x0 + radiusX * cos(a)
	y = y0 + radiusY * sin(a)
	*/
	void CEditEllipse::CreateEllipsePoints()
	{
		m_spherePoints.clear();
		m_spherePoints.resize(m_fSlices+1);

		float nDegree = 0.0f, fRadian = 0.0f;
		float nAverage = 360.0f / m_fSlices;
		CVector3f point = CVector3f(0.0f, 0.0f, 0.0f);
		size_t m = 0;
		for ( m = 0; m < m_fSlices; ++m )
		{
			nDegree = m * nAverage;
			fRadian = fRadiaValue * nDegree;

			point = m_vCenter + CVector3f(m_fRadiusX *  CMath::Cos(fRadian), 0.0f, m_fRadiusY * CMath::Sin(fRadian));
			m_spherePoints[m] = point;
		}
		m_spherePoints[m] = m_spherePoints[0];
	}
コード例 #19
0
ファイル: ToonixDualMesh.cpp プロジェクト: benmalartre/Toonix
void TXOctree::Split() 
{
	size_t esz = m_edges.size();

	if (esz <= MAX_EDGE_NUMBER || 
	  (esz <= 2*MAX_EDGE_NUMBER && m_depth > 3) ||
	  (esz <= 3*MAX_EDGE_NUMBER && m_depth > 4) ||
	  m_depth > 6 ) 
	{
		m_isLeaf = true;
		return;
	}

	m_isLeaf = false;

	double xx[] = {m_min.GetX(), 0.5*(m_min.GetX()+m_max.GetX()), m_max.GetX()};
	double yy[] = {m_min.GetY(), 0.5*(m_min.GetY()+m_max.GetY()), m_max.GetY()};
	double zz[] = {m_min.GetZ(), 0.5*(m_min.GetZ()+m_max.GetZ()), m_max.GetZ()};

	for (int i = 0; i < 2; i++)
		for (int j = 0; j < 2; j++)
			for (int k = 0; k < 2; k++) 
			{
				int m = 4*i + 2*j + k;
				m_child[m] = new TXOctree( CVector3f(xx[i], yy[j], zz[k]),CVector3f(xx[i+1], yy[j+1], zz[k+1]),m_depth+1 );

				size_t esz = m_edges.size();

				for (int t = 0; t < esz; t++)
					if (m_edges[t]->Touch(m_child[m]->GetMin(), m_child[m]->GetMax()))
						m_child[m]->Insert(m_edges[t]);

				if (m_child[m]->GetSize() == 0) 
				{
				  delete m_child[m];
				  m_child[m] = 0;
				} 
				else m_child[m]->Split();
			}

	if (m_depth > 0)m_edges.clear();
}
コード例 #20
0
ファイル: Forest.cpp プロジェクト: giusdr/CourseworkGames
void CForest::Initialise()
{
	m_tree.Load("Resources\\Meshes\\t4\\tree.obj");

	for (int i = 0; i < 10; i++)
	{
		float x = ((rand() / (float)RAND_MAX) - 0.5f) * CTerrain::g_terrainSize;
		float z = ((rand() / (float)RAND_MAX) - 0.5f) * CTerrain::g_terrainSize;
		m_positions.push_back(CVector3f(x, 0.0f, z));
	}
}
コード例 #21
0
void CPhysicalProp::m_Init(void)
{
	this->bIncludeInPhysicsUpdate = true;

	this->bInfiniteMass = false;
	this->frictionLinear = 0.0f;
	this->frictionLinearSquared = 0.0f;
	this->frictionRotational = 0.0f;
	this->rotStep = CVector3f(0.0f, 0.0f, 0.0f);
	this->mass = 1.0f;
	this->inverseMass = 1.0f;
	return;
}
コード例 #22
0
ファイル: Sword.cpp プロジェクト: FusTaFah/SpookyTown
void CSword::Update(float dt){
	m_position = m_playerPosition;
	if (m_alive){
		m_position += m_direction;
		m_timer += dt;
	}
	if (m_timer >= 0.7f){
		m_collisionObject.SetActive(false);
		m_timer = 0.0f;
		m_alive = false;
	}
	CVector3f offsetted = m_position + CVector3f(0.0f, 2.0f, 0.0f);
	m_collisionObject.Update(offsetted);
}
コード例 #23
0
void CPickup::Update(CVector3f c, float dt, Game *game, CAudio sound)
{
	m_theta += dt * 50.0f;
	if ((c - m_position).Length() < 2.0f)
	{
		if (m_isActive) 
		{ 
			if (game->m_health != 100)
			{
				game->m_health = 100;
			}
			if (game->m_ammo != 1000)
			{
				game->m_ammo = 1000;
			}
		}
		m_isActive = false;
		PlaySoundA(sound);
	}

	// Update bounding box based on current position
	m_boundingBox.Set(m_position - CVector3f(1.5, 1.5, 1.5), m_position + CVector3f(1.5, 1.5, 1.5));
}
コード例 #24
0
void CGUICameraCtrller::InitCamCtrller()
{
	CCamera* pCamera = (CCamera*)m_pCtrlNode;
	if (!pCamera)
		return;

	SetCamNormalPos( 0.0f, GUI_CAM_YDIS_DFT, GUI_CAM_ZDIS_DFT );
	pCamera->lookAt( CVector3f( 0, 0, 0 ));
	pCamera->setFOVy(30.0f*CMath::pi/180.0f);

	pCamera->setNearDist( Z_GUI_NEAR );
	pCamera->setFarDist( Z_GUI_FAR );
	return;
}
コード例 #25
0
ファイル: Square.cpp プロジェクト: LaoZhongGu/RushGame
	CSquare::CSquare(ISceneNode * pParent, string texname, float fSizeInWidth, float fSizeInDepth, DWORD dwColor) : 
		ISceneNode(pParent), m_strLockTextureName(texname), m_fSizeInWidth(fSizeInWidth), m_fSizeInDepth(fSizeInDepth), m_dwColor(dwColor)
	{
		m_vPos[0] = CVector3f(-m_fSizeInWidth*0.5f, 0.0f, -m_fSizeInDepth*0.5f);
		m_vPos[1] = CVector3f(-m_fSizeInWidth*0.5f, 0.0f, m_fSizeInDepth*0.5f);
		m_vPos[2] = CVector3f(m_fSizeInWidth*0.5f, 0.0f, -m_fSizeInDepth*0.5f);
		m_vPos[3] = CVector3f(m_fSizeInWidth*0.5f, 0.0f, m_fSizeInDepth*0.5f);

		m_dwClr[0] = dwColor;
		m_dwClr[1] = dwColor;
		m_dwClr[2] = dwColor;
		m_dwClr[3] = dwColor;
		
		m_vUV[0] = CVector2f(0.0f,1.0f);
		m_vUV[1] = CVector2f(0.0f,0.0f);
		m_vUV[2] = CVector2f(1.0f,1.0f);
		m_vUV[3] = CVector2f(1.0f,0.0f);

		////添加自己的SceneNode名字
		//m_strSceneNodeName = "SquareSceneNode";
		m_pRS = NULL;

		m_pLockTexture = CRenderDevice::GetInst()->GetTexture(m_strLockTextureName.c_str());
	}
コード例 #26
0
ファイル: FXPlayer.cpp プロジェクト: svn2github/ybtx
void CPositionFX::PlayEffect(const string &strFXNameGroup, const string &strFXName)
{
	if (!CClientRenderScene::HasInst())
	{
		delete this;
		return;
	}
	CRenderScene* pRenderScene=CClientRenderScene::GetInst();

	float fRatio = eGridSpanForObj / eGridSpan;
	pRenderScene->AttachRenderObject(*m_pPosRenderObj,CVector3f(m_Pos.x / fRatio, 0, m_Pos.y / fRatio));

	m_pPosRenderObj->AddEffect( strFXNameGroup.c_str(), strFXName.c_str(), CEffectPlayer::PLAY_ONCE, NULL );
	//m_pPosRenderObj->AddPiece( RFT_ARE, strFXNameGroup.c_str(), "", strFXName.c_str() );
}
コード例 #27
0
void CToolSetTileBlock::SetExactGridIndex()
{
	if ( m_processParams.eEditBrushType == EBT_NORMAL )
		return;

	map<int, vector<int>> & vecVertexIndices = this->GetBrushSubGridIndices();
	map<int, vector<int>>::iterator beg = vecVertexIndices.begin();
	map<int, vector<int>>::iterator end = vecVertexIndices.end();
	CTerrainMesh * pTerrain = CMapEditApp::GetInst()->GetEditingMesh();

	int nGridIndex = 0, nSubGridIndex = 0, nBlockType = 0;
	size_t size = 0;
	DWORD drawnCnt = 0;
	CVector3f center = CVector3f(0.0f, 0.0f, 0.0f);
	float step = GRID_SPACE * 0.5f;
	vector<int> subIndexs;
	bool bSetExactBlock = false;

	if ( m_processParams.eEditType == EET_WRITE )
	{
		nBlockType = m_processParams.eBlockTypeHot;
		bSetExactBlock = true;
	}
	else
	{
		nBlockType = 0;
		bSetExactBlock = false;
	}

	char szBlockBuf[64];
	sprintf(szBlockBuf, "F1操作,设置精确阻挡:阻挡类型是 = %d", nBlockType);
	COpearationLog::GetInst()->WriteOperationLog(szBlockBuf);

	for ( beg; beg != end; ++ beg )
	{
		nGridIndex = beg->first;
		size = beg->second.size();
		SGrid &grid = pTerrain->GetGrid(nGridIndex);

		for ( size_t i = 0; i < size; ++i )
		{
			grid.subGridTypes[beg->second[i]] = nBlockType;
		}

		grid.m_bSetExactBlock = bSetExactBlock;
	}
}
コード例 #28
0
ファイル: ToonixDualMesh.cpp プロジェクト: benmalartre/Toonix
TXDualEdge::TXDualEdge(TXEdge* edge, bool fac, int tp, const CVector4f& pos1, const CVector4f& pos2)
{
	m_e = edge;
	m_facing = fac;
	m_checked = false;
	m_triangles[0] = m_e->m_triangles[0];
	m_triangles[1] = m_e->m_triangles[1];
	
	m_eid[0] = m_e->GetIDInTriangle(m_triangles[0]);
	m_eid[1] = m_e->GetIDInTriangle(m_triangles[1]);;

	float d1, d2;
	float eps = float(DBL_EPSILON);
	switch (tp) {
	case PX:
	case NX:
	d1 = MAX(eps, fabs(pos1.GetX()));
	d2 = MAX(eps, fabs(pos2.GetX()));
	m_dp[0] = CVector3f(pos1.GetY()/d1, pos1.GetZ()/d1, pos1.GetW()/d1);
	m_dp[1] = CVector3f(pos2.GetY()/d2, pos2.GetZ()/d2, pos2.GetW()/d2);
	break;
	case PY:
	case NY:
	d1 = MAX(eps, fabs(pos1.GetY()));
	d2 = MAX(eps, fabs(pos2.GetY()));
	m_dp[0] = CVector3f(pos1.GetZ()/d1, pos1.GetW()/d1, pos1.GetX()/d1);
	m_dp[1] = CVector3f(pos2.GetZ()/d2, pos2.GetW()/d2, pos2.GetX()/d2);
	break;
	case PZ:
	case NZ:
	d1 = MAX(eps, fabs(pos1.GetZ()));
	d2 = MAX(eps, fabs(pos2.GetZ()));
	m_dp[0] = CVector3f(pos1.GetW()/d1, pos1.GetX()/d1, pos1.GetY()/d1);
	m_dp[1] = CVector3f(pos2.GetW()/d2, pos2.GetX()/d2, pos2.GetY()/d2);
	break;
	case PW:
	case NW:
	d1 = MAX(eps, fabs(pos1.GetW()));
	d2 = MAX(eps, fabs(pos2.GetW()));
	m_dp[0] = CVector3f(pos1.GetX()/d1, pos1.GetY()/d1, pos1.GetZ()/d1);
	m_dp[1] = CVector3f(pos2.GetX()/d2, pos2.GetY()/d2, pos2.GetZ()/d2);
	}
}
コード例 #29
0
// 设置GUI相机在NORMAL状态下的位置
void CGUICameraCtrller::SetCamNormalPos( float x, float y, float z )
{
	CCamera* pCamera = (CCamera*)m_pCtrlNode;
	if (!pCamera)
		return;

	m_fCurXDis = x;
	m_fCurYDis = y;
	m_fCurZDis = z;
	m_bNormal = true;	
	m_NeedReQuery = false;
	m_fWearAlready = 0.0f;
	m_bInMove = false;
	m_LookAt.Init(0.0f, 0.0f, 1.0f);

	pCamera->SetPosition( CVector3f( x, y, z ) );
	return;
}
コード例 #30
0
ファイル: CVector3f.cpp プロジェクト: songtianyi/motionLib
CVector3f CVector3f::canonized()const
{
    FLOAT tmp1 = pitch,tmp2 = heading,tmp3 = bank;

    tmp1    *= H3DMath::M_DEG2RAD;
    tmp2    *= H3DMath::M_DEG2RAD;
    tmp3    *= H3DMath::M_DEG2RAD;

    tmp1 = WRAPPI(tmp1);

    if(tmp1 < -H3DMath::HALF_PI)
    {
        tmp1    = -(H3DMath::PI+tmp1);
        tmp2    += H3DMath::PI;
        tmp3    += H3DMath::PI;
    }
    else if(tmp1 > H3DMath::HALF_PI)
    {
        tmp1    =  H3DMath::PI - tmp1;
        tmp2    += H3DMath::PI;
        tmp3    += H3DMath::PI;
    }
    //check gimbal lock
    if(fabs(tmp1) > (H3DMath::HALF_PI - 1e-4))
    {
        tmp2 += tmp3;
        tmp3 = 0.0;
    }
    else
    {
        tmp3 = WRAPPI(tmp3);
    }
    tmp2 = WRAPPI(tmp2);

    assert(tmp1 >= -H3DMath::HALF_PI    && tmp1 <= H3DMath::HALF_PI);
    assert(tmp2 >= -H3DMath::PI         && tmp2 <= H3DMath::PI);
    assert(tmp3 >= -H3DMath::PI         && tmp3 <= H3DMath::PI);

    tmp1 *= H3DMath::M_RAD2DEG;
    tmp2 *= H3DMath::M_RAD2DEG;
    tmp3 *= H3DMath::M_RAD2DEG;
    return CVector3f(tmp1,tmp2,tmp3);
}