void CEditCameraWnd::OnSaveAsSceneInitClicked(wxCommandEvent& /*event*/)
{
    CScene* pCurScene = CSceneManager::GetInstance()->GetCurrentScene();
    if (pCurScene != NULL)
    {
        pCurScene->SetInitCameraPos(CVec3((float)m_pPosX->GetValue().GetDouble(),
                                    (float)m_pPosY->GetValue().GetDouble(),
                                    (float)m_pPosZ->GetValue().GetDouble()));
        UPDATE_PROXY_PROPERTY_BY_NAME(pCurScene, pCurScene->GetInitCameraPos(), "m_cameraInitPos");
        pCurScene->SetInitCameraRotation(CVec3((float)m_pRotationX->GetValue().GetDouble(),
                                        (float)m_pRotationY->GetValue().GetDouble(),
                                        (float)m_pRotationZ->GetValue().GetDouble()));
        UPDATE_PROXY_PROPERTY_BY_NAME(pCurScene, pCurScene->GetInitCameraRotation(), "m_cameraInitRotation");
        pCurScene->SetInitCameraNear((float)m_pClipNear->GetValue().GetDouble());
        UPDATE_PROXY_PROPERTY_BY_NAME(pCurScene, pCurScene->GetInitCameraNear(), "m_fCameraInitNear");
        pCurScene->SetInitCameraFar((float)m_pClipFar->GetValue().GetDouble());
        UPDATE_PROXY_PROPERTY_BY_NAME(pCurScene, pCurScene->GetInitCameraFar(), "m_fCameraInitFar");
        pCurScene->SetInitCameraFov((float)m_pFov->GetValue().GetDouble());
        UPDATE_PROXY_PROPERTY_BY_NAME(pCurScene, pCurScene->GetInitCameraFov(), "m_fCameraInitFov");
        CEditorMainFrame* pMainFrame = static_cast<CEngineEditor*>(wxApp::GetInstance())->GetMainFrame();
        CComponentProxy* pProxy = pCurScene->GetProxyComponent();
        BEATS_ASSERT(pProxy != NULL, _T("Can't find the proxy of Scene!"));
        if (pMainFrame->GetSelectedComponent() == pProxy)
        {
            //Refresh the current showing property grid.
            pMainFrame->SelectComponent(pProxy);
        }
    }
}
Esempio n. 2
0
CBSPTree::CBSPTree( CModel *model ):
_root(0){

	for( int i=0;i<model->Surfaces().size();++i ){
		CModelSurface *surf=(CModelSurface*)model->Surfaces()[i]->Copy();
		cout<<"Adding surface, verts="<<surf->Vertices().size()<<", tris="<<surf->Triangles().size()<<endl;
		_surfaces.push_back( surf );
	}
	
	vector<CPolygon*> polys;
	
	for( int i=0;i<_surfaces.size();++i ){
		CModelSurface *surf=_surfaces[i];
		
		vector<int> verts(3);

		for( vector<CTriangle>::const_iterator it=surf->Triangles().begin();it!=surf->Triangles().end();++it ){
			const CTriangle &tri=*it;
			verts[0]=tri.vertices[0];
			verts[1]=tri.vertices[1];
			verts[2]=tri.vertices[2];
			CPolygon *poly=new CPolygon( surf,verts );
			polys.push_back( new CPolygon( surf,verts ) );
		}
	}
	
	if( !polys.size() ){
		_root=new CBSPNode( CPlane( CVec3(0,1,0),0 ) );
		return;
	}
	
	_root=new CBSPNode( polys[0]->Plane() );

	for( int i=1;i<polys.size();++i ){
		_root->InsertPlane( polys[i] );
	}

	for( int i=0;i<polys.size();++i ){
		_root->InsertLeaf( polys[i] );
	}

	for( int i=0;i<polys.size();++i ){
//		_root->InsertPolygon( polys[i] );
	}

	CPlane plane( CVec3(0,1,0),-5 );
	
//	_root=new CBSPNode( plane,new CBSPNode( 1 ),0 );
	
	_hpSurface=new CModelSurface;
	CPolygon *poly=new CPolygon( _hpSurface,plane,CBox( CVec3(-50),CVec3(50) ) );
	CBSPNode *bits[2];
	_root->Split( poly,bits );
	_root=new CBSPNode( plane,bits[0],0 );

	for( int i=0;i<polys.size();++i ){
		_root->InsertPolygon( polys[i] );
	}
}
Esempio n. 3
0
void CTextBox::UpdateCur()
{
    m_quadCur.tl = m_quadp.tl + CVec3( m_fXBorderWidth + m_fCurXoffset, m_fYBorderWidth, 0.0f);
    m_quadCur.bl = m_quadp.bl + CVec3( m_fXBorderWidth + m_fCurXoffset, m_vecRealSize.y - m_fYBorderWidth, 0.0f);
    m_quadCur.tr = m_quadCur.tl;
    m_quadCur.tr.x += 1.0f;
    m_quadCur.br = m_quadCur.bl;
    m_quadCur.br.x += 1.0f;
}
Esempio n. 4
0
void CShapeModule::InitParticleForEdge(CVec3& localPos, CVec3& direction, float fParticleScale) const
{
    float fRadius = fParticleScale * m_fRadius;
    localPos = CVec3(PARTICLE_RAND_RANGE(-fRadius, fRadius), 0, 0);
    direction = CVec3(0, 1, 0);
    if (m_bRandomDirection)
    {
        direction = GetRandomDirection();
    }
}
Esempio n. 5
0
void CControl::UpdateQuadP()
{
    const CVec2& realSize = GetRealSize();
    CVec2 anchorPos = GetAnchor() * realSize;

    //set vertex
    m_quadp.tl = CVec3(-anchorPos);
    m_quadp.br = CVec3(realSize - anchorPos);
    m_quadp.tr.x = m_quadp.br.x;
    m_quadp.tr.y = m_quadp.tl.y;
    m_quadp.bl.x = m_quadp.tl.x;
    m_quadp.bl.y = m_quadp.br.y;
}
Esempio n. 6
0
CSurface *CMirror::Surface(){
	if( _dirty & DIRTY_SURFACE ){
		CVertex v0,v1,v2,v3;
		v0.position=CVec3( -_width/2,_height/2,0 );
		v0.normal=CVec3(0,0,-1);
		v0.texcoords[0]=CVec2( 1,1 );
		v1.position=CVec3( _width/2,_height/2,0 );
		v1.normal=CVec3(0,0,-1);
		v1.texcoords[0]=CVec2( 0,1 );
		v2.position=CVec3( _width/2,-_height/2,0 );
		v2.normal=CVec3(0,0,-1);
		v2.texcoords[0]=CVec2( 0,0 );
		v3.position=CVec3( -_width/2,-_height/2,0 );
		v3.normal=CVec3(0,0,-1);
		v3.texcoords[0]=CVec2( 1,0 );
		_surface->Clear();
		_surface->AddVertex( v0 );
		_surface->AddVertex( v1 );
		_surface->AddVertex( v2 );
		_surface->AddVertex( v3 );
		_surface->AddTriangle( 0,1,2 );
		_surface->AddTriangle( 0,2,3 );
		_dirty&=~DIRTY_SURFACE;
	}
	return _surface;
}
void CShapeRenderer::DrawCircle(const CMat4& mat, float fRadius, CColor color, bool bSolid, float fRate) const
{
    static const float fStepRadians = DegreesToRadians(15);
    if (bSolid)
    {
        std::vector<CVertexPC> vertexData;
        std::vector<unsigned short> indicesData;
        CVertexPC point;
        point.position = CVec3(mat[12], mat[13], mat[14]);
        point.color = color;
        vertexData.push_back(point);
        for (float fRadian = 0; fRadian <= MATH_PI_DOUBLE * fRate; fRadian += fStepRadians)
        {
            CVec3 pos(fRadius * sinf(fRadian), 0, fRadius * cosf(fRadian));
            pos *= mat;
            point.position = pos;
            vertexData.push_back(point);
            if (vertexData.size() >= 3)
            {
                unsigned short index = (unsigned short)vertexData.size();
                indicesData.push_back(0);
                indicesData.push_back(index - 2);
                indicesData.push_back(index - 1);
            }
        }
        CRenderManager::GetInstance()->RenderTriangle(vertexData, indicesData, true);
    }
    else
    {
        CVertexPC startPos;
        CVertexPC endPos;
        startPos.color = color;
        endPos.color = color;
        startPos.position = CVec3(0, 0, fRadius);
        startPos.position *= mat;
        float fEndRadian = MATH_PI_DOUBLE * fRate;
        for (float fRadian = fStepRadians; fRadian <= fEndRadian; fRadian += fStepRadians)
        {
            endPos.position = CVec3(fRadius * sinf(fRadian), 0, fRadius * cosf(fRadian));
            endPos.position *= mat;
            CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
            startPos.position = endPos.position;
        }
        //Close the circle to avoid the error condition.
        endPos.position = CVec3(fRadius * sinf(fEndRadian), 0, fRadius * cosf(fEndRadian));
        endPos.position *= mat;
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    }
}
Esempio n. 8
0
CVec3 CVec3::operator*(const CVec3 &other) const
{
	return CVec3(
		_x * other._x,
		_y * other._y,
		_z * other._z);
}
Esempio n. 9
0
CVec3 CVec3::operator/(float scalar) const
{
	return CVec3(
		_x / scalar,
		_y / scalar,
		_z / scalar);
}
Esempio n. 10
0
CVec3 CVec3::cross(const CVec3 &other) const
{
	return CVec3(
		(_y * other._z) - (_z * other._y),
		(_z * other._x) - (_x * other._z),
		(_x * other._y) - (_y * other._x));
}
Esempio n. 11
0
CVec3 CVec3::operator*(float scalar) const
{
	return CVec3(
		_x * scalar,
		_y * scalar,
		_z * scalar);
}
Esempio n. 12
0
CVec3 CVec3::operator/(const CVec3 &other) const
{
	return CVec3(
		_x / other._x,
		_y / other._y,
		_z / other._z);
}
Esempio n. 13
0
CVec3 CVec3::operator-(const CVec3 &other) const
{
	return CVec3(
		_x - other._x,
		_y - other._y,
		_z - other._z);
}
Esempio n. 14
0
CVec3 CVec3::operator+(const CVec3 &other) const
{
	return CVec3(
		_x + other._x,
		_y + other._y,
		_z + other._z);
}
Esempio n. 15
0
//Forwared here from CMirrorSurface
void CMirror::OnRenderScene( CCamera *camera ){
	_surface->Instances().clear();
	
	//No recursion yet...
	if( camera==_camera ) return;

	//frustum clipping.
	//Note: CModelSurface still clips itself - add enable/disable clipping for CModelSurface
	CBox bounds=RenderMatrix() * CBox( CVec3( -_width/2,-_height/2,0 ),CVec3( _width/2,_height/2,0 ) );
	if( !camera->RenderFrustum().Intersects( bounds ) ) return;
	
	const CMat4 &mir=RenderMatrix();
	const CMat4 &cam=camera->RenderMatrix();

	//put eye into mirror space
	CVec3 eye=-mir * cam.t.xyz();
	if( eye.z>0 ) return;

	//reflect
	eye.z=-eye.z;

	//projection matrix
	float znear=eye.z;
	float zfar=256.0f;
	float left=(-_width/2-eye.x),right=left+_width;
	float bottom=(-_height/2+eye.y),top=bottom+_height;
	CMat4 proj=CMat4::FrustumMatrix( left,right,bottom,top,znear,zfar );

	//camera matrix
	CMat4 mat;
	mat.i.x=-1;
	mat.k.z=-1;
	mat.t.xyz()=eye;
	mat=mir * mat;

	_camera->SetWorldMatrix( mat );
	_camera->SetProjectionMatrix( proj );
	
	CTexture *cb=App.Graphics()->ColorBuffer( 0 );
	App.Graphics()->SetColorBuffer( 0,Texture() );
	App.Scene()->RenderCamera( _camera );
	App.Graphics()->SetColorBuffer( 0,cb );
	
	_surface->Instances().push_back( mir );
}
Esempio n. 16
0
void CEditCameraWnd::OnPropertyChanged(wxPropertyGridEvent &event)
{
    wxPGProperty* pChangedProperty = event.GetProperty();
    CEditorMainFrame* pMainFrame = static_cast<CEngineEditor*>(wxApp::GetInstance())->GetMainFrame();
    CBeyondEngineEditorGLWindow* pSceneWnd = pMainFrame->GetSceneWindow();
    CCamera* pCurCamera = pSceneWnd->GetCamera();

    if (pCurCamera != NULL)
    {
        if (pChangedProperty == m_pSpeed)
        {
            pCurCamera->m_fMoveSpeed = (float)m_pSpeed->GetValue().GetDouble();
        }
        else if (pChangedProperty == m_pShiftMoveSpeedRate)
        {
            pCurCamera->m_fShiftMoveSpeedRate = (float)m_pShiftMoveSpeedRate->GetValue().GetDouble();
        }
        else if (pChangedProperty == m_pPosX || pChangedProperty == m_pPosY || pChangedProperty == m_pPosZ)
        {
            pCurCamera->SetViewPos(CVec3((float)m_pPosX->GetValue().GetDouble(),
                                    (float)m_pPosY->GetValue().GetDouble(),
                                    (float)m_pPosZ->GetValue().GetDouble()));
        }
        else if (pChangedProperty == m_pRotationX || pChangedProperty == m_pRotationY || pChangedProperty == m_pRotationZ)
        {
            pCurCamera->SetRotation(CVec3((float)m_pRotationX->GetValue().GetDouble(),
                                   (float)m_pRotationY->GetValue().GetDouble(),
                                    (float)m_pRotationZ->GetValue().GetDouble()));
        }
        else if (pChangedProperty == m_pFov)
        {
            pCurCamera->SetFOV((float)m_pFov->GetValue().GetDouble());
        }
        else if (pChangedProperty == m_pClipNear)
        {
            pCurCamera->SetNear((float)m_pClipNear->GetValue().GetDouble());
        }
        else if (pChangedProperty == m_pClipFar)
        {
            pCurCamera->SetFar((float)m_pClipFar->GetValue().GetDouble());
        }
    }
}
Esempio n. 17
0
void CShapeModule::InitParticleForCircle(CVec3& localPos, CVec3& direction, float fParticleScale) const
{
    direction = CVec3(1, 0, 0);
    CQuaternion quat;
    quat.FromPitchYawRoll(0, 0, PARTICLE_RAND_RANGE(0, DegreesToRadians(m_fArcForCircle)));
    direction *= quat;
    float fRadius = m_fRadius * fParticleScale;
    localPos = direction * (m_bEmitFromShell ? fRadius : PARTICLE_RAND_RANGE(0, fRadius));
    if (m_bRandomDirection)
    {
        direction = GetRandomDirection();
    }
}
Esempio n. 18
0
void CShapeModule::InitParticleForBox(CVec3& localPos, CVec3& direction, float fParticleScale) const
{
    CVec3 halfSize = m_boxSize * 0.5f * fParticleScale;
    localPos.Fill(RANGR_RANDOM_FLOAT(-halfSize.X(), halfSize.X()),
        RANGR_RANDOM_FLOAT(-halfSize.Y(), halfSize.Y()),
        RANGR_RANDOM_FLOAT(-halfSize.Z(), halfSize.Z()));

    direction = CVec3(0, 0, 1);
    if (m_bRandomDirection)
    {
        direction = GetRandomDirection();
    }
}
Esempio n. 19
0
void CShapeRenderer::DrawBox(const CMat4& mat, float fX, float fY, float fZ, CColor color, bool bSolid)
{
    if (!bSolid)
    {
        CVertexPC top[4];
        CVertexPC buttom[4];
        float fHalfX = fX * 0.5f;
        float fHalfZ = fZ * 0.5f;
        top[0].position = CVec3(-fHalfX, fY, -fHalfZ) * mat;
        top[0].color = color;
        top[1].position = CVec3(fHalfX, fY, -fHalfZ) * mat;
        top[1].color = color;
        top[2].position = CVec3(fHalfX, fY, fHalfZ) * mat;
        top[2].color = color;
        top[3].position = CVec3(-fHalfX, fY, fHalfZ) * mat;
        top[3].color = color;
        CRenderManager::GetInstance()->RenderLine(top[0], top[1], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(top[1], top[2], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(top[2], top[3], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(top[3], top[0], 1.0f, true);
        buttom[0].position = CVec3(-fHalfX, 0, -fHalfZ) * mat;
        buttom[0].color = color;
        buttom[1].position = CVec3(fHalfX, 0, -fHalfZ) * mat;
        buttom[1].color = color;
        buttom[2].position = CVec3(fHalfX, 0, fHalfZ) * mat;
        buttom[2].color = color;
        buttom[3].position = CVec3(-fHalfX, 0, fHalfZ) * mat;
        buttom[3].color = color;
        CRenderManager::GetInstance()->RenderLine(buttom[0], buttom[1], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(buttom[1], buttom[2], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(buttom[2], buttom[3], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(buttom[3], buttom[0], 1.0f, true);

        CRenderManager::GetInstance()->RenderLine(top[0], buttom[0], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(top[1], buttom[1], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(top[2], buttom[2], 1.0f, true);
        CRenderManager::GetInstance()->RenderLine(top[3], buttom[3], 1.0f, true);
    }
}
Esempio n. 20
0
void CShapeModule::Render(CParticleEmitter* pEmitter)
{
    BEATS_ASSERT(pEmitter != nullptr);
    const CMat4& emitterMat = pEmitter->GetWorldTM();
    switch (m_emitShapeType)
    {
    case EEmitShapeType::eEST_Sphere:
    case EEmitShapeType::eEST_HemiSphere:
    {
        CMat4 emitterSphereMat;
        emitterSphereMat.FromPitchYawRoll(DegreesToRadians(90), 0, 0);
        emitterSphereMat = emitterMat * emitterSphereMat;
        bool bHemiSphere = m_emitShapeType == EEmitShapeType::eEST_HemiSphere;
        float fRate = bHemiSphere ? 0.5f : 1.0f;
        CShapeRenderer::GetInstance()->DrawCircle(emitterSphereMat, m_fRadius, 0x00FF00FF, false, 1.0f);
        CMat4 mat;
        mat.FromPitchYawRoll(0, MATH_PI_HALF, MATH_PI_HALF);
        mat = emitterSphereMat * mat;
        CShapeRenderer::GetInstance()->DrawCircle(mat, m_fRadius, 0xFF0000FF, false, fRate);
        mat.FromPitchYawRoll(MATH_PI, 0, -MATH_PI_HALF);
        mat = emitterSphereMat * mat;
        CShapeRenderer::GetInstance()->DrawCircle(mat, m_fRadius, 0x0000FFFF, false, fRate);
    }
        break;
    case EEmitShapeType::eEST_Cone:
    {
        CMat4 emitterConeMat;
        emitterConeMat.FromPitchYawRoll(DegreesToRadians(90), 0, 0);
        emitterConeMat = emitterMat * emitterConeMat;
        float fTopRadius = m_fRadius + m_fConeLength * tanf(DegreesToRadians(m_fAngle));
        CShapeRenderer::GetInstance()->DrawCone(emitterConeMat, m_fRadius, fTopRadius, m_fConeLength, 0x0000FFFF, 0x00FF00FF, 0xFF0000FF, false);
    }
        break;
    case EEmitShapeType::eEST_Box:
        CShapeRenderer::GetInstance()->DrawBox(emitterMat, m_boxSize.X(), m_boxSize.Y(), m_boxSize.Z(), 0xFF0000FF, false);
        break;
    case EEmitShapeType::eEST_Mesh:
        break;
    case EEmitShapeType::eEST_Circle:
    {
        CVertexPC startPos, endPos;
        startPos.color = 0xFFFF00FF;
        endPos.color = 0xFFFF00FF;
        startPos.position = pEmitter->GetWorldTM().GetTranslate();
        endPos.position = CVec3(0, 0, m_fRadius) * pEmitter->GetWorldTM();
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f);

        CQuaternion quat;
        quat.FromPitchYawRoll(0, DegreesToRadians(m_fArcForCircle), 0);
        endPos.position = (CVec3(0, 0, m_fRadius) * quat) * pEmitter->GetWorldTM();
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f);
        CMat4 emitterConeMat;
        emitterConeMat.FromPitchYawRoll(DegreesToRadians(90), 0, 0);
        emitterConeMat = emitterMat * emitterConeMat;
        CShapeRenderer::GetInstance()->DrawCircle(emitterConeMat, m_fRadius, 0xFFFF00FF, false, m_fArcForCircle / 360.f);
    }
        break;
    case EEmitShapeType::eEST_Edge:
    {
        CVertexPC startPos, endPos;
        CVec3 rightDir = emitterMat.GetRightVec3();
        startPos.position = rightDir * m_fRadius;
        startPos.color = 0xFFFF00FF;
        endPos.position = rightDir * -m_fRadius;
        endPos.color = 0xFFFF00FF;
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 3.0f);
    }
        break;
    default:
        BEATS_ASSERT(false, "Never reach here!");
        break;
    }
}
Esempio n. 21
0
void CShapeRenderer::DrawAABB(const CAABBBox& aabb, CColor color)
{
    CVec3 tmin = aabb.m_minPos;
    CVec3 tmax = aabb.m_maxPos;
    CVec3 sub = tmax - tmin;
    CVertexPC startPos, endPos;
    startPos.color = color;
    endPos.color = color;
    startPos.position = tmin;
    endPos.position = CVec3(tmin.X(), tmin.Y(), tmin.Z() + sub.Z() * 0.2F);// Min
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X(), tmin.Y() + sub.Y() * 0.2F, tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X() + sub.X() * 0.2F, tmin.Y(), tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);

    startPos.position = tmax;
    endPos.position = CVec3(tmax.X(), tmax.Y(), tmax.Z() - sub.Z() * 0.2F);// Max
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X(), tmax.Y() - sub.Y() * 0.2F, tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X() - sub.X() * 0.2F, tmax.Y(), tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);

    startPos.position = CVec3(tmin.X(), tmin.Y(), tmax.Z());// x min, y min, z max
    endPos.position = CVec3(tmin.X(), tmin.Y(), tmax.Z() - sub.Z() * 0.2F);
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X(), tmin.Y() + sub.Y() * 0.2F, tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X() + sub.X() * 0.2F, tmin.Y(), tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);

    startPos.position = CVec3(tmin.X(), tmax.Y(), tmin.Z());// x min, y max, z min
    endPos.position = CVec3(tmin.X(), tmax.Y(), tmin.Z() + sub.Z() * 0.2F);
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X(), tmax.Y() - sub.Y() * 0.2F, tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X() + sub.X() * 0.2F, tmax.Y(), tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);

    startPos.position = CVec3(tmax.X(), tmin.Y(), tmin.Z());// x max, y min, z min
    endPos.position = CVec3(tmax.X(), tmin.Y(), tmin.Z() + sub.Z() * 0.2F);
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X(), tmin.Y() + sub.Y() * 0.2F, tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X() - sub.X() * 0.2F, tmin.Y(), tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);

    startPos.position = CVec3(tmin.X(), tmax.Y(), tmax.Z());// x min, y max, z max
    endPos.position = CVec3(tmin.X(), tmax.Y(), tmax.Z() - sub.Z() * 0.2F);
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X(), tmax.Y() - sub.Y() * 0.2F, tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmin.X() + sub.X() * 0.2F, tmax.Y(), tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);

    startPos.position = CVec3(tmax.X(), tmax.Y(), tmin.Z());// x min, y max, z max
    endPos.position = CVec3(tmax.X(), tmax.Y(), tmin.Z() + sub.Z() * 0.2F);
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X(), tmax.Y() - sub.Y() * 0.2F, tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X() - sub.X() * 0.2F, tmax.Y(), tmin.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);

    startPos.position = CVec3(tmax.X(), tmin.Y(), tmax.Z());// x max, y min, z max
    endPos.position = CVec3(tmax.X(), tmin.Y(), tmax.Z() - sub.Z() * 0.2F);
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X(), tmin.Y() + sub.Y() * 0.2F, tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    endPos.position = CVec3(tmax.X() - sub.X() * 0.2F, tmin.Y(), tmax.Z());
    CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
}
Esempio n. 22
0
void CShapeRenderer::DrawCone(const CMat4& mat, float fButtomRadius, float fTopRadius, float fHeight, CColor coneColor, CColor bottomColor, CColor topColor, bool bSolid) const
{
    DrawCircle(mat, fButtomRadius, bottomColor, bSolid);
    CMat4 translateMat;
    translateMat.SetTranslate(CVec3(0, fHeight, 0));
    CMat4 topMat = mat * translateMat;
    DrawCircle(topMat, fTopRadius, topColor, bSolid);
    if (bSolid)
    {
        CVec3 center(mat[12], mat[13], mat[14]);
        CVec3 upDirection = mat.GetUpVec3();
        upDirection = upDirection * fHeight;
        CVec3 topCenter = center + upDirection;
        CVertexPC point;
        point.position = topCenter;
        point.color = coneColor;
        std::vector<unsigned short> indicesData;
        std::vector<CVertexPC> vertexData;
        vertexData.push_back(point);
        static const float fStepRadians = DegreesToRadians(15);
        for (float fRadian = 0; fRadian <= MATH_PI_DOUBLE; fRadian += fStepRadians)
        {
            CVec3 pos(fButtomRadius * sinf(fRadian), 0, fButtomRadius * cosf(fRadian));
            pos *= mat;
            point.position = pos;
            vertexData.push_back(point);
            if (vertexData.size() >= 3)
            {
                unsigned short index = (unsigned short)vertexData.size();
                indicesData.push_back(0);
                indicesData.push_back(index - 2);
                indicesData.push_back(index - 1);
            }
        }
        CRenderManager::GetInstance()->RenderTriangle(vertexData, indicesData, true);
    }
    else
    {
        CVertexPC startPos, endPos;
        startPos.color = coneColor;
        endPos.color = coneColor;
        CVec3 topPoint(fTopRadius, fHeight, 0);
        CVec3 buttomPoint(fButtomRadius, 0, 0);
        startPos.position = topPoint * mat;
        endPos.position = buttomPoint * mat;
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
        topPoint.X() *= -1;
        buttomPoint.X() *= -1;
        startPos.position = topPoint * mat;
        endPos.position = buttomPoint * mat;
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
        topPoint = CVec3(0, fHeight, fTopRadius);
        buttomPoint = CVec3(0, 0, fButtomRadius);
        startPos.position = topPoint * mat;
        endPos.position = buttomPoint * mat;
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
        topPoint.Z() *= -1;
        buttomPoint.Z() *= -1;
        startPos.position = topPoint * mat;
        endPos.position = buttomPoint * mat;
        CRenderManager::GetInstance()->RenderLine(startPos, endPos, 1.0f, true);
    }
}
Esempio n. 23
0
static CVec3 ccolor( const aiColor4D &color ){
	return CVec3( color.r,color.g,color.b );
}
Esempio n. 24
0
CVec3 CVec3::operator--()
{
	return CVec3(-_xyz[0], -_xyz[1], -_xyz[2]);
}
Esempio n. 25
0
CVec3  CVec3::getNormal() const
{
	return CVec3(*this) /= this->length();
}