Opengl 放大和缩小并将当前像素保持在鼠标坐标
所以。。。我写了一段代码,它在Opengl的正交模式下绘制了一个四边形。 我知道它的位置和大小。有时是方形的。。有时它是长方形的。 我试图做的是放大和缩小,并停留在同一个位置上的四。 我原以为它会奏效,但事实并非如此。 知道从鼠标位置到角点的距离、偏移量.x以及等于rect_size.x-old_size_w的差,基本数学会告诉我: (offset.x/rect_size.x)*差异。根据鼠标的位置,我可以得到位置需要移动多少的比例。 我希望有人能解决这个问题。。 谢谢 一些数字Opengl 放大和缩小并将当前像素保持在鼠标坐标,opengl,math,Opengl,Math,所以。。。我写了一段代码,它在Opengl的正交模式下绘制了一个四边形。 我知道它的位置和大小。有时是方形的。。有时它是长方形的。 我试图做的是放大和缩小,并停留在同一个位置上的四。 我原以为它会奏效,但事实并非如此。 知道从鼠标位置到角点的距离、偏移量.x以及等于rect_size.x-old_size_w的差,基本数学会告诉我: (offset.x/rect_size.x)*差异。根据鼠标的位置,我可以得到位置需要移动多少的比例。 我希望有人能解决这个问题。。 谢谢 一些数字 lo
location = 100,100
old_size_w = 1024
rect_size.x = 1088 (new size old_ * 1.0625)
mouse_delta.x = 425
offset = 100 - 425 (-325)
difference = 1088-1024 (64)
delta_x = 325/1088 (.2987132....)
x_offset = Cint(delta_x * difference) (19) (19.11764...)
所以。。。。我们只移动了19个像素。。如果我们从另一个方向来计算。。2必须=与旧缩放和新缩放的差异
delta_x = (1088-325) /1088 (.701286...)
x_offset2 = Cint(delta_x * difference) (45) (44.88235...)
19 + 45 = 64 <--- this proves out the math
将鼠标位置存储为u,v,其中u和v位于0.0-1.0上。翻译图像,以便将其作为0、0进行鼠标移动。操纵,在本例中是通过缩放。然后反译,使0,0,变成u。v、 将鼠标位置存储为u,v,其中u和v位于0.0-1.0之间。翻译图像,以便将其作为0、0进行鼠标移动。操纵,在本例中是通过缩放。然后反译,使0,0,变成u。v、 好的。。我解决了这个问题。。我在放大和缩小时使用了两个错误的值。 这是围绕鼠标中心缩放并保持鼠标中心的完整代码。 任何想弄明白这一点的人。。这是一个完美的代码:)
Public Sub img\u scale\u up()
如果未准备好渲染,则返回
如果缩放系数>=4.0,则
缩放系数=4.0
返回“大”,创建t_bmp将重击内存。
如果结束
作为单个的Dim amt=0.0625
缩放系数+=金额
'在调整大小的过程中,这部分数学运算会围绕鼠标中心缩放纹理。
‘old_w和old_h是图像在宽度和高度上的原始大小
'鼠标位置是窗口中的当前鼠标位置。
将偏移调整为新点
暗淡的旧尺寸,旧尺寸为双倍
旧尺寸=(旧尺寸*(缩放系数-金额))
旧尺寸=(旧尺寸*(缩放系数-金额))
偏移量=矩形位置-(鼠标位置)
rect_size.X=缩放系数*旧尺寸
rect_size.Y=缩放系数*旧的
尺寸增量x为双=CDbl(偏移量x/旧尺寸w)
尺寸增量y为双=CDbl(偏移量y/旧尺寸h)
尺寸x_偏移=增量x*(矩形尺寸.x-旧尺寸w)
尺寸y_偏移=增量y*(rect_size.y-old_size_h)
rect_location.X+=CInt(X_偏移)
rect_location.Y+=CInt(Y_偏移)
绘制(当前图像)
端接头
公共子img\U比例下降()
如果未准备好渲染,则返回
如果缩放系数Ok。。我解决了这个问题。。我在放大和缩小时使用了两个错误的值。
这是围绕鼠标中心缩放并保持鼠标中心的完整代码。
任何想弄明白这一点的人。。这是一个完美的代码:)
Public Sub img\u scale\u up()
如果未准备好渲染,则返回
如果缩放系数>=4.0,则
缩放系数=4.0
返回“大”,创建t_bmp将重击内存。
如果结束
作为单个的Dim amt=0.0625
缩放系数+=金额
'在调整大小的过程中,这部分数学运算会围绕鼠标中心缩放纹理。
‘old_w和old_h是图像在宽度和高度上的原始大小
'鼠标位置是窗口中的当前鼠标位置。
将偏移调整为新点
暗淡的旧尺寸,旧尺寸为双倍
旧尺寸=(旧尺寸*(缩放系数-金额))
旧尺寸=(旧尺寸*(缩放系数-金额))
偏移量=矩形位置-(鼠标位置)
rect_size.X=缩放系数*旧尺寸
rect_size.Y=缩放系数*旧的
尺寸增量x为双=CDbl(偏移量x/旧尺寸w)
尺寸增量y为双=CDbl(偏移量y/旧尺寸h)
尺寸x_偏移=增量x*(矩形尺寸.x-旧尺寸w)
尺寸y_偏移=增量y*(rect_size.y-old_size_h)
rect_location.X+=CInt(X_偏移)
rect_location.Y+=CInt(Y_偏移)
绘制(当前图像)
端接头
公共子img\U比例下降()
如果未准备好渲染,则返回
如果Zoom_Factor我通常会在推导正确的方程时迷失方向(犯愚蠢的错误)(因为我使用了许多视图变换公式,而不仅仅是一个),而且大多数情况下我都懒得推导,所以我会这样做:
将鼠标位置转换为不缩放偏移的坐标系
是屏幕坐标系还是世界坐标系取决于变换顺序。将结果存储为mx0,my0
应用缩放
更改
将鼠标位置转换为不缩放偏移的坐标系
它与#1相同,但具有更新的缩放功能。将结果存储为mx1,my1
更新偏移量
只需添加:
offset_x += mx0-mx1;
offset_y += my0-my1;
其中offset\u x,offset\u y
保持视图偏移(位置)
另请参见在推导正确的方程式时,我通常会迷失方向(犯一些愚蠢的错误)(因为我使用了许多视图变换公式,而不仅仅是一个),而且大多数情况下我都懒于推导,所以我会这样做:
将鼠标位置转换为不缩放偏移的坐标系
是屏幕坐标系还是世界坐标系取决于变换顺序。将结果存储为mx0,my0
应用缩放
更改
将鼠标位置转换为不缩放偏移的坐标系
它与#1相同,但具有更新的缩放功能。将结果存储为mx1,my1
更新偏移量
只需添加:
offset_x += mx0-mx1;
offset_y += my0-my1;
其中offset\u x,offset\u y
保持视图偏移(位置)
另请参见这就是它所做的……某种程度上。。。it sc