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