Tag: 图形

C#简单3D碰撞检测

我正在尝试开发一个简单的3D环境(在openTK中,基本上是openGL)并实现简单的碰撞检测。 我将拥有一个相机对象,它将有一个边界立方体和一个充满三角形和四边形的世界。 如果我给了一个边界立方体(或者如果更容易的边界球)和一个多边形列表,是否有一种快速而肮脏的方法来进行基本的碰撞检测? 谢谢你的帮助

在屏幕上查找点的坐标?

问题是我有一些图形显示在一个forms,例如矩形,我想捕获当点到达thees字段。 因此,我试图找到这些矩形的corrrdinates,但由于它是forms的坐标,它与鼠标位置的坐标不匹配。 所以我想知道有没有办法在屏幕上找到一个Point在屏幕上有什么coord,而不是在窗体或控制器中?

使用Graphics.FromHwnd在屏幕上绘图和清除

我正在尝试创建一个程序,它获取光标下窗口的句柄,显示有关它的一些数据,并在整个窗口的顶部绘制一个填充矩形(具有非常低的alpha)。 我正在使用C#和winforms。 我已经成功了,但问题是我的draw方法是在BackgroundWorker的循环中并且它不断在窗口上制作越来越多的矩形( – >具有更高alpha的矩形)或者当将鼠标移动到另一个窗口时旧的仍然存在。 我没有设法找到一个方法来清除绘制的矩形,因为它只是在屏幕上“是”,并没有绑定到图形对象或任何东西。 我尝试过使用某些原生方法,比如 [DllImport(“User32.dll”)] public static extern Int64 SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); [DllImport(“user32.dll”)] public static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); [DllImport(“user32.dll”)] public static extern bool UpdateWindow(IntPtr hWnd); [DllImport(“user32.dll”)] public static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprcUpdate, IntPtr hrgnUpdate, RedrawWindowFlags flags); 但以上都没有正常工作。 它们中的一些确实有效,但是当消息进入队列时,重绘不会立即发生,或者非常缓慢和闪烁(闪烁等)。 所以,问题是,如何使用Graphics.FromHwnd(handleOfWindowUnderCursor)“删除”我绘制的矩形? 我实际上认为它在其他窗口上绘制并不重要,因为我在试图摆脱我自己的forms上的图纸时也遇到了同样的问题(从来没有得到那个固定!)。 […]

如何摆脱WinForms滚动动画中的混蛋?

我正在C#中编写一个简单的控件,它像一个图片框,但图像不断向上滚动(并从底部重新出现)。 动画效果由计时器(System.Threading.Timer)驱动,计时器从缓存的图像(分为两部分)复制到隐藏缓冲区,然后在其Paint事件中将其绘制到控件的表面。 问题在于,当以每秒20+帧的高帧速率运行时,这种滚动动画效果略微不稳定(在较低的帧速率下,效果太小而无法被感知)。 我怀疑这种混蛋是因为动画与我的显示器的刷新率没有任何同步,这意味着每个帧在屏幕上保持可变的时间长度而不是恰好25毫秒。 有什么方法可以让这个动画顺利滚动吗? 您可以在此处下载示例应用程序(运行它并单击“开始”),源代码在此处 。 它看起来并不可怕,但是如果你仔细观察它就可以看到打嗝。 警告 :这个动画产生一种非常奇怪的视错觉效果,可能会让你有点不舒服。 如果您观看一段时间然后将其关闭,它看起来就像您的屏幕垂直伸展一样。 更新 :作为实验,我尝试用我的滚动位图创建一个AVI文件。 结果不如我的WinForms动画生涩,但仍然是不可接受的(它仍然让我感到厌倦了我的胃,看了太久)。 我想我遇到了一个根本没有与刷新率同步的问题,所以我可能不得不坚持让人们因为我的外表和个性而生病。

DrawRectangle中的边框

好吧,我正在为我自己的控件编写OnPaint事件的编码,这对我来说是非常必要的,以使其像素精确。 我对矩形边框有一点问题。 见图: 删除了死的ImageShack链接 使用相同的位置和大小参数绘制这两个矩形,但使用不同大小的笔。 看看发生了什么? 当边界变大时,它会占据矩形之前的自由空间(左侧)。 我想知道是否有某种属性使得边框被绘制在矩形内部,因此到矩形的距离将始终相同。 谢谢。

CE上的抗锯齿DrawLine

我正在使用C#.NET 3.5在Windows CE中为Graphics对象绘制一条线。 我使用的代码如下所示: e.Graphics.DrawLine(new Pen(Color.FromArgb(11, 118, 200), 2), x1, y1, x2, y2); 然而,由于锯齿等,这看起来很糟糕。无论如何,我可以绘制抗锯齿线? 从我可以告诉Graphics对象本身不支持这个,但无论如何使用一些技巧“欺骗”这种效果?

在Windows窗体中有效地绘制网格

我正在用C#编写Conway的生命游戏的实现。 这是我用来绘制网格的代码,它在我的panel_Paint事件中。 g是图形上下文。 for (int y = 0; y < numOfCells * cellSize; y += cellSize) { for (int x = 0; x < numOfCells * cellSize; x += cellSize) { g.DrawLine(p, x, 0, x, y + numOfCells * cellSize); g.DrawLine(p, 0, x, y + size * drawnGrid, x); } } 当我运行我的程序时,它没有响应,直到它完成绘制网格,这需要几秒钟在numOfCells = 100&cellSize = […]

最快的Sobel边缘检测C#

我想制作一个实现sobel边缘检测的程序。 这是我的代码: private Bitmap SobelEdgeDetect(Bitmap ori) { Bitmap b = original; Bitmap bb = original; int width = b.Width; int height = b.Height; int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; int[,] gy = new int[,] { { 1, 2, 1 […]

如何确定GDI +中两条线的交点?

我正在使用.NET来创建一个具有绘图表面的应用程序,类似于Visio。 UI使用Graphics.DrawLine连接屏幕上的两个对象。 这个简单的实现工作正常,但随着表面变得更复杂,我需要一种更健壮的方式来表示对象。 这些强大要求之一是确定两条线的交叉点,因此我可以通过某种图形指示分离。 所以我的问题是,有人可以建议一种方法吗? 也许使用不同的技术(可能是GraphViz)或算法?

如何在图片框上绘制文字?

我用谷歌搜索“在图片框C#上绘图文字”,但我找不到任何有用的东西。然后我用谷歌搜索“在C#上绘图文字”,我发现了一些代码,但它并没有按我想要的方式工作。 private void DrawText() { Graphics grf = this.CreateGraphics(); try { grf.Clear(Color.White); using (Font myFont = new Font(“Arial”, 14)) { grf.DrawString(“Hello .NET Guide!”, myFont, Brushes.Green, new PointF(2, 2)); } } finally { grf.Dispose(); } } 当我调用该函数时,表单的背景颜色变为白色(默认情况下为黑色)。 我的问题: 1:这会在图片盒上工作吗? 2:如何解决问题?