views:

85

answers:

2

Hi,

I'm currently writing an application that actually acts as a "cut" tool for 3D meshes. Well, I had some problems with it now which I am clueless on how to solve, since it is my first application.

I have loaded a model from an object file onto the canvas, then on the same canvas, I use the mouse drag event to draw lines to define the cutting point.

Let us say I want to cut a ball into half and I draw the line in the middle. How do I detect the vertices of the ball under the line.

Secondly, if I rotate/translate the ball, would all the the vertices information change?

+1  A: 

Think of what you'd do in the real world: You can't cut a ball with a line, you must use a knife (a line has no volume). To cut the ball, you must move the knife through the ball.

So what you're looking after is a plane, not a line. To get such a plane, you must use some 3D math. What you have is the canvas orientation and the "side view" of the plane (which looks like a line).

So the plane you're looking for is perpendicular to the canvas. A simple way to get such a plane is to take the canvas orientation and create a plane which has the same orientation and then rotate the plane around the line by 90°.

After that, you can visit all edges of your model and determine on which side of the plane they are. For this, determine on which side of the plane the end points of the edge are. Use the cross product. If they are on the same side (both results of the cross products will have the same sign), you can ignore the edge. Otherwise, you need to determine the intersection point of the edge and plane. Create new edges and connect them accordingly.

See this page for some background on the math. But you should find some helper methods for all this in your opengl library.

if I rotate / translate the ball, would all the the vertices information change

Of course.

Aaron Digulla
+1  A: 

It's not going to be that easy.

I assume the line you are drawing induces a plane which then cuts the sphere.

To do so, you have to calculate the intersecting area of the sphere and the plane.

This is not a trivial task and I suggest using an existing framework for this or if you really want to do this yourself, read about basic intersection problems to get a feeling for this kind of problem. This paper offers a good introduction to various intersection tests.

In general boundary represended volumes, as in your case, are difficult to handle when it comes to more advanced manipulations. Cutting a sphere in half is easy compared to burring a small hole into it. Sometimes it's better to use a volume representation, like tetrahedral meshes or CSG.

Regarding your second question, you shouldn't rotate or translate the sphere, rotate and translate the camera.

DR