gpt4 book ai didi

c++ - 放大鼠标,考虑相机翻译? (OpenGL)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:00 25 4
gpt4 key购买 nike

这是我的问题,我有一个比例点,即未投影的鼠标位置。我还有一个“基本上通过 X 和 Y 平移所有对象的相机。我想要做的是实现缩放到鼠标位置。

我试过这个:

   1. Find the mouse's x and y coordinates 
2. Translate by (x,y,0) to put the origin at those coordinates
3. Scale by your desired vector (i,j,k)
4. Translate by (-x,-y,0) to put the origin back at the top left

但这并不影响相机的翻译。

我怎样才能正确地做到这一点。谢谢

glTranslatef(controls.MainGlFrame.GetCameraX(),
controls.MainGlFrame.GetCameraY(),0);
glTranslatef(current.ScalePoint.x,current.ScalePoint.y,0);

glScalef(current.ScaleFactor,current.ScaleFactor,0);
glTranslatef(-current.ScalePoint.x,-current.ScalePoint.y,0);

最佳答案

与其使用 glTranslate 移动所有对象,不如尝试 glOrtho .它将所需的左坐标、右坐标、底部坐标、顶部坐标和最小/最大深度作为参数。

例如,如果您调用 glOrtho(-5, 5, -2, 2, ...);您的屏幕将显示坐标在从 (-5,2) 到 (5,-2) 的矩形内的所有点。优点是您可以轻松调整缩放级别。

如果您不乘以任何 View /投影矩阵(我假设是这种情况),则默认屏幕坐标范围为 (-1,1) 到 (1,-1)。

但在您的项目中,控制相机可能非常有用。在绘制任何对象而不是 glTranslate 之前调用它:

float left = cameraX - zoomLevel * 2;
float right = cameraX + zoomLevel * 2;
float top = cameraY + zoomLevel * 2;
float bottom = cameraY - zoomLevel * 2;
glOrtho(left, right, bottom, top, -1.f, 1.f);

请注意,cameraX 和 cameraY 现在代表屏幕的中心。

现在当你放大一个点时,你只需要做这样的事情:

cameraX += (cameraX - screenX) * 0.5f;
cameraY += (cameraY - screenY) * 0.5f;
zoomLevel += 0.5f;

关于c++ - 放大鼠标,考虑相机翻译? (OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3286669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com