void CChunkTrees::Render() const { if (!m_bTreesGenerated) return; if (!m_avecOrigins.size()) return; CreateTreeVBO(); float flScale = (float)CScalableFloat::ConvertUnits(1, m_pManager->m_pPlanet->GetScale(), SCALE_METER); Matrix4x4 mTransform = m_mChunk; CRenderingContext r(GameServer()->GetRenderer(), true); r.UseMaterial("textures/tree.mat"); r.SetUniform("vecColor", Vector4D(1, 1, 1, 1)); size_t iTrees = m_avecOrigins.size(); for (size_t i = 0; i < iTrees; i++) { if (!m_abActive[i]) continue; DoubleVector vecTree = m_avecOrigins[i]; DoubleVector vecToTree = vecTree - m_pManager->m_pPlanet->GetCharacterLocalOrigin(); mTransform.SetRightVector(vecToTree.Cross(mTransform.GetUpVector()).Normalized()); mTransform.SetTranslation(vecToTree*flScale - mTransform.GetUpVector()); r.LoadTransform(mTransform); r.BeginRenderVertexArray(s_iTreeVBO); r.SetPositionBuffer(0u, 5*sizeof(float)); r.SetTexCoordBuffer(3*sizeof(float), 5*sizeof(float), 0); r.EndRenderVertexArray(s_iTreeVBOSize); } }