在Windows XP WPF下,真正的3D内容(通常使用Viewport3D控件显示)看起来非常难看,因为默认情况下它不像其他WPF图形那样被抗锯齿.特别是在较低分辨率下,体验非常糟糕,因此无法在生产代码中使用.
我已经设法使用驱动程序的设置强制对一些Nvidia显卡进行抗锯齿处理.不幸的是,这有时会产生丑陋的文物,只适用于特定的卡和驱动程序版本.微软在这方面的官方消息是,在Windows XP下通常不支持抗锯齿3D,我看到的工件是由于WPF已经自己进行了抗锯齿(在XP上仅用于2D).
所以我想知道是否有其他一些秘密技巧可以让我在Windows XP下强制对WPF 3D内容进行抗锯齿处理.
我能够直接在 XAML 中设置放置在 viewport3d 中的透视相机的位置和方向。但我想知道如何使用鼠标输入旋转相机。我更喜欢 C# lang。我实际上被困在如何使用鼠标输入旋转相机的问题上。请帮我。如果有人给我一个示例代码会很有帮助....
大家好,我有一个框架代码
<Frame Name="wow" Width="1200" Height="600" ></Frame>
Run Code Online (Sandbox Code Playgroud)
当我点击a时button,它会加载一个url
wow.Source=(new Uri("http://www.google.com"));
Run Code Online (Sandbox Code Playgroud)
当我把它扔进一个时它起作用grid,看起来很好但是当我将它扔进一个viewport2dvisual3d容器时,它不会出现.
<Viewport2DVisual3D.Visual >
<Grid Width="1200" Height="600" Name="frontPanel" Background="Blue">
<Frame Name="wow" Width="1200" Height="600" ></Frame>
</Grid>
</Viewport2DVisual3D.Visual>
Run Code Online (Sandbox Code Playgroud)
该frame甚至不可见.我确实看到我的鼠标改变为加载符号几秒钟,但我似乎仍然无法看到框架.
这是一个错误吗?或者我必须做些什么来使框架出现在viewport2dvisual3d视口3d中?
我正在尝试显示 Viewport3D 的 FPS。
经过一些搜索,我发现了 CompositionTarget.Rendering,但这似乎给“WPF Performance suite”工具中显示的 FPS 提供了不同的结果。
使用 CompositionTarget.Rendering 时,我会显示稳定的 60 fps,直到我与视口相机交互(响应鼠标/键盘事件),然后 fps 飙升至 150 到 200 fps,而“WPF 性能套件”工具仍显示稳定的 60 fps。
我认为这是因为“WPF 性能套件”工具显示准确的 FPS,即每当 WPF 团队实际在后台缓冲区上调用 Present 时,而 CompositionTarget.Rendering 是内部更新的 fps,但不代表真实的 fps。
我想显示一些更符合“WPF Performance suite”工具的东西,我怎样才能实现这一点?
我使用 CompositionTarget.Rendering 如下 -
Viewport3D()
{
CompositionTarget.Rendering += (s, a) =>
{
++m_frames;
};
DispatcherTimer fpsTimer = new DispatcherTimer();
fpsTimer.Interval = TimeSpan.FromSeconds(1);
fpsTimer.Tick += (s, a) =>
{
m_fpsText.Text = string.Format("FPS:{0}", m_frames);
m_frames = 0;
};
fpsTimer.Start();
}
Run Code Online (Sandbox Code Playgroud) 我有 viewport3d,我想改变它的背景颜色。
我对 Wpf 很陌生。我从其他帖子中不明白该怎么做。所以我在这里问。
我更改了 viewport3d 的画笔属性,但它什么也没做
<Window x:Class="W3DTinker.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="800" Width="1200">
<Grid HorizontalAlignment="Left" Height="780" Margin="10,10,0,-21" VerticalAlignment="Top" Width="1180">
<Viewport3D Grid.Row="0" Grid.Column="0" x:Name="Viewport" Margin="350,10,10,10" OpacityMask="{DynamicResource {x:Static SystemColors.AppWorkspaceBrushKey}}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
我想绘制一组3D立方体,每个立方体应该显示一个名称,并且在选择立方体时也应该有自己的事件处理程序.
是否可以使用代码隐藏或xaml绑定来实现它?
我使用HelixToolKit的ModelImporter函数向Viewport3d添加了一个模型(STL文件),但首先没有任何显示。要查看添加的3DModel,我必须进行缩小。我的问题是,有什么方法可以动态/以编程方式缩小或将相机旋转到新添加的模型,或需要立即显示它的任何方法。
我正在将带有C#WPF的helix工具包用于该项目。
我正在开始尝试使用WPF 3D渲染,我面临的第一个问题是如何禁用面部剔除.我知道如何在DirectX和OpenGL中做到这一点,但我找不到在WPF中这样做的方法.这是我的ViewPort标记.模型在运行时生成,它是GeometryModel3D中的MeshGeometry3D
<Viewport3D x:Name="viewport" DockPanel.Dock="Right" Margin="0" >
<Viewport3D.Camera>
<PerspectiveCamera x:Name="camera" FarPlaneDistance="50" LookDirection="0,0,-10"
UpDirection="0,1,0" NearPlaneDistance="0" Position="0,0,5"
FieldOfView="45" />
</Viewport3D.Camera>
<ModelVisual3D x:Name="model">
<ModelVisual3D.Content>
<Model3DGroup x:Name="group">
<AmbientLight Color="DarkGray" />
<DirectionalLight Color="White" Direction="-5,-5,-7" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
Run Code Online (Sandbox Code Playgroud)
非常感谢您给我的任何建议.
viewport3d ×8
wpf ×8
c# ×4
3d ×1
antialiasing ×1
background ×1
colors ×1
culling ×1
frame ×1
frame-rate ×1
visible ×1
windows-xp ×1
wpf-controls ×1
xaml ×1