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; }
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; }
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; } } } }
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; } }
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; }
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; }
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()]; }
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; }
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)); }
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; }
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; }
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 ); }
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; }
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; }
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; }
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; }
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()); }
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; }
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 () ); }
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(); } }
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(); } }
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 (); }
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; }