public void SetImage(MemoryBuffer imageBuff) { Node sphere = Renderer.GetViewport(0).Scene.GetChild("room", false); if (sphere != null) { InvokeOnMain(() => { var image = new Urho.Resources.Image(); var isLoaded = image.Load(imageBuff); if (!isLoaded) { throw new Exception("This image cannot be load by Swank"); } var texture = new Texture2D(); var isTextureLoaded = texture.SetData(image, false); if (!isTextureLoaded) { throw new Exception("This texture cannot be load by Swank"); } StaticModel modelObject = sphere.GetComponent <StaticModel>(); sphere.GetComponent <StaticModel>().GetMaterial(0).SetTexture(TextureUnit.Diffuse, texture); }); } }
public void SetImage(byte[] arr) { //UIImage uiimage = UIImage.FromBundle("R0010015.JPG"); // //var memoryBuffer = new MemoryBuffer(uiimage.AsJPEG().ToArray()); var webClient = new WebClient() { Encoding = Encoding.UTF8 }; // //// NOTE: The image MUST be in power of 2 resolution (Ex: 512x512, 2048x1024, etc...) var memoryBuffer = new MemoryBuffer(webClient.DownloadData(new Uri("https://video.360cities.net/littleplanet-360-imagery/360Level43Lounge-8K-stable-noaudio-2048x1024.jpg"))); image = new Image(); // var memory = new MemoryBuffer(new MemoryStream(arr)); //var isLoaded = image.Load(memory); var isLoaded = image.Load(memoryBuffer); if (!isLoaded) { throw new Exception(); } // 3.6 TEXTURE //texture = new Texture2D(); // var resize = image.Resize(2048, 1024); var isTextureLoaded = texture.SetData(image); //if (!isTextureLoaded) //{ // throw new Exception(); //} // 3.8 - MATERIAL material.SetTexture(TextureUnit.Diffuse, texture); material.SetTechnique(0, CoreAssets.Techniques.DiffNormal, 0, 0); material.CullMode = CullMode.Cw; modelObject.SetMaterial(material); //Renderer.SetViewport(0, new Viewport(scene, camera, null)); }
public async Task CreateScene() { // 1 - SCENE scene = new Scene(); scene.CreateComponent <Octree>(); // 2 - NODE node = scene.CreateChild("room"); node.Position = new Vector3(0, 0, 0); node.Rotation = new Quaternion(0, 0, 0); node.SetScale(2f); // 3 - MODEL OBJECT modelObject = node.CreateComponent <StaticModel>(); modelObject.Model = ResourceCache.GetModel("Models/Sphere.mdl"); // 3.2 - ZONE var zoneNode = scene.CreateChild("zone"); var zone = zoneNode.CreateComponent <Zone>(); zone.SetBoundingBox(new BoundingBox(-300.0f, 300.0f)); zone.AmbientColor = new Color(1f, 1f, 1f); // 3.5 - DOWNLOAD IMAGE //var webClient = new WebClient() { Encoding = Encoding.UTF8 }; // //// NOTE: The image MUST be in power of 2 resolution (Ex: 512x512, 2048x1024, etc...) //var memoryBuffer = new MemoryBuffer(webClient.DownloadData(new Uri("https://video.360cities.net/littleplanet-360-imagery/360Level43Lounge-8K-stable-noaudio-2048x1024.jpg"))); //UIImage uiimage = UIImage.FromBundle("R0010015.JPG"); // //var memoryBuffer = new MemoryBuffer(uiimage.AsJPEG().ToArray()); image = new Image(); //var memory = new MemoryBuffer(memoryBuffer); //var isLoaded = image.Load(memoryBuffer); // //if (!isLoaded) //{ // throw new Exception(); //} //REMOVE string url = "http://192.168.1.1:80/osc/commands/execute"; var request = HttpWebRequest.Create(url); HttpWebResponse response = null; request.Method = "POST"; request.Timeout = (int)(30 * 10000f); request.ContentType = "application/json;charset=utf-8"; byte[] postBytes = Encoding.Default.GetBytes("{ \"name\": \"camera.getLivePreview\"}"); request.ContentLength = postBytes.Length; Stream reqStream = request.GetRequestStream(); reqStream.Write(postBytes, 0, postBytes.Length); reqStream.Close(); var resp = request.GetResponse(); var stream = resp.GetResponseStream(); BinaryReader reader = new BinaryReader(new BufferedStream(stream), new System.Text.ASCIIEncoding()); List <byte> imageBytes = new List <byte>(); bool isLoadStart = false; // 画像の頭のバイナリとったかフラグ byte oldByte = 0; // 1つ前のByteデータを格納する //await Task.Run(() => //{ while (true) { byte byteData = reader.ReadByte(); if (!isLoadStart) { if (oldByte == 0xFF) { // Первый двоичный файл изображения imageBytes.Add(0xFF); } if (byteData == 0xD8) { // Второй двоичный файл изображения imageBytes.Add(0xD8); // Я взял заголовок изображения, поэтому беру его, пока не получу конечный двоичный файл isLoadStart = true; } } else { // Поместите в массив двоичных файлов изображений imageBytes.Add(byteData); // Когда байт является конечным байтом // 0xFF -> 0xD9В случае конечного байта if (oldByte == 0xFF && byteData == 0xD9) { // Потому что это конечный байт изображения // Вы можете создать изображение из накопленных здесь байтов и создать текстуру. // Отразить изображение в байтах в текстуре // Оставьте imageBytes пустым //SetImage(imageBytes.ToArray()); break; imageBytes.Clear(); // Вернитесь к бинарному циклу сбора данных в начале изображения. isLoadStart = false; } } oldByte = byteData; } //}); // REMOVE image = new Image(); // var memory = new MemoryBuffer(new MemoryStream(imageBytes.ToArray())); var isLoaded = image.Load(memory); var mefw = image.Resize(2048, 1024); // 3.6 TEXTURE texture = new Texture2D(); var isTextureLoaded = texture.SetData(image); //if (!isTextureLoaded) //{ // throw new Exception(); //} // 3.8 - MATERIAL material = new Material(); material.SetTexture(TextureUnit.Diffuse, texture); material.SetTechnique(0, CoreAssets.Techniques.DiffNormal, 0, 0); material.CullMode = CullMode.Cw; modelObject.SetMaterial(material); // 4 - LIGHTS Node light = scene.CreateChild(name: "light"); light.SetDirection(new Vector3(0f, -0f, 0f)); light.CreateComponent <Light>(); // 5 - CAMERA cameraNode = scene.CreateChild(name: "camera"); cameraNode.LookAt(new Vector3(0, 1, 2), new Vector3(0, 1, 0)); camera = cameraNode.CreateComponent <Camera>(); camera.Fov = 50; camera.Orthographic = false; cameraNode.Rotation = new Quaternion(0, 0, 0); // 6 - VIEWPORT Renderer.SetViewport(0, new Viewport(scene, camera, null)); // 7 - ACTIONS //await node.RunActionsAsync(new RepeatForever(new RotateBy(duration: 4f, deltaAngleX: 0, deltaAngleY: 40, deltaAngleZ: 0))); IsSceneLoaded = true; }