arcmap矢量图倾斜的怎么办
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arcmap矢量图倾斜的怎么办相关的知识,希望对你有一定的参考价值。
参考技术A 自动矢量化就行。在arcmap里添加一张栅格图片,这里添加一个jpg格式的图片,打开工具箱下面的【空间分析工具】-【重分类】-【重分类】,点击classify,将原图片分为两种颜色,单击OK。以便于自动矢量化。分类结果打开arcscan扩展模块,新建一个线状的shapfile文件,使用ArcScan、工具条,直接生成矢量化的线装要素。
旋转图像后,平移矢量倾斜
【中文标题】旋转图像后,平移矢量倾斜【英文标题】:After rotating image the translation vector is skewed 【发布时间】:2016-04-11 02:01:18 【问题描述】:我正在尝试在旋转图像后更正模型的平移和旋转行为。这似乎是一个普遍的问题。我以前见过这个问题,但我没有看到它以我理解如何将它应用于我的代码的方式回答。我只是希望平移和旋转行为在旋转图像之前保持不变。第一次旋转后,平移和旋转永远倾斜。另外,我对 OpenGL 非常熟悉,所以请慢慢说。
Private Sub GlControl1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles GlControl1.MouseMove
If _MouseButtonLeft Then
'
' get new position of mouse
_XposEnd = e.X - _Xpos
_YposEnd = _Ypos - e.Y
'
' reset the mouse start position
_Xpos = e.X
_Ypos = e.Y
'
' change projection
GL.MatrixMode(MatrixMode.Projection)
GL.Translate(_XposEnd * _MouseSpeed, _YposEnd * _MouseSpeed, 0)
GlControl1.Invalidate()
'
End If
'
If _MouseButtonRight Then
'
' get new position of mouse
_XposEnd = e.X - _Xpos
_YposEnd = _Ypos - e.Y
'
' reset the mouse start position
_Xpos = e.X
_Ypos = e.Y
'
' change projection
GL.MatrixMode(MatrixMode.Projection)
GL.Rotate(_XposEnd * _MouseSpeed, 1, 0, 0)
GL.Rotate(_YposEnd * _MouseSpeed, 0, 1, 0)
GlControl1.Invalidate()
'
End If
End Sub
编辑 1:
我的绘制循环是:
GL.Clear(ClearBufferMask.ColorBufferBit)
GL.Clear(ClearBufferMask.DepthBufferBit)
GL.MatrixMode(MatrixMode.Modelview)
GL.LoadIdentity()
drawStuff()
GlControl1.SwapBuffers()
投影矩阵:让我后退一秒。我正在绘制一个在 3D 空间 [Vertex3] 中有数千个顶点的 CAD 模型。我正在二维空间 [Ortho] 中查看它们。我修改投影矩阵以从不同的角度查看模型。我认为这比重新绘制整个模型并转换所有顶点要容易。在我看来,移动相机比重新计算数千个顶点的位置更容易。我认为这是标准的。如果没有,我会全力以赴。
【问题讨论】:
嘿,你在绘图循环中的任何地方都使用 glLoadIdentity 吗?我假设您不这样做,因为您希望 glRotate 堆叠。如果这是问题,我会详细说明。另外,我觉得你想修改你的投影矩阵很奇怪,你能解释一下吗? 【参考方案1】:从您的代码中,我无法准确判断您期望什么行为,但我怀疑您正在尝试不断读取鼠标输入并增强“相机”。
在 GL 版本中,您使用的模型和视图矩阵被合并到 ModelView
矩阵中。这(在我看来)让事情在开始时更难理解。
如果将它们分开,您可以分别使用模型矩阵和视图矩阵单独转换对象和相机。由于它们是组合在一起的,因此您需要在进行视图转换之前“保存” ModelView 矩阵的状态。
这就是glPushMatrix
和glPopMatrix
派上用场的地方。
想想典型的stack。通过推一个新矩阵到堆栈上,您继承了下面的所有内容(矩阵的当前状态),但随后的转换将被隔离到这个新矩阵。一旦您进行了转换并使用了矩阵(例如渲染),您就可以 pop 将该矩阵从堆栈中返回,这将使您返回到原始矩阵(包含您的模型转换)。您将在每次程序循环时执行此操作。
我已经很长时间没有编写过 VB.NET 或固定功能(前 GL3)代码了,请耐心等待:
GL.MatrixMode(MatrixMode.ModelView)
GL.PushMatrix()
GL.Rotate(viewXRotation, 1, 0, 0)
GL.Rotate(viewYRotation, 0, 1, 0)
GL.Rotate(viewZRotation, 0, 0, 1)
... draw your scene ...
GL.PopMatrix()
由于我看到您使用Projection
矩阵,这里有一些关于这两个矩阵及其交互方式的额外信息。
Projection 矩阵用于将视图坐标(这是应用 ModelView 矩阵时转换成的局部坐标)转换为剪辑坐标(标准化设备坐标)。
这是来自learnopengl.com的插图:
【讨论】:
以上是关于arcmap矢量图倾斜的怎么办的主要内容,如果未能解决你的问题,请参考以下文章