Urhosharp Material.FromImage 无法处理某些 jpg 文件
Urhosharp Material.FromImage not woking with some jpg files
我在我的项目中使用 Xamarin.Forms 和 Urhosharp。我正在尝试从球体上的图像设置矩阵,在我的 Android 项目中一切正常,但在 iOS 项目中,当我从一些 jpg 文件设置 material 时它没有无法正常工作,我得到的只是黑屏。
这是正确工作的 jpg:
这是另一个没有的:
这是我的代码:
var scene = new Scene();
scene.CreateComponent<Octree>();
// Node (Rotation and Position)
var node = scene.CreateChild("room");
node.Position = new Vector3(0, 0, 0);
//node.Rotation = new Quaternion(10, 60, 10);
node.SetScale(1f);
// Model
var modelObject = node.CreateComponent<StaticModel>();
modelObject.Model = ResourceCache.GetModel("CustomModels/SmoothSphere.mdl");
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);
//get image from byte[]
//var url = "http://www.wsj.com/public/resources/media/0524yosemite_1300R.jpg";
//var wc = new WebClient() { Encoding = Encoding.UTF8 };
//var mb = new MemoryBuffer(wc.DownloadData(new Uri(url)));
var mb = new MemoryBuffer(PanoramaBuffer.PanoramaByteArray);
var image = new Image(Context) { Name = "MyImage" };
image.Load(mb);
//or from resource
//var image = ResourceCache.GetImage("Textures/grave.jpg");
var isFliped = image.FlipHorizontal();
if (!isFliped)
{
throw new Exception("Unsuccessful flip");
}
var m = Material.FromImage("1.jpg");
m.SetTechnique(0, CoreAssets.Techniques.DiffNormal, 0, 0);
m.CullMode = CullMode.Cw;
//m.SetUVTransform(Vector2.Zero, 0, 0);
modelObject.SetMaterial(m);
// Camera
var cameraNode = scene.CreateChild("camera");
_camera = cameraNode.CreateComponent<Camera>();
_camera.Fov = 75.8f;
_initialZoom = _camera.Zoom;
// Viewport
Renderer.SetViewport(0, new Viewport(scene, _camera, null));
我已经尝试更改压缩级别、ICCC 配置文件和...
我在 forums.xamarin.com 中问了同样的问题,有人回答了这个问题,我将在这里分享:
在 iOS 中,每个纹理都需要具有两倍分辨率的幂,例如 256 x 256 或 1024 x 512。检查这是否是问题所在。另外检查您是否使用最新的 UrhoSharp 版本。
还要确保图像在 iOS 项目中设置为 BundleResource。
我在我的项目中使用 Xamarin.Forms 和 Urhosharp。我正在尝试从球体上的图像设置矩阵,在我的 Android 项目中一切正常,但在 iOS 项目中,当我从一些 jpg 文件设置 material 时它没有无法正常工作,我得到的只是黑屏。
这是正确工作的 jpg:
这是另一个没有的:
这是我的代码:
var scene = new Scene();
scene.CreateComponent<Octree>();
// Node (Rotation and Position)
var node = scene.CreateChild("room");
node.Position = new Vector3(0, 0, 0);
//node.Rotation = new Quaternion(10, 60, 10);
node.SetScale(1f);
// Model
var modelObject = node.CreateComponent<StaticModel>();
modelObject.Model = ResourceCache.GetModel("CustomModels/SmoothSphere.mdl");
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);
//get image from byte[]
//var url = "http://www.wsj.com/public/resources/media/0524yosemite_1300R.jpg";
//var wc = new WebClient() { Encoding = Encoding.UTF8 };
//var mb = new MemoryBuffer(wc.DownloadData(new Uri(url)));
var mb = new MemoryBuffer(PanoramaBuffer.PanoramaByteArray);
var image = new Image(Context) { Name = "MyImage" };
image.Load(mb);
//or from resource
//var image = ResourceCache.GetImage("Textures/grave.jpg");
var isFliped = image.FlipHorizontal();
if (!isFliped)
{
throw new Exception("Unsuccessful flip");
}
var m = Material.FromImage("1.jpg");
m.SetTechnique(0, CoreAssets.Techniques.DiffNormal, 0, 0);
m.CullMode = CullMode.Cw;
//m.SetUVTransform(Vector2.Zero, 0, 0);
modelObject.SetMaterial(m);
// Camera
var cameraNode = scene.CreateChild("camera");
_camera = cameraNode.CreateComponent<Camera>();
_camera.Fov = 75.8f;
_initialZoom = _camera.Zoom;
// Viewport
Renderer.SetViewport(0, new Viewport(scene, _camera, null));
我已经尝试更改压缩级别、ICCC 配置文件和...
我在 forums.xamarin.com 中问了同样的问题,有人回答了这个问题,我将在这里分享:
在 iOS 中,每个纹理都需要具有两倍分辨率的幂,例如 256 x 256 或 1024 x 512。检查这是否是问题所在。另外检查您是否使用最新的 UrhoSharp 版本。
还要确保图像在 iOS 项目中设置为 BundleResource。