void SpatialGraphKDNode::Render() { if( HasChildren() ) { LHC->Render(); RHC->Render(); return; } if( theSpatialGraph.GetDrawBlocked() ) { if( bBlocked ) { glColor4f(1,0,0,0.25f); BBox.RenderBox(); } } if( theSpatialGraph.GetDrawBounds() ) { glColor4f(0,0,0,1.f); BBox.RenderOutline(); } Vector2 centroid = BBox.Centroid(); if( theSpatialGraph.GetDrawNodeIndex() ) { Vector2 screenCenter = MathUtil::WorldToScreen( centroid.X, centroid.Y ); //Print some vals glColor3f(0,1.f,1.f); DrawGameText( IntToString(Index), "ConsoleSmall", (unsigned int)screenCenter.X, (unsigned int)screenCenter.Y ); } if( theSpatialGraph.GetDrawGraph() && !bBlocked ) { glColor3f(1.f,0.f,0.f); float linePoints[4]; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, linePoints); for( unsigned int i = 0; i < Neighbors.size(); i++ ) { if( Neighbors[i]->bBlocked || !NeighborLOS[i] ) continue; //draw centroid to centroid half way point Vector2 neighbor = Neighbors[i]->BBox.Centroid(); neighbor = centroid + ((neighbor - centroid) * 0.6f); linePoints[0] = centroid.X; linePoints[1] = centroid.Y; linePoints[2] = neighbor.X; linePoints[3] = neighbor.Y; glDrawArrays(GL_LINES, 0, 2); } } if( theSpatialGraph.GetDrawGridPoints() ) { glColor3f(1.f,0.f,0.f); Vector2List gridPoints; int xPoints, yPoints; GetGridPoints(gridPoints, xPoints, yPoints ); for( unsigned int i = 0; i < gridPoints.size(); i++ ) { DrawPoint( gridPoints[i], Tree->GetSmallestDimensions().X * 0.15f ); } } }
void MultiDrawIndirect::SetupMultipleModelData() { NvModel* pData; float* pVertexData; uint32_t* pIndexData; unsigned int j; pIndexData = (uint32_t *) glMapBufferRange( GL_ELEMENT_ARRAY_BUFFER, 0, m_SizeofIndexBuffer, GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); pVertexData = (float *) glMapBufferRange( GL_ARRAY_BUFFER, 0, m_SizeofVertexBuffer, GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); pData = m_Model->getModel(); for (unsigned int k = 0; k < m_MaxModelInstances; k++) { float *pPositionData, Scale; memcpy( pVertexData, pData->getCompiledVertices(), pData->getCompiledVertexCount() * m_VertexSize); pPositionData = pVertexData; Scale = 1.0f + (rand() / (float) RAND_MAX) * 3.0f;; for (int z = 0; z < pData->getCompiledVertexCount(); z++) { pPositionData[0] = pPositionData[0]; pPositionData[1] = pPositionData[1] * Scale; pPositionData[2] = pPositionData[2]; pPositionData += pData->getCompiledVertexSize(); } pVertexData += pData->getCompiledVertexCount() * pData->getCompiledVertexSize(); } memcpy( pIndexData, pData->getCompiledIndices(NvModelPrimType::TRIANGLES), pData->getCompiledIndexCount() * m_IndexSize); pIndexData += pData->getCompiledIndexCount(); float* pInstData = (float*)pVertexData; for (j = 0; j < m_MaxGridSize; j++) { GetGridPoints(j, m_Offsets); } for (j = 0; j < m_MaxGridSize * m_MaxGridSize; j++) { *(pInstData++) = m_Offsets[2 * j]; *(pInstData++) = m_Offsets[(2 * j) + 1]; } glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); glUnmapBuffer(GL_ARRAY_BUFFER); }