本文整理汇总了C#中TgcViewer.Utils.TgcSceneLoader.TgcMesh.createMeshInstance方法的典型用法代码示例。如果您正苦于以下问题:C# TgcMesh.createMeshInstance方法的具体用法?C# TgcMesh.createMeshInstance怎么用?C# TgcMesh.createMeshInstance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TgcViewer.Utils.TgcSceneLoader.TgcMesh
的用法示例。
在下文中一共展示了TgcMesh.createMeshInstance方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: instanceOf
protected TgcMesh instanceOf(TgcMesh m)
{
TgcMesh i = m.createMeshInstance(m.Name+m.MeshInstances.Count.ToString());
i.AlphaBlendEnable = m.AlphaBlendEnable;
return i;
}
示例2: init
public override void init()
{
Device d3dDevice = GuiController.Instance.D3dDevice;
//Crear suelo
TgcTexture pisoTexture = TgcTexture.createTexture(d3dDevice, GuiController.Instance.ExamplesMediaDir + "Texturas\\pasto.jpg");
suelo = TgcBox.fromSize(new Vector3(500, 0, 500), new Vector3(2000, 0, 2000), pisoTexture);
//Cargar modelo de palmera original
TgcSceneLoader loader = new TgcSceneLoader();
TgcScene scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vegetacion\\Palmera\\Palmera-TgcScene.xml");
palmeraOriginal = scene.Meshes[0];
//Crear varias instancias del modelo original, pero sin volver a cargar el modelo entero cada vez
int rows = 5;
int cols = 6;
float offset = 200;
meshes = new List<TgcMesh>();
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
//Crear instancia de modelo
TgcMesh instance = palmeraOriginal.createMeshInstance( palmeraOriginal.Name + i + "_" + j );
//Desplazarlo
instance.move(i * offset, 70, j * offset);
instance.Scale = new Vector3(0.25f, 0.25f, 0.25f);
meshes.Add(instance);
}
}
//Camara en primera persona
GuiController.Instance.FpsCamera.Enable = true;
GuiController.Instance.FpsCamera.MovementSpeed = 400;
GuiController.Instance.FpsCamera.JumpSpeed = 400;
GuiController.Instance.FpsCamera.setCamera(new Vector3(61.8657f, 403.7024f, -527.558f), new Vector3(379.7143f, 12.9713f, 336.3295f));
}
示例3: init
public override void init()
{
Device d3dDevice = GuiController.Instance.D3dDevice;
MyMediaDir = GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Media\\";
MyShaderDir = GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Shaders\\";
//Crear loader
TgcSceneLoader loader = new TgcSceneLoader();
//Cargar mesh
scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "ModelosTgc\\Teapot\\Teapot-TgcScene.xml");
mesh = scene.Meshes[0];
mesh.Scale = new Vector3(1f, 1f, 1f);
mesh.Position = new Vector3(-100f, -5f, 0f);
// Arreglo las normales
int [] adj = new int[mesh.D3dMesh.NumberFaces*3];
mesh.D3dMesh.GenerateAdjacency(0,adj);
mesh.D3dMesh.ComputeNormals(adj);
//Cargar Shader personalizado
effect = TgcShaders.loadEffect(GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Shaders\\ToonShading.fx");
// le asigno el efecto a la malla
mesh.Effect = effect;
mesh.Technique = "DefaultTechnique";
// Creo las instancias de malla
instances = new List<TgcMesh>();
for (int i = -5; i < 5; i++)
for (int j = -5; j < 5; j++)
{
TgcMesh instance = mesh.createMeshInstance(mesh.Name + i);
instance.move(i * 50, (i + j) * 5, j * 50);
instances.Add(instance);
}
GuiController.Instance.Modifiers.addVertex3f("LightPosition", new Vector3(-100, -100, -100), new Vector3(100, 100, 100), new Vector3(0, 40, 0));
GuiController.Instance.Modifiers.addFloat("Ambient", 0, 1, 0.5f);
GuiController.Instance.Modifiers.addFloat("Diffuse", 0, 1, 0.6f);
GuiController.Instance.Modifiers.addFloat("Specular", 0, 1, 0.5f);
GuiController.Instance.Modifiers.addFloat("SpecularPower", 1, 100, 16);
GuiController.Instance.RotCamera.setCamera(new Vector3(20, 20, 0), 200);
GuiController.Instance.RotCamera.CameraDistance = 300;
GuiController.Instance.RotCamera.RotationSpeed = 1.5f;
// Creo un depthbuffer sin multisampling, para que sea compatible con el render to texture
// Nota:
// El render to Texture no es compatible con el multisampling en dx9
// Por otra parte la mayor parte de las placas de ultima generacion no soportan
// mutisampling para texturas de punto flotante con lo cual
// hay que suponer con generalidad que no se puede usar multisampling y render to texture
// Para resolverlo hay que crear un depth buffer que no tenga multisampling,
// (de lo contrario falla el zbuffer y se producen artifacts tipicos de que no tiene zbuffer)
// Si uno quisiera usar el multisampling, la tecnica habitual es usar un RenderTarget
// en lugar de una textura.
// Por ejemplo en c++:
//
// Render Target formato color buffer con multisampling
//
// g_pd3dDevice->CreateRenderTarget(Ancho,Alto,
// D3DFMT_A8R8G8B8, D3DMULTISAMPLE_2_SAMPLES, 0,
// FALSE, &g_pRenderTarget, NULL);
//
// Luego, ese RenderTarget NO ES una textura, y nosotros necesitamos acceder a esos
// pixeles, ahi lo que se hace es COPIAR del rendertartet a una textura,
// para poder trabajar con esos datos en el contexto del Pixel shader:
//
// Eso se hace con la funcion StretchRect:
// copia de rendertarget ---> sceneSurface (que es la superficie asociada a una textura)
// g_pd3dDevice->StretchRect(g_pRenderTarget, NULL, g_pSceneSurface, NULL, D3DTEXF_NONE);
//
// Esta tecnica se llama downsampling
// Y tiene el costo adicional de la transferencia de memoria entre el rendertarget y la
// textura, pero que no traspasa los limites de la GPU. (es decir es muy performante)
// no es lo mismo que lockear una textura para acceder desde la CPU, que tiene el problema
// de transferencia via AGP.
g_pDepthStencil = d3dDevice.CreateDepthStencilSurface(d3dDevice.PresentationParameters.BackBufferWidth,
d3dDevice.PresentationParameters.BackBufferHeight,
DepthFormat.D24S8,
MultiSampleType.None,
0,
true);
// inicializo el render target
g_pRenderTarget = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
, d3dDevice.PresentationParameters.BackBufferHeight, 1, Usage.RenderTarget,
Format.X8R8G8B8, Pool.Default);
effect.SetValue("g_RenderTarget", g_pRenderTarget);
// inicializo el mapa de normales
g_pNormals = new Texture(d3dDevice, d3dDevice.PresentationParameters.BackBufferWidth
//.........这里部分代码省略.........
示例4: generarArboles
private void generarArboles(int cantidadArboles)
{
scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vegetacion\\" + tipoArboles[0] + "-TgcScene.xml");
arbol = scene.Meshes[0];
for (int i = 0; i < cantidadArboles; i++)
{
TgcMesh instancia = arbol.createMeshInstance("arbol");
TgcBoundingCylinder instanciaCilindro = new TgcBoundingCylinder(this.divisionesPiso[i], 15, 100);
instancia.Scale = new Vector3(3f, 3f, 3f);
instancia.Position = this.divisionesPiso[i];
instancia.AlphaBlendEnable = true;
//Agrego efecto y tecnica
instancia.Effect = efecto;
instancia.Technique = "VientoArbol";
arboles.Add(instancia);
colisionables.Add(instanciaCilindro);
}
}
示例5: init
public override void init()
{
Device d3dDevice = GuiController.Instance.D3dDevice;
MyMediaDir = GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Media\\";
MyShaderDir = GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Shaders\\";
//Crear loader
TgcSceneLoader loader = new TgcSceneLoader();
// ------------------------------------------------------------
// Creo el Heightmap para el terreno:
Vector3 PosTerrain = new Vector3(0, 0, 0);
currentHeightmap = MyMediaDir + "Heighmaps\\Heightmap2.jpg";
currentScaleXZ = 100f;
currentScaleY = 2f;
currentTexture = MyMediaDir + "Heighmaps\\TerrainTexture3.jpg";
terrain = new TgcSimpleTerrain();
terrain.loadHeightmap(currentHeightmap, currentScaleXZ, currentScaleY, PosTerrain);
terrain.loadTexture(currentTexture);
// ------------------------------------------------------------
// Crear SkyBox:
skyBox = new TgcSkyBox();
skyBox.Center = new Vector3(0, 0, 0);
skyBox.Size = new Vector3(8000, 8000, 8000);
string texturesPath = GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\SkyBox1\\";
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Up, texturesPath + "phobos_up.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Down, texturesPath + "phobos_dn.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Left, texturesPath + "phobos_lf.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Right, texturesPath + "phobos_rt.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Front, texturesPath + "phobos_bk.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Back, texturesPath + "phobos_ft.jpg");
skyBox.SkyEpsilon = 50f;
skyBox.updateValues();
// ------------------------------------------------------------
//Cargar los mesh:
scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "MeshCreator\\Meshes\\Vehiculos\\TanqueFuturistaRuedas\\TanqueFuturistaRuedas-TgcScene.xml");
mesh = scene.Meshes[0];
sceneX = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "ModelosTgc\\Sphere\\Sphere-TgcScene.xml");
meshX = sceneX.Meshes[0];
scene2 = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "MeshCreator\\Meshes\\Vegetacion\\Palmera\\Palmera-TgcScene.xml");
palmera = scene2.Meshes[0];
scene3 = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "MeshCreator\\Meshes\\Vehiculos\\AvionCaza\\AvionCaza-TgcScene.xml");
avion = scene3.Meshes[0];
mesh.Scale = new Vector3(0.5f, 0.5f, 0.5f);
mesh.Position = new Vector3(0f, 0f, 0f);
mesh.AutoTransformEnable = false;
Vector3 size = mesh.BoundingBox.calculateSize();
largo_tanque = Math.Abs(size.Z);
alto_tanque = Math.Abs(size.Y) * mesh.Scale.Y;
avion.Scale = new Vector3(1f, 1f, 1f);
avion.Position = new Vector3(3000f, 550f, 0f);
avion.AutoTransformEnable = false;
dir_avion = new Vector3(0, 0, 1);
size = palmera.BoundingBox.calculateSize();
float alto_palmera = Math.Abs(size.Y);
int i;
bosque = new List<TgcMesh>();
float[] r = { 1900f, 2100f, 2300f, 1800f };
for (i = 0; i < 4; i++)
for (int j = 0; j < 15; j++)
{
TgcMesh instance = palmera.createMeshInstance(palmera.Name + i);
instance.Scale = new Vector3(0.5f, 1.5f, 0.5f);
float x = r[i] * (float)Math.Cos(Geometry.DegreeToRadian(180 + 10.0f * j));
float z = r[i] * (float)Math.Sin(Geometry.DegreeToRadian(180 + 10.0f * j));
instance.Position = new Vector3(x, CalcularAltura(x, z) /*+ alto_palmera / 2 * instance.Scale.Y*/, z);
bosque.Add(instance);
}
GuiController.Instance.RotCamera.CameraDistance = 300;
GuiController.Instance.RotCamera.RotationSpeed = 1.5f;
// Arreglo las normales del tanque
/*int[] adj = new int[mesh.D3dMesh.NumberFaces * 3];
mesh.D3dMesh.GenerateAdjacency(0, adj);
mesh.D3dMesh.ComputeNormals(adj);
*/
// Arreglo las normales de la esfera
{
int[] adj = new int[meshX.D3dMesh.NumberFaces * 3];
meshX.D3dMesh.GenerateAdjacency(0, adj);
meshX.D3dMesh.ComputeNormals(adj);
}
//Cargar Shader personalizado
effect = TgcShaders.loadEffect(GuiController.Instance.ExamplesDir + "Shaders\\WorkshopShaders\\Shaders\\EnvMap.fx");
// le asigno el efecto a la malla
mesh.Effect = effect;
//.........这里部分代码省略.........
示例6: init
public override void init()
{
Device d3dDevice = GuiController.Instance.D3dDevice;
//Crear loader
TgcSceneLoader loader = new TgcSceneLoader();
// ------------------------------------------------------------
// Creo el Heightmap para el terreno:
terrain = new MySimpleTerrain();
terrain.loadHeightmap(GuiController.Instance.ExamplesDir
+ "Shaders\\WorkshopShaders\\Media\\Heighmaps\\" + "Heightmap3.jpg", 100f, 1f, new Vector3(0, 0, 0));
terrain.loadTexture(GuiController.Instance.ExamplesDir
+ "Shaders\\WorkshopShaders\\Media\\Heighmaps\\" + "TerrainTexture3.jpg");
// ------------------------------------------------------------
// Crear SkyBox:
skyBox = new TgcSkyBox();
skyBox.Center = new Vector3(0, 0, 0);
skyBox.Size = new Vector3(8000, 8000, 8000);
string texturesPath = GuiController.Instance.ExamplesMediaDir + "Texturas\\Quake\\SkyBox1\\";
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Up, texturesPath + "phobos_up.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Down, texturesPath + "phobos_dn.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Left, texturesPath + "phobos_lf.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Right, texturesPath + "phobos_rt.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Front, texturesPath + "phobos_bk.jpg");
skyBox.setFaceTexture(TgcSkyBox.SkyFaces.Back, texturesPath + "phobos_ft.jpg");
skyBox.SkyEpsilon = 50f;
skyBox.updateValues();
// ------------------------------------------------------------
//Cargar los mesh:
scene = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "MeshCreator\\Meshes\\Vehiculos\\TanqueFuturistaRuedas\\TanqueFuturistaRuedas-TgcScene.xml");
mesh = scene.Meshes[0];
scene2 = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "MeshCreator\\Meshes\\Vegetacion\\Palmera\\Palmera-TgcScene.xml");
palmera = scene2.Meshes[0];
scene3 = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir
+ "MeshCreator\\Meshes\\Vehiculos\\Canoa\\Canoa-TgcScene.xml");
canoa = scene3.Meshes[0];
scene4 = loader.loadSceneFromFile(GuiController.Instance.ExamplesDir
+ "Shaders\\WorkshopShaders\\Media\\Piso\\Agua-TgcScene.xml");
piso = scene4.Meshes[0];
mesh.Scale = new Vector3(0.5f, 0.5f, 0.5f);
mesh.Position = new Vector3(0f, 0f, 0f);
mesh.AutoTransformEnable = false;
Vector3 size = mesh.BoundingBox.calculateSize();
largo_tanque = Math.Abs(size.Z);
alto_tanque = Math.Abs(size.Y) * mesh.Scale.Y;
vel_tanque = 10;
an_tanque = 0;
canoa.Scale = new Vector3(1f, 1f, 1f);
canoa.Position = new Vector3(3000f, 550f, 0f);
canoa.AutoTransformEnable = false;
dir_canoa = new Vector3(0, 0, 1);
nivel_mar = 135f;
piso.Scale = new Vector3(25f, 1f, 25f);
piso.Position = new Vector3(0f, nivel_mar, 0f);
size = palmera.BoundingBox.calculateSize();
float alto_palmera = Math.Abs(size.Y);
cant_palmeras = 0;
int i;
bosque = new List<TgcMesh>();
float[] r = { 1850f, 2100f, 2300f, 1800f };
for (i = 0; i < 4; i++)
for (int j = 0; j < 15; j++)
{
TgcMesh instance = palmera.createMeshInstance(palmera.Name + i);
instance.Scale = new Vector3(0.5f, 1.5f, 0.5f);
float x = r[i] * (float)Math.Cos(Geometry.DegreeToRadian(100 + 10.0f * j));
float z = r[i] * (float)Math.Sin(Geometry.DegreeToRadian(100 + 10.0f * j));
instance.Position = new Vector3(x, terrain.CalcularAltura(x, z) /*+ alto_palmera / 2 * instance.Scale.Y*/, z);
bosque.Add(instance);
++cant_palmeras;
}
// segunda parte: la isla del medio
// estas no entran en el env. map (porque se supone que el env. map esta lejos
// del pto de vista del observador y estas palmeras estan en el medio del lago)
float[] r2 = { 200f, 350f, 400f, 477f };
for (i = 0; i < 4; i++)
for (int j = 0; j < 5; j++)
{
TgcMesh instance = palmera.createMeshInstance(palmera.Name + i);
instance.Scale = new Vector3(0.5f, 1f + j/5f*0.33f, 0.5f);
float x = r2[i] * (float)Math.Cos(Geometry.DegreeToRadian(25.0f * j));
float z = r2[i] * (float)Math.Sin(Geometry.DegreeToRadian(25.0f * j));
instance.Position = new Vector3(x, terrain.CalcularAltura(x, z) /*+ alto_palmera / 2 * instance.Scale.Y*/ , z);
bosque.Add(instance);
}
GuiController.Instance.RotCamera.CameraDistance = 300;
GuiController.Instance.RotCamera.RotationSpeed = 1.5f;
//.........这里部分代码省略.........
示例7: inicializarPiedras
private void inicializarPiedras()
{
string alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosMediaDir;
//Cargar modelo de palmera original
TgcSceneLoader loader1 = new TgcSceneLoader();
scene = loader1.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vegetacion\\Roca\\Roca-TgcScene.xml");
piedraOriginal = scene.Meshes[0];
piedraOriginal.AlphaBlendEnable = true;
//Crear varias instancias del modelo original, pero sin volver a cargar el modelo entero cada vez
int rows = 30;
int cols = 20;
piedras = new List<TgcMesh>();
//bool moverFila=false;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
//Crear instancia de modelo
TgcMesh instance = piedraOriginal.createMeshInstance(pastoOriginal.Name + i + "_" + j);
instance.AlphaBlendEnable = true;
//Desplazarlo
instance.move(rand.Next(-10000, 10000), 0, rand.Next(-10000, 10000));
instance.Scale = new Vector3(2f, 2f, 2f);
piedras.Add(instance);
}
}
}
示例8: inicializarBarriles
private void inicializarBarriles()
{
string alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosMediaDir;
Random rand1 = new Random();
//Cargar modelo de palmera original
TgcSceneLoader loader1 = new TgcSceneLoader();
scene = loader1.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Objetos\\BarrilPolvora\\BarrilPolvora-TgcScene.xml");
barril = scene.Meshes[0];
//barril.AlphaBlendEnable = true;
//Crear varias instancias del modelo original, pero sin volver a cargar el modelo entero cada vez
int rows = 2;
int cols = 5;
barriles = new List<Barril>();
explosiones = new List<TgcMesh>();
//bool moverFila=false;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
//Crear instancia de modelo
TgcMesh instance = barril.createMeshInstance(barril.Name + i + "_" + j);
instance.AlphaBlendEnable = true;
TgcMesh instanceExplosion = esferaExplosion.createMeshInstance(i + "_" + j);
instanceExplosion.AlphaBlendEnable = true;
//Desplazarlo
instance.move(rand1.Next(-5000, 5000), 0, rand1.Next(-5000, 5000));
instance.Scale = new Vector3(4f, 4f, 4f);
instanceExplosion.Position = instance.Position;
instanceExplosion.move(new Vector3(0f, 100f, 0f));
instanceExplosion.Scale = new Vector3(6f, 6f, 6f);
Effect fx = TgcShaders.loadEffect(GuiController.Instance.AlumnoEjemplosMediaDir + "Shaders\\explosion.fx");
instanceExplosion.Effect = fx;
instanceExplosion.Technique = "explosion";
Barril instanciaBarril = new Barril(instance);
barriles.Add(instanciaBarril);
explosiones.Add(instanceExplosion);
}
}
}
示例9: inicializarArboles
private void inicializarArboles()
{
string alumnoMediaFolder = GuiController.Instance.AlumnoEjemplosMediaDir;
//Cargar modelo de palmera original
TgcSceneLoader loader1 = new TgcSceneLoader();
scene = loader1.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vegetacion\\Palmera\\Palmera-TgcScene.xml");
palmeraOriginal = scene.Meshes[0];
//Cargar Shader personalizado
palmeraOriginal.Effect = effect;
palmeraOriginal.Technique = "RenderScene";
//Cargar modelo de otro arbol
TgcSceneLoader loader2 = new TgcSceneLoader();
scene = loader2.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "MeshCreator\\Meshes\\Vegetacion\\ArbolSelvatico2\\ArbolSelvatico2-TgcScene.xml");
otroArbolOriginal = scene.Meshes[0];
//Cargar Shader personalizado
otroArbolOriginal.Effect = effect;
otroArbolOriginal.Technique = "RenderScene";
//Crear varias instancias del modelo original, pero sin volver a cargar el modelo entero cada vez
int rows = 30;
int cols = 10;
//float offset = 500;
BBZona1 = new List<TgcBoundingBox>();
BBZona2 = new List<TgcBoundingBox>();
BBZona3 = new List<TgcBoundingBox>();
BBZona4 = new List<TgcBoundingBox>();
arboles = new List<TgcMesh>();
//bool moverFila=false;
int i = 0;
int j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
//Crear instancia de modelo
TgcMesh instance = palmeraOriginal.createMeshInstance(palmeraOriginal.Name + i + "_" + j);
instance.Effect = effect;
instance.Technique = "RenderScene";
instance.AlphaBlendEnable = true;
//Desplazarlo
instance.move(rand.Next(-10000, 10000), 0, rand.Next(-10000, 10000));
instance.Scale = new Vector3(1.3f, 1.3f, 1.3f);
//instance.move(0f, terreno.HeightmapData[(int)(instance.Position.X/350f/64f),(int)(instance.Position.Z/350f/64f)] * 1.6f, 0f);
//instance.Position.Y = (float)terreno.HeightmapData.GetValue((int)(instance.Position.X / 350f), (int)(instance.Position.Z / 350f));
arboles.Add(instance);
obtenerListaZona(instance.Position).Add(clonarBoundingBoxArbol(instance.BoundingBox));
}
}
i = 0; j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
//Crear instancia de modelo
TgcMesh instance2 = otroArbolOriginal.createMeshInstance(otroArbolOriginal.Name + i + "_" + j);
instance2.Effect = effect;
instance2.Technique = "RenderScene";
instance2.AlphaBlendEnable = true;
//Desplazarlo
instance2.move(rand.Next(-10000, 10000), 0, rand.Next(-10000, 10000));
instance2.Scale = new Vector3(10f, 10f, 10f);
arboles.Add(instance2);
obtenerListaZona(instance2.Position).Add(clonarBoundingBoxArbol(instance2.BoundingBox));
}
}
}