Beispiel #1
0
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);
	}
}