Download - 2 D To 3 D Terrain Generator
![Page 1: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/1.jpg)
Mehmet Aydın Bahadır
Muhammed Fatih Polat
Ahmet Taşçı
![Page 2: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/2.jpg)
XNA Nedir? 2004 – San Jose
Öğrenciler, Hobi
.NET altyapısı
C# dili
DirectX
Windows, Xbox 360
![Page 3: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/3.jpg)
XNA Nedir? - 2 http://creators.xna.com/en-US/
Raven XNA http://www.codeplex.com/RavenXNA
Reactor 3D http://www.reactor3d.com/site/
Carot http://www.carotengine.com/
Physic http://www.codeplex.com/FarseerPhysics
![Page 4: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/4.jpg)
Hadi Başlayalım Microsoft XNA Game Studio 3.1
Visual Studio 2008 SP1
.NET Framework 2.0 Runtime
XNA Framework Runtime
Directx SDK
Directx Runtime
![Page 5: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/5.jpg)
2D to 3D
![Page 6: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/6.jpg)
Effect Dosyası ? XNA – Üçgenler, üçgenler, üçgenler
Üçgeni nasıl göstereceğim?
.fx
Effect effect
effect = Content.Load<Effect> ("effects");
![Page 7: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/7.jpg)
Indisleme
![Page 8: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/8.jpg)
Basit bir terrain? 4x3’lük bir matris.
private float[,] heightData;
private void LoadHeightData()
private void SetUpVertices()
private void SetUpIndices()
vertices[x + y * terrainWidth].Position = new Vector3(x, heightData[x,y], -y);
![Page 9: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/9.jpg)
Basit bir Terrain?
![Page 10: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/10.jpg)
Dosyadan Terrain (?) Grayscale resimler
En yükseğe beyazlar! Siyahlar inin aşağıya!
Oku bakalım: Texture2D heightMap = Content.Load<Texture2D> ("heightmap");LoadHeightData(heightMap);
Content – bmp, jpg, png ...
![Page 11: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/11.jpg)
Okudum! private void LoadHeightData(Texture2D heightMap)
{terrainWidth = heightMap.Width;terrainHeight = heightMap.Height;
Color[] heightMapColors = new Color[terrainWidth * terrainHeight];
heightMap.GetData(heightMapColors);
heightData = new float[terrainWidth, terrainHeight];for (int x = 0; x < terrainWidth; x++)
for (int y = 0; y < terrainHeight; y++)heightData[x, y] = heightMapColors[x + y *
terrainWidth].R / 5.0f;}
![Page 12: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/12.jpg)
Ne oldu şimdi? Her bir nokta için yükseklik bilgisi var.
SetUpIndice – her noktanın arrayı için vertex.
SetUpIndices – Terraini kurmak için her üçgene 3 indis.
Draw – indisler dizileri izin verdikçe üçgenleri renderlemeye devam et.
![Page 13: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/13.jpg)
Ne oldu şimdi? -2
![Page 14: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/14.jpg)
Renksiz ?
![Page 15: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/15.jpg)
Karıştır Karıştır Karıştır vertices[x + y * terrainWidth].Position = new
Vector3(x, heightData[x, y], -y);
if (heightData[x, y] < minHeight + (maxHeight -minHeight) / 4)
vertices[x + y * terrainWidth].Color = Color.Blue;else if (heightData[x, y] < minHeight + (maxHeight -minHeight) * 2 / 4)
vertices[x + y * terrainWidth].Color = Color.Green;else if (heightData[x, y] < minHeight + (maxHeight -minHeight) * 3 / 4)
vertices[x + y * terrainWidth].Color = Color.Brown;else
vertices[x + y * terrainWidth].Color = Color.White;
![Page 16: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/16.jpg)
Karıştır ?
![Page 17: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/17.jpg)
Kör oldum Işık verelim:
![Page 18: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/18.jpg)
Işık? Tüm vertexlerin normalizesini istiyorum.
Bu verileri vertex datasına iletmeliyim
Bir normalize, bir renk ve bir pozisyon XNA için fazla!
Fakat bu sorun olmasa gerek?
![Page 19: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/19.jpg)
Işık - 2 public struct VertexPositionNormalColored
{public Vector3 Position;public Color Color;public Vector3 Normal;
public static int SizeInBytes = 7 * 4;public static VertexElement[] VertexElements = new VertexElement[]{
new VertexElement( 0, 0, VertexElementFormat.Vector3, VertexElementMethod.Default, VertexElementUsage.Position, 0 ),
new VertexElement( 0, sizeof(float) * 3, VertexElementFormat.Color, VertexElementMethod.Default, VertexElementUsage.Color, 0 ),
new VertexElement( 0, sizeof(float) * 4, VertexElementFormat.Vector3, VertexElementMethod.Default, VertexElementUsage.Normal, 0 ),
};}
![Page 20: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/20.jpg)
Işık – Sonuç?
![Page 21: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/21.jpg)
Terrain’im Işık İster! private void CalculateNormals()
{for (int i = 0; i < vertices.Length; i++)
vertices[i].Normal = new Vector3(0, 0, 0);}
for (int i = 0; i < indices.Length / 3; i++){
int index1 = indices[i * 3];int index2 = indices[i * 3 + 1];int index3 = indices[i * 3 + 2];
Vector3 side1 = vertices[index1].Position - vertices[index3].Position;Vector3 side2 = vertices[index1].Position - vertices[index2].Position;Vector3 normal = Vector3.Cross(side1, side2);
vertices[index1].Normal += normal;vertices[index2].Normal += normal;vertices[index3].Normal += normal;
}
![Page 22: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/22.jpg)
Terrain’im Işık İster - 2 for (int i = 0; i < vertices.Length; i++)
vertices[i].Normal.Normalize();
Load Content’te unutmayıver şunu yazmayı:CalculateNormals();
Okus pokus desin ışıklar terrainime!
Vector3 lightDirection = new Vector3(1.0f, -1.0f, -1.0f);lightDirection.Normalize();effect.Parameters["xLightDirection"].SetValue(lightDirection);effect.Parameters["xAmbient"].SetValue(0.1f);
![Page 23: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/23.jpg)
Terrain’im Işık İster - 3
![Page 24: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/24.jpg)
Eee Optimizasyonu Nerde Bunun? Optimizasyona birebir: Vertexbuffer, Indexbuffer! “İlaç
gibi keser.”
Neden? Bırakalım da ekran kartı biraz şekerleme yapabilsin!
Vertex’lerin IndexBuffer’a gideceği yok ya!
![Page 25: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/25.jpg)
Neymiş kodları? VertexBuffer myVertexBuffer;
IndexBuffer myIndexBuffer;
private void CopyToBuffers(){
myVertexBuffer = new VertexBuffer(device, vertices.Length * VertexPositionNormalColored.SizeInBytes, BufferUsage.WriteOnly);
myVertexBuffer.SetData(vertices);}
Yazmayı unutmamalı Load Content alınır sonra: CopyToBuffers();
![Page 26: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/26.jpg)
Ne ekledik? Biraz hoş görünsün istedik, güneş ekledik, hava
ekledik, su ve sis eklemeye çalıştık.
Heightmap düzenleme araçları ekledik, colormap eklemeye çalıştık pek de başarılı olamadık.
Kamera kontrol kodları çarptık sağdan soldan hemen ekledik
![Page 27: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/27.jpg)
Ne ekledik? - 2 Yüksekliği, ışığı, güneşi, gökyüzünü kullanıcının
emrine verdik!
Boyama aracı yapmaya çalıştık elimize yüzümüze bulaştırdık
Kullanıcıya farklı doku görünümleri sunduk (Geometrik ve Doku olarak)
Tasarımı kaydetme, tasarım açma seçenekleri ekledik!
Bu kadar yeter dedik
![Page 28: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/28.jpg)
Demo
![Page 29: 2 D To 3 D Terrain Generator](https://reader038.vdocuments.com.br/reader038/viewer/2022102706/5594892a1a28abfa7c8b4653/html5/thumbnails/29.jpg)
Teşekkürler Mehmet Aydın Bahadır
Muhammed Fatih Polat
Ahmet Taşçı