Subject:
|
Re: Quick way to mirror-image a model?
|
Newsgroups:
|
lugnet.cad
|
Date:
|
Thu, 24 Jun 2004 15:09:39 GMT
|
Viewed:
|
4448 times
|
| |
| |
In lugnet.cad, Carl Nelson wrote:
> What about a flag for default behavior? I've been coding to ignore
> ones with default rotations,
Why? I have a slow PC, and running the mirwiz.exe program is
nearly instantaneous. It's a lookup and 2 matrix multiplies per
part. If the exception matrix lookup fails, use the default matrix.
It would take extra, unneeded code to ignore things. Resist the
urge...
> but there are plenty of parts (especially slopes) that need a
> (-1 0 0 0 1 0 0 0 1) rotation
Stop saying rotation. It makes me think you're not doing it right.
That's a mirror matrix.
> applied when reflected front-to-back
> and it would be nice to have a flag to distinguish those needing
> default behavior from those where the true correction matrix is
> (-1 0 0 0 1 0 0 0 1).
If you *always* do the same matrix math there's no need to
distinguish. If you're not, then you're making extra busy work
for yourself and possibly introducing bugs. Here's the pseudo code.
for (*ALL* parts in the subfile)
{
float m[4][4]; // Tempory working matrix.
float md[4][4] = { // Default = left-right mirror
{-1.0,0.0,0.0,0.0},
{0.0,1.0,0.0,0.0},
{0.0,0.0,1.0,0.0},
{0.0,0.0,0.0,1.0}
};
float *me = md; // Init exception mirror to left-right (the default).
float *mp = md; // Init global subfile mirror to left-right.
for( i=0; i< numExceptions; i++ )
{
if (exception[i] matches this part)
{
// Use the matrix from the exception list (instead of md).
me = exception[i].matrix
// Also use the substitute partname
strcpy(datname, exception[i].datname);
break;
}
}
M4M4Mul(m,LinePtr->v,me); // Run the initial mirror on the part
M4M4Mul(LinePtr->v,mp,m); // Apply global subfile mirror to part
// NOTE: You can set mp to mirror across whatever plane you want.
// The example here mirrors the subfile across the YZ plane.
}
It's simple and it's all done with mirrors, except for a few weird
parts which might contain a rotation and/or translation component
mixed in with the mirroring in the me matrix.
So far I've only found a few door parts that need a translation
component. See http://ldglite.sf.net/mirror.ini for details on
the doors.
Enjoy,
Don
|
|
Message has 1 Reply: | | Re: Quick way to mirror-image a model?
|
| (...) Why process something as an exception when the default behavior is needed? It's all in what one sees as extra, unneeded code. ;-) Though I just did some timing and I don't see any performance differences between ignoring them and not. (...) (...) (20 years ago, 24-Jun-04, to lugnet.cad)
|
Message is in Reply To:
| | Re: Quick way to mirror-image a model?
|
| What about a flag for default behavior? I've been coding to ignore ones with default rotations, but there are plenty of parts (especially slopes) that need a (-1 0 0 0 1 0 0 0 1) rotation applied when reflected front-to-back and it would be nice to (...) (20 years ago, 24-Jun-04, to lugnet.cad)
|
65 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|