Проблема с прозрачными цветными текстурами, накладывающимися на другие объекты в формате OBJ.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с прозрачными цветными текстурами, накладывающимися на другие объекты в формате OBJ.

Сообщение Anonymous »

Мне нужно вывести модель сакуры (формат obj). У меня есть кадр, к которому я применяю текстуры. Проблема в том, что при применении цветочных текстур прозрачные части как будто перекрывают другие объекты, хотя теоретически они должны быть прозрачными и сквозь них должны быть видны другие объекты. [Изображение, на котором прозрачная часть цветка перекрывает ветку] (https://i.sstatic.net/CQPXLZrk.png) Изображение всей сакуры
У меня есть треугольники, которые я накладываю изображение цветка. Саму рамку я сделал прозрачной, картинка, которую я накладываю, тоже имеет прозрачную часть и непрозрачный цветок. Но при наложении прозрачность работает некорректно. Вот код, который у меня есть сейчас.

Код: Выделить всё

private ModelVisual3D AddObjectToScene(Object3D obj)
{
var model = new ModelVisual3D();
var model3D = new GeometryModel3D();
var mesh = new MeshGeometry3D();
Console.WriteLine("Start Load GetNormals");
foreach (var norm in obj.normals) Console.WriteLine($"X: {norm.X}, Y: {norm.Y}, Z: {norm.Z}");
mesh.Normals = NormalsConvert(obj.normals);

Console.WriteLine("Start Load Positions");
mesh.Positions = VerticesConvert(obj.vertices);
Console.WriteLine("Start Load TriangleIndices");
var triangleIndices = new Int32Collection();

foreach (var surf in obj.surfaces)
{
var surfaceIndices = ConvertSurfaces(surf.vertices);
foreach (var index in surfaceIndices) triangleIndices.Add(index);
}

mesh.TriangleIndices = triangleIndices;
mesh.TextureCoordinates = TextureConvert(obj.texCoords);

model3D.Geometry = mesh;

var myMaterialGroup = new MaterialGroup();

Material mt1 = new DiffuseMaterial(new SolidColorBrush(Color.FromArgb(0, obj.material.diffuseColor.R, obj.material.diffuseColor.G, obj.material.diffuseColor.B)));
Material mt2 = new EmissiveMaterial(new SolidColorBrush(obj.material.emissiveColor));
Material mt3 =
new SpecularMaterial(new SolidColorBrush(obj.material.specularColor.ChangeAlpha(0)), obj.material.reflectionIndex);
Material texture = null;
if (obj.material.material_file_name != null)
{
var imageBrush = new ImageBrush
{
ImageSource = new BitmapImage(new Uri(obj.material.material_file_name, UriKind.RelativeOrAbsolute)),
Opacity = 1
};

texture = new DiffuseMaterial(imageBrush);
}

myMaterialGroup.Children.Add(mt1);
myMaterialGroup.Children.Add(mt3);
myMaterialGroup.Children.Add(mt2);

if(texture!=null)
myMaterialGroup.Children.Add(texture);

model3D.Material = myMaterialGroup;

model.Content = model3D;
return model;
}
Важное примечание: в средствах просмотра 3D-модель выглядит нормально. Также в рамках задания я не могу использовать OpenGl и другие продвинутые библиотеки.
Кадр Сакуры

Подробнее здесь: https://stackoverflow.com/questions/792 ... obj-format
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»