Xamarin 通过Urhosharp在球体上添加纹理

Xamarin 通过Urhosharp在球体上添加纹理,xamarin,xamarin.forms,urhosharp,Xamarin,Xamarin.forms,Urhosharp,我使用的是Xamarin.Forms+Urhosharp,我在设置球体上图像的纹理时遇到了一个问题。问题是texture.Load或texture.SetData始终返回false。我尝试了不同的方法,如设置数据、加载、调整纹理和图像大小(2次方)和。。。但没有一个成功。这是我的密码: private async void CreateScene() { Input.SubscribeToTouchEnd(OnTouched); _scene =

我使用的是Xamarin.Forms+Urhosharp,我在设置球体上图像的纹理时遇到了一个问题。问题是texture.Load或texture.SetData始终返回false。我尝试了不同的方法,如设置数据、加载、调整纹理和图像大小(2次方)和。。。但没有一个成功。这是我的密码:

    private async void CreateScene()
    {
        Input.SubscribeToTouchEnd(OnTouched);

        _scene = new Scene();
        _octree = _scene.CreateComponent<Octree>();

        _plotNode = _scene.CreateChild();
        var baseNode = _plotNode.CreateChild().CreateChild();
        var plane = baseNode.CreateComponent<StaticModel>();
        plane.Model = CoreAssets.Models.Sphere;

        var cameraNode = _scene.CreateChild();
        _camera = cameraNode.CreateComponent<Camera>();
        cameraNode.Position = new Vector3(10, 15, 10) / 1.75f;
        cameraNode.Rotation = new Quaternion(-0.121f, 0.878f, -0.305f, -0.35f);

        Node lightNode = cameraNode.CreateChild();
        var light = lightNode.CreateComponent<Light>();
        light.LightType = LightType.Point;
        light.Range = 100;
        light.Brightness = 1.3f;

        int size = 3;
        baseNode.Scale = new Vector3(size * 1.5f, 1, size * 1.5f);

        var imageStream = await new HttpClient().GetStreamAsync("some 512 * 512 jpg image");
        var ms = new MemoryStream();
        imageStream.CopyTo(ms);

        var image = new Image();
        var isLoaded = image.Load(new MemoryBuffer(ms));
        if (!isLoaded)
        {
            throw new Exception();
        }

        var texture = new Texture2D();
        //var isTextureLoaded = texture.Load(new MemoryBuffer(ms.ToArray()));
        var isTextureLoaded = texture.SetData(image);
        if (!isTextureLoaded)
        {
            throw new Exception();
        }

        var material = new Material();
        material.SetTexture(TextureUnit.Diffuse, texture);
        material.SetTechnique(0, CoreAssets.Techniques.Diff, 0, 0);
        plane.SetMaterial(material);

        try
        {
            await _plotNode.RunActionsAsync(new EaseBackOut(new RotateBy(2f, 0, 360, 0)));
        }
        catch (OperationCanceledException) { }
    }
private async void CreateScene()
{
Input.SubscribeToTouchEnd(OnTouched);
_场景=新场景();
_八叉树=_scene.CreateComponent();
_plotNode=_scene.CreateChild();
var baseNode=_plotNode.CreateChild().CreateChild();
var plane=baseNode.CreateComponent();
plane.Model=CoreAssets.Models.Sphere;
var cameraNode=_scene.CreateChild();
_camera=cameraNode.CreateComponent();
cameraNode.Position=新矢量3(10,15,10)/1.75f;
cameraNode.旋转=新的四元数(-0.121f,0.878f,-0.305f,-0.35f);
Node lightNode=cameraNode.CreateChild();
var light=lightNode.CreateComponent();
light.LightType=LightType.Point;
光照范围=100;
亮度:亮度=1.3f;
int size=3;
baseNode.Scale=新矢量3(大小*1.5f,1,大小*1.5f);
var imageStream=wait new HttpClient().GetStreamAsync(“一些512*512 jpg图像”);
var ms=新内存流();
imageStream.CopyTo(毫秒);
var image=新图像();
var isLoaded=image.Load(新内存缓冲区(ms));
如果(!已加载)
{
抛出新异常();
}
var texture=new Texture2D();
//var istextureload=texture.Load(新的MemoryBuffer(ms.ToArray());
var istextureload=texture.SetData(图像);
如果(!重新加载)
{
抛出新异常();
}
var物料=新物料();
材质.设置纹理(纹理单位.漫反射,纹理);
材料.设置技术(0,CoreAssets.Technics.Diff,0,0);
平面材料(材料);
尝试
{
wait_plotNode.RunActionsAsync(新的EaseBackOut(新的RotateBy(2f,0,360,0));
}
捕获(操作取消异常){}
}

请帮忙

要从2D纹理创建材质,可以使用material.FromImage

有关更多详细信息,请参阅以下文档

model.SetMaterial(Material.FromImage("earth.jpg"));

private async void CreateScene()
{
_场景=新场景();
_八叉树=_scene.CreateComponent();
_plotNode=_scene.CreateChild();
var baseNode=_plotNode.CreateChild().CreateChild();
变量平面=_plotNode.CreateComponent();
plane.Model=CoreAssets.Models.Sphere;
plane.SetMaterial(Material.FromImage(“earth.jpg”);
var cameraNode=_scene.CreateChild();
_camera=cameraNode.CreateComponent();
cameraNode.Position=新矢量3(10,15,10)/1.75f;
cameraNode.旋转=新的四元数(-0.121f,0.878f,-0.305f,-0.35f);
Node lightNode=cameraNode.CreateChild();
var light=lightNode.CreateComponent();
light.LightType=LightType.Point;
光照范围=100;
亮度:亮度=1.3f;
int size=3;
baseNode.Scale=新矢量3(大小*1.5f,1,大小*1.5f);
SetViewport(0,新视口(_场景,_摄影机,空));
尝试
{
wait_plotNode.RunActionsAsync(新的EaseBackOut(新的RotateBy(2f,0,360,0));
}
捕获(操作取消异常){}
}
private async void CreateScene()
{


   _scene = new Scene();
   _octree = _scene.CreateComponent<Octree>();

   _plotNode = _scene.CreateChild();
   var baseNode = _plotNode.CreateChild().CreateChild();


   var plane = _plotNode.CreateComponent<StaticModel>();
   plane.Model = CoreAssets.Models.Sphere;
   plane.SetMaterial(Material.FromImage("earth.jpg"));

   var cameraNode = _scene.CreateChild();
   _camera = cameraNode.CreateComponent<Camera>();
   cameraNode.Position = new Vector3(10, 15, 10) / 1.75f;

   cameraNode.Rotation = new Quaternion(-0.121f, 0.878f, -0.305f, -0.35f);

   Node lightNode = cameraNode.CreateChild();
   var light = lightNode.CreateComponent<Light>();
   light.LightType = LightType.Point;
   light.Range = 100;
   light.Brightness = 1.3f;

   int size = 3;
   baseNode.Scale = new Vector3(size * 1.5f, 1, size * 1.5f);

   Renderer.SetViewport(0, new Viewport(_scene, _camera, null));

   try
   {
       await _plotNode.RunActionsAsync(new EaseBackOut(new RotateBy(2f, 0, 360, 0)));
   }
   catch (OperationCanceledException) { }

}