Tôi có một mô hình mà tôi đã tạo trong 3ds Max. Mô hình là một hình chữ nhật đơn giản. Kết cấu của nó có các tọa độ kết cấu chồng chéo - mô hình sẽ hiển thị nửa bên phải của tệp hình ảnh hai lần, cạnh nhau. Tôi đã xuất mô hình này dưới dạng .obj
và chuyển đổi mô hình này thành XAML bằng cách sử dụng Microsoft Expression Blend.Tại sao TextureCoordinates hoạt động như mong đợi cho một Viewport2DVisual3D, nhưng không phải cho một GeometryModel3D?
Tôi đã MeshGeometry3D
từ sự pha trộn, và thêm nó vào một Viewport3D
sử dụng hai phương pháp:
- Sử dụng một
Viewport2DVisual3D
với mộtLabel
nhưVisual
của nó. Đặt nền củaLabel
thành hình ảnh kết cấu. Sử dụng phương pháp này, mọi thứ hoạt động như mong đợi. - Sử dụng
ModelVisual3D
vớiGeometryModel3D
làmContent
. Đặt tài liệu củaGeometryModel3D
thànhDiffuseMaterial
sử dụng hình ảnh làm bút vẽ. Sử dụng phương pháp này,TextureCoordinates
của sốMeshGeometry3D
có vẻ được diễn giải khác nhau.
Mã đầy đủ được cung cấp bên dưới. Code-behind rỗng trừ InitializeComponent()
:
<Window x:Class="TestTextureCoordinates.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<MeshGeometry3D x:Key="geometry"
Normals="0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1"
Positions="113.8997,102.4171,0 148.9045,102.4171,0 148.9045,148.41161,0 113.8997,148.41161,0 184.5722,102.4171,0 184.5722,148.41161,0 148.9045,148.41161,0 148.9045,102.4171,0"
TextureCoordinates="0.50639999,0.9995 1.0065,0.9995 1.0065,0.00050002337 0.50639999,0.00050002337 1.0022,0.9995 1.0022,0.00050002337 0.5,0.00050002337 0.5,0.9995"
TriangleIndices="0 1 2 0 2 3 4 5 6 4 6 7"/>
<ImageBrush x:Key="brush" ImageSource="img/test.jpg" />
</Grid.Resources>
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="195,125,210" LookDirection="0,0,-1" />
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="White" />
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- The first model, using a Viewport2DVisual3D. This works as intended. -->
<Viewport2DVisual3D Geometry="{StaticResource geometry}">
<Viewport2DVisual3D.Visual>
<Label Background="{StaticResource brush}" />
</Viewport2DVisual3D.Visual>
<Viewport2DVisual3D.Material>
<DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" />
</Viewport2DVisual3D.Material>
</Viewport2DVisual3D>
<!-- The second model, using a ModelVisual3D and GeometryModel3D. The TextureCoordinates do not work as intended. -->
<ModelVisual3D>
<!-- We apply a transform to offset this model from the first model. -->
<ModelVisual3D.Transform>
<TranslateTransform3D OffsetX="90" />
</ModelVisual3D.Transform>
<ModelVisual3D.Content>
<GeometryModel3D Geometry="{StaticResource geometry}">
<GeometryModel3D.Material>
<DiffuseMaterial Brush="{StaticResource brush}" />
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Grid>
Đây là test.jpg
:
Dưới đây là kết quả cuối cùng. Ở bên trái là Viewport2DVisual3D
, trông giống như trong 3ds Max. Ở bên phải là ModelVisual3D
, dường như diễn giải một cách khác nhau là TextureCoordinates
.
Điều gì đang xảy ra ở đây? Do các yêu cầu khác của phần mềm tôi đang làm việc, tôi không thể sử dụng Viewport2DVisual3D
. Làm cách nào để tạo GeometryModel3D
giải thích chính xác TextureCoordinates
?