gpt4 book ai didi

c++ - 四个旋转顶点之间的 HitTest

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

我的程序中有一个简单的矩形,我必须对其进行 HitTest 。我正在使用 openFrameworks,但我认为这里的问题也与 OpenGL 主题有关。

public class Shape : public class ofNode {
Shape() {
container.setFromCenter(getPosition(), 200,100);
setPosition(ofVec3f(365, 50, 0)); //set the position of the node
lookAt(ofVec3f(0,0,0));
}

virtual void draw() {
ofRect(container); //the 200/100 rectangle will be drawn as per the container position and dimensions
}
ofVec3f getTopLeft() const {
return getTopLeft() * ofNode::getGlobalTransformMatrix();
}

ofVec3f getTopRight() const {} //similar - getTopRight from container and multiply
ofVec3f getBottomLeft() const {} //similar
ofVec3f getBottomRight() const {} //similar

bool hitTest(int tx, int ty) {
// return true if mouse pointer is inside four vertices - hit test logic working fine
}

private:
ofRectagle container;
};

我在这里遇到的问题是我在我的程序中旋转和平移形状:

void draw() {
ofPushMatrix();
ofTranslate(600,300,0);
ofRotateY(rotate);
shape->draw();

ofCircle(shape->getTopLeft(), 10); //circle is drawn at the rectangle top left vertex on the screen but the coordinates while rotating and drawing do not change (as seen on cout)
ofCircle(shape->getTopRight(), 10); //similar
ofCircle(shape->getBottomLeft(), 10); //similar
ofCircle(shape->getBottomRight(), 10); //similar
ofPopmatrix();
}

在上面的 draw 函数中改变旋转时,点不会改变。因此,我没有合适的四个顶点用于 HitTest 来确定鼠标是否在里面。如何获取屏幕中可以根据鼠标位置检查 HitTest 的点的位置?

最佳答案

如果你想测试鼠标指针是否在矩形的范围内,我建议你先将它们转换到屏幕空间并在那里进行测试,按照我在 https://stackoverflow.com/a/14424267/524368 中给你的一般想法。

我还要说,是时候停止使用 OpenGL 的内置矩阵操作函数了。 使用它们绝对没有任何好处!有些人认为它们会进行 GPU 加速,但事实并非如此。一旦您在程序的其他位置需要这些矩阵,就不能为此滥用 OpenGL。 OpenGL 毕竟不是一个数学库。在以后的版本中,整个矩阵堆栈已从 OpenGL 中删除——很好的摆脱。

OpenFrameworks comes with a fully featured matrix math library .我强烈建议您使用 that。您可以使用 glLoadMatrix(固定函数管道)或 glUniformMatrix(着色器管道)将生成的矩阵提供给 OpenGL。

您可以使用它来实现我在其他答案中概述的投影功能。

要测试一个点是否位于由边定义的边界内,您可以使用称为“半边”的概念。假设你的边形成一个 star domain环形。然后对于循环中的每条边,您将点与边的叉积。如果该点在循环定义的形状内,则所有叉积将指向同一方向。共面四边形(即投影到屏幕空间的四边形)总是形成一个星域。

关于c++ - 四个旋转顶点之间的 HitTest ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424768/

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