【问题标题】:Processing Mouse Coordinates on Translated Shape在平移形状上处理鼠标坐标
【发布时间】:2014-03-07 10:28:02
【问题描述】:

我有一个问题,似乎找不到明确的答案。

我有一个网格,我在 3D 空间中对其进行了变换和旋转。

translate(width-(width/2), 0);
rotateX(radians(30));
rotateZ(radians(60));
for(tile t: grid){
    t.draw();
}

然后在每个图块对象中,我正在检查鼠标是否在该图块中:

void mouseMoved(){
      float isoX = mouseX / (width-(width/2));  
      isoX = isoX * ((cos(radians(30))-sin(radians(0))));      
      float isoY = mouseY * (cos(radians(60))-sin(radians(0)));
      if(isoX > posX && isoX < posX+20
      && isoY > posY && isoY < posY+20)
      println(getX()+", "+getY());
  }

作为参考,posX 和 posY 是在程序开始时在 arraylist 中设置时赋予每个图块的位置。

这可能只是我的数学问题,但有人可以帮忙吗?

【问题讨论】:

  • 您是否尝试过只使用 mouseX 和 mouseY 而不对其进行任何数学运算,然后检查 isoXisoY 坐标是否在特定的网格位置内?
  • posXposY 正在按图块检查(它是图块类的一部分)。使用当前代码,它是部分工作的,例如它正确地返回了网格顶部的 x 位置,但也在网格下方,这意味着翻译略微倾斜。我真的认为这只是数学问题,但这让我很头疼。
  • 你试过只使用mouseXmouseY分别作为isoXisoY吗?
  • mouseXmouseY 只返回实际的屏幕坐标,而不考虑翻译。

标签: java matrix processing


【解决方案1】:

将 translate 方法包装在 push 和 pop Matrix 中是一种很好的做法:

pushMatrix();
translate(width-(width/2), 0);
//draw here
popMatrix(); 

事实上,一旦您进行翻译,鼠标坐标的默认值就会使用特定的变换进行翻译,因此它们会在调用时返回变换后的值。

【讨论】:

  • 嗨 Tod,一切都包含在 push 和 pop 矩阵方法中。处理仍然返回未转换的屏幕像素坐标。
  • 好吧,你能否更新你的问题,也许是一个较小或子部分,但在它自己的问题中完整的源代码,以便在运行后可以跟踪问题它正在处理 IDE。
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多