मेरे पास एक मॉडल है जिसे मैंने 3 डीएस मैक्स में बनाया है। मॉडल एक साधारण आयताकार है। इसकी बनावट बनावट कोऑर्डिनेट्स ओवरलैप कर रही है - मॉडल को छवि फ़ाइल का दायां आधा दो बार, साइड-बाय-साइड प्रदर्शित करना चाहिए। मैंने इस मॉडल को .obj
के रूप में निर्यात किया, और इसे माइक्रोसॉफ्ट एक्सप्रेशन ब्लेंड का उपयोग करके एक्सएएमएल में परिवर्तित कर दिया।TextureCordordates एक Viewport2DVisual3D के लिए अपेक्षित काम क्यों करता है, लेकिन GeometryModel3D के लिए नहीं?
मैं मिश्रण से MeshGeometry3D
ले लिया, और एक Viewport3D
में जोड़ा दो तरीकों का उपयोग कर:
- अपने
Visual
के रूप में एकLabel
के साथ एकViewport2DVisual3D
का प्रयोग करें। बनावट छवि मेंLabel
की पृष्ठभूमि सेट करें। इस विधि का उपयोग करके, सबकुछ अपेक्षित काम करता है। ModelVisual3D
GeometryModel3D
के साथContent
के रूप में उपयोग करें।GeometryModel3D
की सामग्री कोDiffuseMaterial
पर सेट करें जो छवि को उसके ब्रश के रूप में उपयोग करता है। इस विधि का उपयोग करते हुए, केTextureCoordinates
को अलग-अलग व्याख्या किया जाना प्रतीत होता है।
पूरा कोड नीचे प्रदान किया गया है। कोड-पीछे 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>
यहाँ test.jpg
है:
यहाँ अंतिम परिणाम है। बाईं ओर Viewport2DVisual3D
है, जो 3 डीएस मैक्स में समान दिखता है। दाईं ओर ModelVisual3D
है, जो TextureCoordinates
को अलग-अलग समझाने वाला प्रतीत होता है।
क्या यहाँ हो रहा है? सॉफ़्टवेयर की अन्य आवश्यकताओं के कारण मैं काम कर रहा हूं, मैं Viewport2DVisual3D
का उपयोग नहीं कर सकता। मैं GeometryModel3D
को TextureCoordinates
सही तरीके से कैसे समझा सकता हूं?