Subject:
|
Re: Rendering implementation details
|
Newsgroups:
|
lugnet.cad.dev
|
Date:
|
Tue, 25 Jan 2005 20:57:25 GMT
|
Viewed:
|
1909 times
|
| |
| |
In lugnet.cad.dev, Mark Tarrabain wrote:
> Okay.... having had a day to think about it and a night to sleep on it,
> I think I've figured out something....
>
> But it would only work if the optional lines were incident to edges of
> polygons that are part of the object being drawn. I'm not sure if one
> could always make that assumption.
>
> But the idea I was envisioning was something like this...
>
> During the initial processing of the file, for every optional line in
> the object, find the two polygons in the file which share that edge, and
> associate those two polygons with that line.
>
> During rendering when any optional line is encountered, then for both
> polygons that the line is associated with, take the dot product of its
> outward surface normal and a vector pointing directly towards the viewer
> (or viewing plane, if an orthgonal projection is being used). If one
> dot product is less than or equal to 0 and the other greater than or
> equal to 0 then draw the optional line, otherwise both faces are back or
> front facing and the optional line should be omitted.
>
> This incurs the overhead of 2 transformations per optional line (one for
> both polygons on either side of it), rather than the 4 I was mentioning
> before. I'm not sure if it's an acceptable improvement or not.
I don't see it. Are you sure this works in the perspective projection?
Because I can't quite figure out what the magic view vector is in that
case. I think you'd need to calculate one view vector for each edge
endpoint, which brings the number of transformations back up to 4.
> Of course, this would only work at all if all optional lines happened to
> be incident with polygon edges elsewhere in the object, which isn't
> strictly required by the format, so I can't say I'd expect it to work
> all the time.
>
> A variation on this, which I am pretty sure _would_ work is to not draw
> optional lines at all, and perform the above test on all edges in the
> object which are not incident to any mandatory lines. This effectively
> makes a sillouhette for the object, and would be drawn in the color used
> for edges based on the edge color for the polygon that is facing front
> (which would be the whole object if it were all one color). The
> downside to this approach is that it would almost result in more
> transformations, but at least it does not make any assumptions about
> what may or may not be in the file.
You're right about this one. An ldraw renderer should be able to
figure out from examining the edges where to put the type 5 lines.
But the beauty of the magic halo and cartoon rendering algorithms is
that you don't have to figure out anything. You just use BFC settings
and make a display list so the graphics card does all the math. That's
gotta be faster. Of course, as Travis pointed out, it requires full
BFC compliance to work. Oh well.
Don
PS. Are you planning a new renderer? Why not fiddle with the ldview
sources instead?
|
|
Message has 1 Reply: | | Re: Rendering implementation details
|
| (...) Actually, one can bring the number of transformations down to 1 for the entire _object_. Interesting what can happen when an idea sits in the brain and percolates for a couple of days. A new idea I had was to just transform the camera position (...) (20 years ago, 29-Jan-05, to lugnet.cad.dev)
|
Message is in Reply To:
| | Re: Rendering implementation details
|
| Okay.... having had a day to think about it and a night to sleep on it, I think I've figured out something.... But it would only work if the optional lines were incident to edges of polygons that are part of the object being drawn. I'm not sure if (...) (20 years ago, 25-Jan-05, to lugnet.cad.dev)
|
22 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
|
|
|
|