簡體   English   中英

計算橫向拉伸對象的比例和位置

[英]Calculating scale and position for stretching an object sideways

我正在嘗試通過在3D空間的2D正交視圖中使用選擇邊界框來實現對象拉伸。 我試圖獲得的效果類型類似於對象被選擇框包圍時,可以拉動邊和角以更改基礎對象的形狀。

我的問題是我無法獲得正確的數學運算。

我可以想到的實現只向鼠標拉伸的唯一方法是執行2個步驟:

  • 1)將對象縮放到鼠標位置的一半(因為完全縮放也會縮放對象的另一面)
  • 2)在下半部分翻譯對象

這應導致將對象鼠標縮放,同時將相對邊緣“鎖定”在適當的位置:

在此處輸入圖片說明

問題:

我已經實現了一個非常糟糕的版本,但是它僅適用於正方形形狀(上面的gif),或更准確地說, 最大寬度/高度/深度都相同的形狀。 否則,將發生以下情況:

在此處輸入圖片說明

細節:

我的對象不是2D,而是3D,但顯示在2D正交視圖上。 它們的左下邊緣沒有原點,它們的原點可以在其中的任何位置,並且任何網格都是可能的。

這是我嘗試根據鼠標坐標計算比例和位置的方法。 該塊用於RIGHT,TOP和FRONT面

//target = mouse position
//objPos = object origin position
//objScale = object's current scale
//min and max = the furthest edges of the mesh, on this axis, scaled
float difference = max - min;

//Get desired scale
float scale = ( target + ( difference/2 )  -objPos ) / (difference/objScale); 

//Get desired position
float scalemax = ( target + ( difference/2 ) - objPos) / difference;
float position = ( ( (difference)/2 ) * ( scalemax ) ) + min; // Gets passed back to the selected object

此塊用於左,下和后表面:

float diff1 = difference/objScale;
float scale = (difference-(target-min))/diff1;
float diff2 = diff1*scale;
float diff3 = max-((diff2/2)+objPos);
float position = diff3+objPos;

因此,我要尋找的是一種在給定鼠標坐標的情況下計算對象比例和位置的正確方法。

我花了很多時間,但最終我發現了,

為了計算合適的比例,我必須將最左邊乘以當前比例添加到當前位置,再減去當前鼠標坐標。 最后,將所有這些值除以該對象在該特定軸上的基本寬度或最極端之間的差。

對於該位置,我做了同樣的事情,方法是將最左邊的邊乘以當前位置的當前比例,然后減去最左邊的邊再乘以新計算的添加到當前位置的比例。 然后,該值將是一個偏移位置,將被添加到當前對象位置。

float scale = (target-((baseMin*objScale)+objPos))/baseDifference;
float position = (((baseMin*objScale)+objPos)-((baseMin*scale)+objPos))+objPos; 

例如,如果對象是一個多維數據集,並且要拉伸多維數據集的右側,則可以說從50個單位一直擴展到250個單位,或者說比例增加了3倍:

base difference = rightmost edge - leftmost edge
base difference = (50) - (-50) = 100;

scale = (250 - ( (-50 * 1) + 0) ) / 100;
scale = (300) / (100) = 3; 

position = (( (-50 * 1) + 0 ) - ((-50 * 3) + 0) ) + 0;
position = (-50) - (-150) = 100;

這適用於任何形狀,任何大小,其原點在其中的任何點。 唯一需要更改的是最小和最大,具體取決於所使用的邊。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM