| 17 |
using log4net; |
using log4net; |
| 18 |
using System.Reflection; |
using System.Reflection; |
| 19 |
using Xenki.References; |
using Xenki.References; |
| 20 |
|
using System.Timers; |
| 21 |
|
|
| 22 |
|
|
| 23 |
namespace Xenki.DefaultRenderer |
namespace Xenki.DefaultRenderer |
| 24 |
{ |
{ |
| 25 |
|
public delegate void NeedDownloadTexture(UUID textureid); |
| 26 |
|
|
| 27 |
class DefaultRenderer : IRenderer |
public class DefaultRenderer : IRenderer |
| 28 |
{ |
{ |
| 29 |
private readonly Viewport3D m_viewport; |
private readonly Viewport3D m_viewport; |
| 30 |
private readonly PerspectiveCamera m_camera; |
private readonly PerspectiveCamera m_camera; |
| 31 |
private CameraControl m_cameracontrol; |
private CameraControl m_cameracontrol; |
| 32 |
private IRendering m_mesher; |
private IRendering m_mesher; |
| 33 |
private DefaultTexture m_textureManager; |
//private DefaultTexture m_textureManager; |
| 34 |
|
public event NeedDownloadTexture OnNeedDownloadTexture; |
| 35 |
|
|
| 36 |
private DefaultDataControl m_primitiveData; |
private DefaultDataControl m_primitiveData; |
| 37 |
private HotkeyDispatcher m_HotkeyDispatcher = HotkeyDispatcher.GetInstance(); |
private HotkeyDispatcher m_HotkeyDispatcher = HotkeyDispatcher.GetInstance(); |
| 38 |
|
|
| 46 |
private double[,] m_heightmap = new double[256,256]; |
private double[,] m_heightmap = new double[256,256]; |
| 47 |
private ModelVisual3D m_terrain; |
private ModelVisual3D m_terrain; |
| 48 |
|
|
| 49 |
|
private double[,] m_terrainpatch = new double[256, 256]; |
| 50 |
|
private Timer m_terrainSetTimer = new Timer(1000); |
| 51 |
|
private Timer m_cameraTimer = new Timer(1000); |
| 52 |
|
|
| 53 |
private readonly DiffuseMaterial m_terrainMaterial; |
private readonly DiffuseMaterial m_terrainMaterial; |
| 54 |
private string textureImageFolderPath = EnvironmentSettings.TextureTempFolder; |
private string textureImageFolderPath = EnvironmentSettings.TextureTempFolder; |
| 55 |
|
|
| 58 |
|
|
| 59 |
private int EnvirementCircleLength = References.EnvironmentSettings.EnvirementCircleLength; |
private int EnvirementCircleLength = References.EnvironmentSettings.EnvirementCircleLength; |
| 60 |
|
|
| 61 |
|
private uint m_MySelfLocalID; |
| 62 |
|
public uint MySelfLocalID |
| 63 |
|
{ |
| 64 |
|
get { return m_MySelfLocalID; } |
| 65 |
|
set { m_MySelfLocalID = value; } |
| 66 |
|
} |
| 67 |
|
|
| 68 |
private GridClient gridClient; |
private GridClient gridClient; |
| 69 |
|
|
| 70 |
public GridClient Gridclient |
public GridClient Gridclient |
| 73 |
set |
set |
| 74 |
{ |
{ |
| 75 |
gridClient = value; |
gridClient = value; |
|
|
|
|
m_textureManager = DefaultTexture.SingleTextureManager(); |
|
|
m_textureManager.GridClient = Gridclient; |
|
|
m_textureManager.OnDownloadFinished = OnTextureDownloaded; |
|
|
m_textureManager.StartDownload(); |
|
| 76 |
} |
} |
| 77 |
} |
} |
| 78 |
|
|
| 147 |
|
|
| 148 |
//m_viewport.Children.Add(DefaultUtil.CreateCube(new Point3D(0,0,0), new Point3D(256,256,20), |
//m_viewport.Children.Add(DefaultUtil.CreateCube(new Point3D(0,0,0), new Point3D(256,256,20), |
| 149 |
// material)); |
// material)); |
| 150 |
|
|
| 151 |
|
//m_terrainSetTimer.Elapsed += m_terrainSetTimer_Elapsed; |
| 152 |
|
//m_cameraTimer.Elapsed += m_cameraTimer_Elapsed; |
| 153 |
} |
} |
| 154 |
|
|
| 155 |
|
|
| 313 |
Avatar avatar = data as Avatar; |
Avatar avatar = data as Avatar; |
| 314 |
v = CreateModel_Avatar(data); |
v = CreateModel_Avatar(data); |
| 315 |
|
|
| 316 |
if (data.LocalID == gridClient.Self.LocalID) |
if (data.LocalID == MySelfLocalID) |
| 317 |
{ |
{ |
| 318 |
avatarManager.Myself.avatar = avatar; |
avatarManager.Myself.avatar = avatar; |
| 319 |
Vector3D direction = new Vector3D( m_camera.LookDirection.X, m_camera.LookDirection.Y, 0); |
Vector3D direction = new Vector3D( m_camera.LookDirection.X, m_camera.LookDirection.Y, 0); |
| 530 |
|
|
| 531 |
triangleModel = new GeometryModel3D( |
triangleModel = new GeometryModel3D( |
| 532 |
mesh, new DiffuseMaterial(new SolidColorBrush(col))); |
mesh, new DiffuseMaterial(new SolidColorBrush(col))); |
| 533 |
|
if(OnNeedDownloadTexture!=null) |
| 534 |
m_textureManager.RequestTexture(DefaultTexture.TextureID); |
OnNeedDownloadTexture(DefaultTexture.TextureID); |
| 535 |
m_primitiveData.AddNeedTextureModel(LocalID, DefaultTexture.TextureID); |
m_primitiveData.AddNeedTextureModel(LocalID, DefaultTexture.TextureID); |
| 536 |
} |
} |
| 537 |
} |
} |
| 726 |
|
|
| 727 |
public void SetTerrain(int x, int y, double val) |
public void SetTerrain(int x, int y, double val) |
| 728 |
{ |
{ |
| 729 |
|
|
| 730 |
m_heightmap[x, y] = val; |
m_heightmap[x, y] = val; |
| 731 |
} |
} |
| 732 |
|
|
| 733 |
public void SetTerrain(double[,] map) |
public void SetTerrain(double[,] map) |
| 734 |
{ |
{ |
| 735 |
|
//if (width != 16) |
| 736 |
|
// return; |
| 737 |
|
|
| 738 |
|
//x *= 16; |
| 739 |
|
//y *= 16; |
| 740 |
|
|
| 741 |
|
//int i = 0; |
| 742 |
|
|
| 743 |
|
//for (int tx = 0; tx < 16; tx++) |
| 744 |
|
//{ |
| 745 |
|
// for (int ty = 0; ty < 16; ty++) |
| 746 |
|
// { |
| 747 |
|
// m_terrainpatch[x + ty, y + tx] = data[i++]; |
| 748 |
|
// } |
| 749 |
|
//} |
| 750 |
|
|
| 751 |
|
//m_terrainSetTimer.Stop(); |
| 752 |
|
//m_terrainSetTimer.AutoReset = false; |
| 753 |
|
//m_terrainSetTimer.Start(); |
| 754 |
|
|
| 755 |
m_heightmap = map; |
m_heightmap = map; |
| 756 |
|
|
| 757 |
m_viewport.Dispatcher.Invoke( |
m_viewport.Dispatcher.Invoke( |
| 768 |
); |
); |
| 769 |
} |
} |
| 770 |
|
|
| 771 |
|
void m_terrainSetTimer_Elapsed(object sender, ElapsedEventArgs e) |
| 772 |
|
{ |
| 773 |
|
//log("Refreshing terrain..."); |
| 774 |
|
|
| 775 |
|
// m_renderer.SetTerrain(m_terrainpatch); |
| 776 |
|
} |
| 777 |
|
|
| 778 |
void avatarManager_OnAvatarPosChanged(uint avatarid, Point3D oldpos, Point3D newpos, Vector3D avatarlookdirection) |
void avatarManager_OnAvatarPosChanged(uint avatarid, Point3D oldpos, Point3D newpos, Vector3D avatarlookdirection) |
| 779 |
{ |
{ |
| 780 |
ShowModelAround(newpos, this.EnvirementCircleLength); |
ShowModelAround(newpos, this.EnvirementCircleLength); |