- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 OpenGL 中我可以这样做:
glOrtho(-10, 10, -10, 10, -1, 1)
建立一个坐标系,其中x的范围是-10到10,y的范围是-10到10。
有没有办法在 WPF 中更改 Canvas 的坐标系?
最佳答案
我在 Canvas 上创建了一个扩展方法,允许您设置笛卡尔坐标系。一个示例调用是:
canvas.SetCoordinateSystem(-10, 10, -10, 10)
这将设置 canvas
的坐标系,使 x 从 -10 到 10,y 从 -10 到 10。
扩展方法如下:
public static Canvas SetCoordinateSystem(this Canvas canvas, Double xMin, Double xMax, Double yMin, Double yMax)
{
var width = xMax - xMin;
var height = yMax - yMin;
var translateX = -xMin;
var translateY = height + yMin;
var group = new TransformGroup();
group.Children.Add(new TranslateTransform(translateX, -translateY));
group.Children.Add(new ScaleTransform(canvas.ActualWidth / width, canvas.ActualHeight / -height));
canvas.RenderTransform = group;
return canvas;
}
这是一个演示程序,它在 Canvas 上绘制 Sin(x) 以及 X 和 Y 轴:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CanvasScale
{
public static class CanvasUtils
{
public static Canvas SetCoordinateSystem(this Canvas canvas, Double xMin, Double xMax, Double yMin, Double yMax)
{
var width = xMax - xMin;
var height = yMax - yMin;
var translateX = -xMin;
var translateY = height + yMin;
var group = new TransformGroup();
group.Children.Add(new TranslateTransform(translateX, -translateY));
group.Children.Add(new ScaleTransform(canvas.ActualWidth / width, canvas.ActualHeight / -height));
canvas.RenderTransform = group;
return canvas;
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var canvas = new Canvas();
Content = canvas;
SizeChanged += (s, e) => canvas.SetCoordinateSystem(-10, 10, -10, 10);
canvas.Children.Add(new Line() { X1 = -10, Y1 = 0, X2 = 10, Y2 = 0, Stroke = Brushes.Black, StrokeThickness = 0.2 });
canvas.Children.Add(new Line() { X1 = 0, Y1 = -10, X2 = 0, Y2 = 10, Stroke = Brushes.Black, StrokeThickness = 0.2 });
var polyline = new Polyline()
{
Stroke = Brushes.BurlyWood,
StrokeThickness = 0.1,
Points = new PointCollection()
};
for (var x = -10.0; x <= 10.0; x += 0.1)
polyline.Points.Add(new Point(x, Math.Sin(x)));
canvas.Children.Add(polyline);
}
}
}
这是它的样子:
关于c# - 相当于 WPF 中的 glOrtho,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079610/
我正在尝试从 opengles 文档中实现我自己的 glOtho 函数 http://www.khronos.org/opengles/documentation/opengles1_0/html/g
我最近开始使用 LWJGL,注意到 glOrtho 方法采用参数 left、right、bottom、top,但无法弄清楚这些参数对应的是什么。 当我注意到这一点时,我很困惑 glOrtho(1, 1
我正在尝试向我的游戏添加一些基本的 HUD,但是当我尝试更改视角时,我可以看到文本(我之前提到过 HUD),但是在黑屏上。问题出在哪里? gl.glMatrixMode(GL_PROJ
我在使用 GLM 库的 GLMDraw() 函数绘制 Google SketchUp 3D 图像的程序中使用 glOrtho 时遇到问题。我只想在投影模式下查看某些 z 值的图像,而 glOrtho(
/* OpenGL animation code goes here */ glClearColor (0.0f, 0.0f, 0.0f, 0.0f); glClear
目前我正在使用 glOrtho 来缩放和平移我正在渲染的 2D 图形。 我已将视口(viewport)设置为标准宽度和高度。然后我设置 glOrtho 以便我的平截头体使屏幕坐标与世界坐标匹配。 gl
我正在尝试使用本教程学习 LWJGL:http://www.java-gaming.org/topics/lwjgl-tutorial-series-a-simple-moving-rectangle
我正在尝试使用 LWJGL 将 ClickTeam Fusion 游戏移植到 Java。我决定简单地使用像素测量,因为这个游戏中的所有内容都是使用 PNG 文件完成的,甚至是动画(是的,确实如此)。我
鉴于我做了这样的事情: void glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLd
我创建了一个 OpenGL 应用程序,其中使用 glOrtho() 定义了一个查看体积。然后我使用 gluLookAt() 来转换所有点。问题是 - 一旦我这样做,所有点都会从裁剪平面中掉出来,因为它
我正在纹理上绘制,然后使用 GL_QUADS 将此纹理渲染到屏幕上。在屏幕上绘制纹理没有问题,但是在绘制纹理时,唯一有效果的操作是 glClear(GL_COLOR_BUFFER_BIT | GL_D
我是 OpenGl 的初学者,我在设置 glOrtho 相机以匹配窗口大小方面遇到了一些困难,以便我可以使用窗口的坐标绘制一条线。例如,如果我想从坐标 0,10 (x,y) 到 600,10 画一条线
我正在 OpenGL 中创建一个应用程序,我在其中使用 glOrtho(),原点位于左上角: glOrtho(0.0, width, height, 0.0, 0.0, 1.0); 直到我尝试渲染轮廓
我在使用 glOrtho 移动相机时遇到问题。我在中心有一个小四边形,我想尝试使用 glOrtho 移动相机,但它似乎不起作用。四边形根本不动,所以我猜相机也没有移动。也许我想念 glOrtho 的工
我需要在与 XOZ 平面平行(垂直于 OY)的平面上进行 opengl 投影。 你能解释一下我应该使用 glOrtho 进行投影的哪些参数吗? 谢谢, 最佳答案 你的问题的措辞对我来说不是很清楚,但如
我正在使用 OpenGL 创建 2D 游戏。每次我移动对象时,我都必须调用 glLoadIdentity,否则所有对象都会被移动,但是 glLoadIdentity 也会重置 glOrtho 调用,所
我在 (0,0) 处抽了一辆汽车,并设置了一些障碍,但现在我主要关心的是从 glPerspective 切换到 glOrtho,反之亦然。当我从透视切换到正射时,我得到的只是黑屏。 void myin
所以我有一个 3D 对象,我用以下光线绘制: GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 0.9}; /* White light. */ GLflo
在 OpenGL 中我可以这样做: glOrtho(-10, 10, -10, 10, -1, 1) 建立一个坐标系,其中x的范围是-10到10,y的范围是-10到10。 有没有办法在 WPF 中更改
我不知道我的函数是否做错了什么(可能是 glOrtho 的参数错误),所以结果就是错误的,或者是否一切正常。 特别是我有这种情况: 我希望绿色矩形及其所有内部内容占据窗口的所有空间,而不仅仅是窗口的一
我是一名优秀的程序员,十分优秀!