Esempio n. 1
0
bool
OsdCpuGLVertexBuffer::allocate() {
    _cpuBuffer = new real[GetNumElements() * GetNumVertices()];
    _dataDirty = true;
    int size = GetNumElements() * GetNumVertices() * sizeof(real);

    glGenBuffers(1, &_vbo);
    glBindBuffer(GL_ARRAY_BUFFER, _vbo);
    glBufferData(GL_ARRAY_BUFFER, size, 0, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    return true;
}
Esempio n. 2
0
bool
OsdCpuGLVertexBuffer::allocate() {
    _cpuBuffer = new float[GetNumElements() * GetNumVertices()];
    _dataDirty = true;
    int size = GetNumElements() * GetNumVertices() * sizeof(float);

    glGenBuffers(1, &_vbo);
    glBindBuffer(GL_ARRAY_BUFFER, _vbo);
    glBufferData(GL_ARRAY_BUFFER, size, 0, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    if (glGetError() == GL_NO_ERROR) return true;
    return false;
}
double CFuzzyMembershipFunction::GetValue (long x) const
{
  CFuzzyElement FE;
  CFuzzyElement FElast;
  
  // Init last fuzzy variable index.
  GetVertex(0,&FElast);

  // Go through the verticies and campare against value.
  for (int v=0; v < GetNumVertices(); v++)
  {
    if (GetVertex(v,&FE))
    {
      if ((FElast.GetValue() <= x) && (x <= FE.GetValue()))
      {
        double Denominator = double(FE.GetValue()) - double(FElast.GetValue());
        if (Denominator != 0.0)
        {
          // Generate equation of the line and get intersection.
          double M = (FE.GetMembership() - FElast.GetMembership()) / Denominator;
          double B = FE.GetMembership() - (M * (FE.GetValue()));
          double Y = (M * double(x)) + B;
          return Y;
        }
      }
      FElast = FE;
    }
  }

  return 0.0;
}
Esempio n. 4
0
void	PolyhedralConvexShape::BatchedUnitVectorGetSupportingVertexWithoutMargin(const SimdVector3* vectors,SimdVector3* supportVerticesOut,int numVectors) const
{
	int i;

	SimdVector3 vtx;
	SimdScalar newDot;

	for (int j=0;j<numVectors;j++)
	{
		SimdScalar maxDot(-1e30f);

		const SimdVector3& vec = vectors[j];

		for (i=0;i<GetNumVertices();i++)
		{
			GetVertex(i,vtx);
			newDot = vec.dot(vtx);
			if (newDot > maxDot)
			{
				maxDot = newDot;
				supportVerticesOut[i] = vtx;
			}
		}
	}
}
Esempio n. 5
0
inline void C2DRoundFrameRect::Set1DBorderTextureCoords()
{
	if( m_vecLocalVertexPosition.size() == 0 || GetNumVertices() == 0 )
		return;

	const int num_points = GetNumVertices() / 2;
	for( int i=0; i<num_points; i++ )
	{
		int j = i*2;
		m_vecRectVertex[j].m_TextureCoord[0].u   = 1.0f;
		m_vecRectVertex[j].m_TextureCoord[0].v   = 0.0f;

		m_vecRectVertex[j+1].m_TextureCoord[0].u = 0.0f;
		m_vecRectVertex[j+1].m_TextureCoord[0].v = 0.0f;
	}
}
Esempio n. 6
0
void nMeshGroup::RenderShaderSkinning(int meshGroupIdx, U2BonePalette& bonePalette)
{
	
	static const int maxBonePaletteSize = 72;
	static D3DXMATRIX boneMatArray[maxBonePaletteSize];

	int paletteSize = bonePalette.GetNumJoints();
	U2ASSERT(paletteSize <= maxBonePaletteSize);

	int paletteIdx;
	for(paletteIdx = 0; paletteIdx < paletteSize; ++paletteIdx)
	{
		const U2Bone& bone = m_pSkinMod->GetSkeleton()->GetJoint(
			bonePalette.GetJointIdx(paletteIdx));
		boneMatArray[paletteIdx] = bone.GetSKinMat44();
	}

	U2SceneMgr *pSceneMgr = U2SceneMgr::Instance();
	U2ASSERT(pSceneMgr);
	U2Dx9Renderer *pRenderer = U2Dx9Renderer::GetRenderer();
	U2ASSERT(pRenderer);

	U2D3DXEffectShader *pCurrShader = pRenderer->GetCurrEffectShader();
	U2ASSERT(pCurrShader);
	if(pCurrShader->IsParamUsed(U2FxShaderState::JointPalette))
	{
		pCurrShader->SetMatrixArray(U2FxShaderState::JointPalette, boneMatArray, paletteSize);
	}

	pRenderer->SetVertexRange(GetFirstVertex(), GetNumVertices());
	pRenderer->SetIndexRange(GetFirstIndex(), GetNumIndices());
	pRenderer->DrawIndexedPrimitive(D3DPT_TRIANGLELIST);
}
const CFuzzyMembershipFunction CFuzzyMembershipFunction::operator / (const CFuzzyMembershipFunction& right) const
{
  static CFuzzyMembershipFunction FMFreturn;
  CFuzzyElement FEleft;
  CFuzzyElement FEright;
  CFuzzyElement FE;
  CFuzzyElement *pPreviousFE;

  FMFreturn.DeleteVertices();
  for (long l = 0; l < GetNumVertices(); l++)
  {
    for (long r = 0; r < right.GetNumVertices(); r++)
    {
      if ((GetVertex(l,&FEleft)) && (right.GetVertex(r,&FEright)))
      {
        FE = FEleft / FEright;
        pPreviousFE = FMFreturn.GetpVertex(FE.GetValue());
        if (pPreviousFE)
        {
          *pPreviousFE = *pPreviousFE || FE;
        }

        FMFreturn.AddVertex(FE);
      }
    }
  }

  return FMFreturn;
}
Esempio n. 8
0
bool nMeshGroup::Render(U2SceneMgr* pSceneMgr, U2RenderContext* pCxt)
{
	IsRendererOK2;

	if(m_pSkinMod)
		pCxt->pUserData = m_pSkinMod;
	
	for(unsigned int i=0; i < GetNumControllers(); ++i)
	{		
		GetController(i)->Update(0.f, pCxt);
	}


	if(m_pSkinMod)		
	{
		


		// Set D3D VB /IB
		//for(uint32 i=0; i < GetEffectCnt(); ++i)
		//{
		//	U2Dx9FxShaderEffect* pEffect = 
		//		DynamicCast<U2Dx9FxShaderEffect>(GetEffect(i));
		//	if(pEffect)
		//	{
		//		pRenderer->SetupMesh(GetMesh());
		//	}
		//}		
		
		int numFragments = m_pSkinMod->GetNumFragments();
		int fragIdx;

		
		for(fragIdx = 0; fragIdx < numFragments; ++fragIdx)
		{
			U2SkinModifier::Fragment& fragment = 
				*m_pSkinMod->GetFragment(fragIdx);
			RenderShaderSkinning(fragment.GetMeshGroupIdx(), fragment.GetBonePalette());			
		}
	}
	else 
	{
		//// Set D3D VB /IB
		//for(uint32 i=0; i < GetEffectCnt(); ++i)
		//{
		//	U2Dx9FxShaderEffect* pEffect = 
		//		DynamicCast<U2Dx9FxShaderEffect>(GetEffect(i));
		//	if(pEffect)
		//	{
		//		pRenderer->SetupMesh(GetMesh());
		//	}
		//}

		pRenderer->SetVertexRange(GetFirstVertex(), GetNumVertices());
		pRenderer->SetIndexRange(GetFirstIndex(), GetNumIndices());
		pRenderer->DrawIndexedPrimitive(m_spModelData->GetPrimitiveType());
	}

	return true;
}
Esempio n. 9
0
void Mesh::InitialiseSHDataStructures() {
	UINT numCoeffs = GetPRTCompBuffer()->GetNumCoeffs();
	UINT numClusters = GetPRTCompBuffer()->GetNumClusters();
	UINT numChannels = GetPRTCompBuffer()->GetNumChannels();
	UINT numPCA = GetPRTCompBuffer()->GetNumPCA();
	int nClusterBasisSize = ( numPCA + 1 ) * numCoeffs * numChannels;  // mean + pca-basis vectors of cluster
	int nBufferSize = nClusterBasisSize * numClusters;
  
	mPRTClusterBases = new float[nBufferSize];
	mPCAWeights = new float[GetNumVertices() * numPCA];

	UINT shCoefficientsSize = GetNumVertices() * numChannels * numCoeffs;
	mSHCoefficients = new float[shCoefficientsSize];
	mInterpolatedSHCoefficients = new float[shCoefficientsSize];
	mClusterIds = new int[GetNumVertices()];
}
Esempio n. 10
0
SimdVector3	PolyhedralConvexShape::LocalGetSupportingVertexWithoutMargin(const SimdVector3& vec0)const
{
	int i;
	SimdVector3 supVec(0,0,0);

	SimdScalar maxDot(-1e30f);

	SimdVector3 vec = vec0;
	SimdScalar lenSqr = vec.length2();
	if (lenSqr < 0.0001f)
	{
		vec.setValue(1,0,0);
	} else
	{
		float rlen = 1.f / SimdSqrt(lenSqr );
		vec *= rlen;
	}

	SimdVector3 vtx;
	SimdScalar newDot;

	for (i=0;i<GetNumVertices();i++)
	{
		GetVertex(i,vtx);
		newDot = vec.dot(vtx);
		if (newDot > maxDot)
		{
			maxDot = newDot;
			supVec = vtx;
		}
	}

	return supVec;

}
Esempio n. 11
0
void Geometry::ShowInformation() const
{
    Debug::Log(QString("Information of the mesh %1:").arg(mName));
    Debug::Log(QString("   Number of faces: %1").arg(GetNumFaces()));
    Debug::Log(QString("   Number of vertices: %1").arg(GetNumVertices()));
    Debug::Log(QString("   Diameter: %1").arg(mBoundingSphere->GetRadius()*2));
}
Esempio n. 12
0
HRESULT Mesh::CreateTopologyFromMesh() {
	HRESULT hr;
	mVertices = new Vertex[GetNumVertices()];
	mFaces = new DWORD[3*GetNumFaces()];
	mVertexFaceAdjazency = new std::vector<DWORD>[GetNumVertices()];

	FULL_VERTEX *pVertices = NULL;
  hr = mMesh->LockVertexBuffer(0, (void**)&pVertices);
  PD(hr, L"lock vertex buffer");
  if(FAILED(hr)) return hr;

  for ( DWORD i = 0; i < mMesh->GetNumVertices(); ++i ) {
    Vertex vertex;
    vertex.pos.x = pVertices[i].position.x;
    vertex.pos.y = pVertices[i].position.y;
    vertex.pos.z = pVertices[i].position.z;
    vertex.normal.x = pVertices[i].normal.x;
    vertex.normal.y = pVertices[i].normal.y;
    vertex.normal.z = pVertices[i].normal.z;
    mVertices[i] = vertex;
  }

  hr = mMesh->UnlockVertexBuffer();
  PD(hr, L"unlock vertex buffer");
  if(FAILED(hr)) return hr;

	DWORD* pIndexBuffer = NULL;
	hr = mMesh->LockIndexBuffer( 0, ( void** )&pIndexBuffer );
	PD(hr, L"lock index buffer");
	if(FAILED(hr)) return hr;

	for( DWORD j = 0; j < GetNumFaces(); j++ )
	{		
		mFaces[j*3+0] = pIndexBuffer[j*3+0];
		mFaces[j*3+1] = pIndexBuffer[j*3+1];
		mFaces[j*3+2] = pIndexBuffer[j*3+2];

		mVertexFaceAdjazency[pIndexBuffer[j*3+0]].push_back(j);
		mVertexFaceAdjazency[pIndexBuffer[j*3+1]].push_back(j);
		mVertexFaceAdjazency[pIndexBuffer[j*3+2]].push_back(j);
	}

	hr = mMesh->UnlockIndexBuffer();
	PD(hr, L"unlock index buffer");
	if(FAILED(hr)) return hr;
}
Esempio n. 13
0
CWaterVertex* CWaterPolySA::GetVertex ( int index )
{
    if ( index < 0 || index >= GetNumVertices () )
        return NULL;

    return &g_pWaterManager->m_Vertices [
        GetType () == WATER_POLY_QUAD ? ((CWaterQuadSA *)this)->GetInterface ()->m_wVertexIDs[index]
                                  : ((CWaterTriangleSA *)this)->GetInterface ()->m_wVertexIDs[index]
    ];
}
bool CFuzzyMembershipFunction::Write (std::ostream& stream)
{
  bool WriteResult = true;

  // Write out the membership function type
  EFileTypes FileType = fFuzzyMembershipFunction;
  stream.write((const char*)&FileType, sizeof(FileType));

  // Write out number of characters in the name.
  unsigned short NumCharsInName = m_Name.length();
  stream.write((const char*)&NumCharsInName, sizeof(NumCharsInName));

  // Write the name one character at a time.
  stream.write(m_Name.c_str(),NumCharsInName);

  // Write out Tnorm.
  stream.write((const char*)&m_Tnorm,sizeof(m_Tnorm));

  // Write out Tconorm.
  stream.write((const char*)&m_Tconorm,sizeof(m_Tconorm));

  // Write out number of CFuzzyElements in the membership function.
  long NumVertices = GetNumVertices();
  stream.write((const char*)&NumVertices, sizeof(NumVertices));

  // Write out each CFuzzyElement.
  CFuzzyElement FE;
  for (long v = 0; v < NumVertices; v++)
  {
    bool Result = GetVertex(v,&FE);
    if (!Result)
    {
      WriteResult = false;
    }

    // Write out value. 
    long Value = FE.GetValue();
    stream.write((const char*)&Value, sizeof(Value));

    // Write out membership.
    double Membership = FE.GetMembership();
    stream.write((const char*)&Membership, sizeof(Membership));

    // Write out Tnorm. 
    ETnormOperations Tnorm = FE.GetTnorm();
    stream.write((const char*)&Tnorm,sizeof(Tnorm));

    // Write out Tconorm.
    ETconormOperations Tconorm = FE.GetTconorm();
    stream.write((const char*)&Tconorm,sizeof(Tconorm));
  }

  return WriteResult;
}
Esempio n. 15
0
inline void C2DRoundFrameRect::draw()
{
	if( m_vecRectVertex.size() == 0 )
	{
		CalculateLocalVertexPositions();
		UpdateVertexPositions();
	}

//	DIRECT3D9.GetDevice()->SetFVF( D3DFVF_TLVERTEX );
//	DIRECT3D9.GetDevice()->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, GetNumVertices() - 2, &m_vecRectVertex[0], sizeof(TLVERTEX) );
	Get2DPrimitiveRenderer().Render( &m_vecRectVertex[0], GetNumVertices(), PrimitiveType::TRIANGLE_STRIP );
}
Esempio n. 16
0
	void VulkanRenderer::OutputLog(std::ostream & fout)
	{
		fout << GetName() << "\n[" << GetNumVertices() << " vertices] [" << GetNumTriangles() << " triangles] [" << GetNumObjects() << " objects]" << std::endl;
		fout << "Threads: " << GetNumThreads() << std::endl;

		if(mUseInstancing)
			fout << "Pipeline: " << "Instancing" << std::endl;
		else if (mUseStaticCommandBuffer)
			fout << "Pipeline: " << "Static command buffers" << std::endl;
		else
			fout << "Pipeline: " << "Basic" << std::endl;
	}
bool CFuzzyMembershipFunction::DeleteVertices ()
{
  if (GetNumVertices() != 0)
  {
    m_LastIndex = 0;
    m_LastIterator = m_Verticies.begin();

    m_Verticies.clear();
    return true;
  }
  
  return false;
}
Esempio n. 18
0
std::vector<Triangle2D> ConvexPolygon::Triangulate() const
{
	int numVerts = GetNumVertices();
	const Vec2 *vertices = GetVertices();
	
	std::vector<Triangle2D> ret;
	for(int i = 2;i < numVerts;i++)
	{
		Triangle2D tri(vertices[0],vertices[i - 1],vertices[i]);
		ret.push_back(tri);
	}
	return ret;
}
Esempio n. 19
0
GLuint
OsdCpuGLVertexBuffer::BindVBO() {
    if (not _dataDirty)
        return _vbo;

    int size = GetNumElements() * GetNumVertices() * sizeof(float);

    glBindBuffer(GL_ARRAY_BUFFER, _vbo);
    glBufferData(GL_ARRAY_BUFFER, size, _cpuBuffer, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    _dataDirty = false;
    return _vbo;
}
Esempio n. 20
0
inline void C2DRoundRect::Rotate( const Matrix22& matOrient )
{
	Vector2 v;

	const int num_vertices = GetNumVertices();
	for( int i=0; i<num_vertices; i++ )
	{
		Vector3& vert_pos = m_vecRectVertex[i].m_vPosition;
		v = matOrient * Vector2(vert_pos.x, vert_pos.y);

		vert_pos.x = v.x;
		vert_pos.y = v.y;
	}
}
long CFuzzyMembershipFunction::FindVertex (long key) const
{
  for (long i=0; i < GetNumVertices(); i++)
  {
    CFuzzyElement FE;
    GetVertex(i,&FE);
    if (FE.GetValue() == key)
    {
      return i;
    }
  }

  return -1;
}
Esempio n. 22
0
    void RenderWindowControl::updateInfo()
    {
        auto model = HonViewerApp::GetViewerApp()->GetModelViewer();
        if (!model)
            return;

        int numVerts = model->GetNumVertices();
        int numFaces = model->GetNumFaces();
        int numSubMods = model->GetNumSubModels();
        int numBones = model->GetNumBones();

        DiString info;
        info.Format("%d\n%d\n%d\n%d", numVerts, numFaces, numSubMods, numBones);
        mInfo->setCaption(info.c_str());
    }
Esempio n. 23
0
inline void C2DRoundRect::SetDefault()
{
	if( m_vecRectVertex.size() == 0 )
		return;

	int num_vertices = GetNumVertices();

	for(int i=0; i<num_vertices; i++)
	{
		m_vecRectVertex[i].m_fRHW = 1.0f;
		m_vecRectVertex[i].m_DiffuseColor.SetToBlack();		// opaque by default
	}

	m_DestAlphaBlend = AlphaBlend::InvSrcAlpha;
}
const CFuzzyMembershipFunction CFuzzyMembershipFunction::operator ! ()
{
  CFuzzyElement FE;
  static CFuzzyMembershipFunction FMFreturn;

  FMFreturn.DeleteVertices();
  for (long i=0; i < GetNumVertices(); i++)
  {
    if (GetVertex(i,&FE))
    {
      FMFreturn.AddVertex(!FE);
    }
  }

  return FMFreturn;
}
Esempio n. 25
0
void CClientWater::GetPosition ( CVector& vecPosition ) const
{
    // Calculate the average of the vertex positions
    vecPosition.fX = 0.0f;
    vecPosition.fY = 0.0f;
    vecPosition.fZ = 0.0f;
    if ( !m_pPoly )
        return;

    CVector vecVertexPos;
    for ( int i = 0; i < GetNumVertices (); i++ )
    {
        m_pPoly->GetVertex ( i )->GetPosition ( vecVertexPos );
        vecPosition += vecVertexPos;
    }
    vecPosition /= static_cast < float > ( m_pPoly->GetNumVertices () );
}
Esempio n. 26
0
void Geometry::Normalize(const glm::vec3 &pCenter, float pRadius)
{
    if(mVertexStride >= 3)
    {
        int numberOfVertex = GetNumVertices();
        for( int i = 0; i < numberOfVertex; i++ )
        {
            glm::vec3 vertex(mVertexData[i*mVertexStride], mVertexData[i*mVertexStride + 1], mVertexData[i*mVertexStride + 2]);
            vertex = (vertex - pCenter) / pRadius;
            mVertexData[i*mVertexStride] = vertex.x;
            mVertexData[i*mVertexStride+1] = vertex.y;
            mVertexData[i*mVertexStride+2] = vertex.z;
        }
        mNeedGPUGeometryUpdate = true;
        ComputeBoundingVolumes();
    }
}
Esempio n. 27
0
void Geometry::Transform(const glm::mat4& pTransform)
{
    if(mVertexStride >= 3)
    {
        int numberOfVertex = GetNumVertices();
        for( int i = 0; i < numberOfVertex; i++ )
        {
            glm::vec4 vertex(mVertexData[i*mVertexStride], mVertexData[i*mVertexStride + 1], mVertexData[i*mVertexStride + 2], 1.0f);
            vertex = pTransform * vertex;

            mVertexData[i*mVertexStride] = vertex.x;
            mVertexData[i*mVertexStride+1] = vertex.y;
            mVertexData[i*mVertexStride+2] = vertex.z;
        }
        mNeedGPUGeometryUpdate = true;
        ComputeBoundingVolumes();
    }
}
Esempio n. 28
0
void CClientWater::SetPosition ( const CVector& vecPosition )
{
    if ( !m_pPoly )
        return;

    CVector vecCurrentPosition;
    GetPosition ( vecCurrentPosition );
    CVector vecDelta = vecPosition - vecCurrentPosition;

    CVector vecVertexPos;
    for ( int i = 0; i < GetNumVertices (); i++ )
    {
        m_pPoly->GetVertex ( i )->GetPosition ( vecVertexPos );
        vecVertexPos += vecDelta;
        m_pPoly->GetVertex ( i )->SetPosition ( vecVertexPos );
    }
    g_pGame->GetWaterManager ()->RebuildIndex ();
}
Esempio n. 29
0
inline void C2DRoundFrameRect::UpdateColor()
{
	if( m_vecLocalVertexPosition.size() == 0 || GetNumVertices() == 0 )
		return;

	const int num_segs_per_corner = m_NumSegmentsPerCorner;
	int vert_index = 0;
	for( int i=0; i<4; i++ )
	{
		const SFloatRGBAColor color = m_aCornerColor[i];
		for( int j=0; j<(num_segs_per_corner+1)*2; j++, vert_index++ )
			m_vecRectVertex[vert_index].m_DiffuseColor = color;
	}

	m_vecRectVertex[vert_index++].m_DiffuseColor = m_aCornerColor[0];
	m_vecRectVertex[vert_index].m_DiffuseColor   = m_aCornerColor[0];

}
const CFuzzyElement CFuzzyMembershipFunction::GetVertex (long key) const
{
  CFuzzyElement FE;
  CFuzzyElement FElast;
  
  // Init last fuzzy variable index.
  GetVertex(0,&FElast);

  // Go through the verticies and campare against value.
  for (int v=0; v < GetNumVertices(); v++)
  {
    if (GetVertex(v,&FE))
    {
      if ((FElast.GetValue() <= key) && (key <= FE.GetValue()))
      {
        double Denominator = double(FE.GetValue()) - double(FElast.GetValue());
        if (Denominator != 0.0)
        {
          // Generate equation of the line and get intersection.
          double M = (FE.GetMembership() - FElast.GetMembership()) / Denominator;
          double B = FE.GetMembership() - (M * (FE.GetValue()));
          double Y = (M * double(key)) + B;
    
          FE.SetMembership(Y);
          FE.SetValue(key);
          return FE;
        }
        else
        {
          return FE;
        }
      }
      FElast = FE;
    }
  }

  // Outside of the fuzzy membership functions boundaries, return dummy data.
  FE.SetMembership(0);
  FE.SetValue(0);
  FE.SetTnorm(Min);
  FE.SetTconorm(Max);

  return FE;
}