我目前正在编写一个实际上充当 3D 网格的“剪切”工具的应用程序。好吧,我现在遇到了一些问题,我不知道如何解决,因为这是我的第一个应用程序。
我已经从对象文件中将模型加载到画布上,然后在同一个画布上,我使用鼠标拖动事件来绘制线条以定义切割点。
假设我想把一个球切成两半,然后在中间画线。如何检测线下球的顶点。
其次,如果我旋转/平移球,所有顶点信息都会改变吗?
我目前正在编写一个实际上充当 3D 网格的“剪切”工具的应用程序。好吧,我现在遇到了一些问题,我不知道如何解决,因为这是我的第一个应用程序。
我已经从对象文件中将模型加载到画布上,然后在同一个画布上,我使用鼠标拖动事件来绘制线条以定义切割点。
假设我想把一个球切成两半,然后在中间画线。如何检测线下球的顶点。
其次,如果我旋转/平移球,所有顶点信息都会改变吗?
想想你在现实世界中会做什么:你不能用线切球,你必须用刀(线没有体积)。要切球,您必须将刀穿过球。
所以你要照顾的是一架飞机,而不是一条线。要获得这样的飞机,您必须使用一些 3D 数学。您所拥有的是画布方向和平面的“侧视图”(看起来像一条线)。
所以你要找的平面垂直于画布。获得这样一个平面的一种简单方法是采用画布方向并创建一个具有相同方向的平面,然后将平面绕线旋转 90°。
之后,您可以访问模型的所有边缘并确定它们在平面的哪一侧。为此,确定边的端点在平面的哪一侧。使用叉积。如果它们在同一侧(叉积的两个结果将具有相同的符号),则可以忽略边缘。否则,需要确定边与平面的交点。创建新边并相应地连接它们。
有关数学的一些背景信息,请参阅此页面。但是你应该在你的 opengl 库中找到一些帮助方法。
如果我旋转/平移球,所有顶点信息都会改变
当然。