Code Search for Developers
 
 
  

TerrainBlock.h from NeoEngineNG at Krugle


Show TerrainBlock.h syntax highlighted

// Demeter Terrain Visualization Library by Clay Fowler
// Copyright (C) 2002 Clay Fowler

// $ID$

/*
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA  02111-1307, USA.
*/

#ifndef _TERRAIN_BLOCK_DEMETER_H_
#define _TERRAIN_BLOCK_DEMETER_H_

#include "Demeter/Globals.h"
#include "Demeter/Ray.h"
#include "Demeter/Terrain.h"
#include "Demeter/Vector.h"
#include "Demeter/Triangle.h"

int RayPlaneIntersect(const Demeter::Ray * ray, const Demeter::Plane * plane, Demeter::Vector * point, float *distance);
int RayBoxIntersect(const Demeter::Ray * ray, const Demeter::Box * box, Demeter::Vector * point, float *distance);

/// \brief The Demeter Terrain Engine.
namespace Demeter
{
	class TerrainBlock
	{
	public:
		TerrainBlock(TerrainBlock * pParent);
		TerrainBlock(int homeVertex, int stride, Terrain * pTerrain, TerrainBlock * pParent);
		~TerrainBlock();
		void Tessellate(const float cameraPosX,const float cameraPosY,const double* pMatrixModelview, const double* pMatrixProjection, const int* pViewport, Terrain* pTerrain);
		void Write(FILE * file);
		void Read(FILE * file, Terrain* pTerrain);
		bool IsActive(Terrain* pTerrain);
		void RepairCracks(Terrain * pTerrain);
		int GetStride();
		void EnableStrip(bool bEnabled);
		int GetHomeIndex();
		void CalculateGeometry(Terrain * pTerrain);
		void VertexChanged(Terrain * pTerrain);
		void VertexChanged(Terrain * pTerrain, int index1);
		void VertexChanged(Terrain * pTerrain, int index1, int index2);
		void IntersectRay(const Ray & ray, Vector & intersectionPoint, float &lowestDistance, const Terrain * pTerrain);
	private:
		void CreateTriangleStrip(Terrain * pTerrain);
		TerrainBlock **m_pChildren;
		int m_HomeIndex;
		short int m_Stride;
		bool m_bChildrenActive;
//		float m_MinElevation, m_MaxElevation;
		// FIXME: Don't need both BPlane_Max_D/Min_D and Box.m_Max/Min.z
		// Bounding Planes given by A,B,Max_D and A,B,Min_D - C defined as 1
		float m_BPlane_A, m_BPlane_B, m_BPlane_Max_D, m_BPlane_Min_D;
		Triangle *m_pTriangles;
		GLuint* m_pTriangleVertices;
		TextureCell* m_pTextureCell;
		bool m_bIsActive;
		Demeter::Box m_BoundingBox;

		GLuint* m_pFanVertices;
		Uint32 m_NumFanVertices;
		Uint32 m_NumFanVerticesAllocated;

		bool m_IsUsingFans;

		friend class Terrain;
		friend class TextureCell;
	};
}

#endif




See more files for this project here

NeoEngineNG

NeoenEngine NG (Next Generation) is the evolution of neoengine one,it\'s a different development from NeoEngine2, it\'s a direct inherits from NeoEngine one.\n

Project homepage: http://sourceforge.net/projects/neoengineng
Programming language(s): C,C++
License: other

  BitArray.h
  Box.h
  Brush.h
  Demeter.h
  DemeterConfig.h
  DemeterConfig.h.in
  DemeterDrawable.h
  DemeterException.h
  DetailTexture.h
  GDALElevationLoader.h
  Globals.h
  ImageLoader.h
  Loader.h
  OGLSL.h
  Plane.h
  Ray.h
  SDLTextureLoader.h
  Settings.h
  Shader.h
  SkyBox.h
  SkyBoxDrawable.h
  StdAfx.h
  Terrain.h
  TerrainBlock.h
  TerrainLattice.h
  TerrainLoadListener.h
  TerrainVertex.h
  Texture.h
  TextureCell.h
  TextureSet.h
  Triangle.h
  Vector.h
  config.h