





 
 




 
 


I've been rendering quite a few illustrations for
http://news.povray.org/povray.offtopic/message/%3Cweb.5f3045d617b7b05f1f9dae300%40news.povray.org%3E/#%3Cweb.5f3045d61
7b7b05f1f9dae300%40news.povray.org%3E
and have been mixing the very broad strokes with digging into the very detailed
bits.
At the moment, having some issues with smooth_triangles and want to verify a few
things, so I want to make sure everything is absolutely correct. Assume I'm
laying out a grid of squares made up of 2 triangles each.
All my flat triangles are fine, and I can see all of the individual triangles,
since all of the face normals are sufficiently different.
With smooth_triangles, even though the vertex coordinates are the same,
sometimes I get the degenerate triangle warning when working out the vertex
normal vectors.
When I use the corners of the square to calculate the normals, the edge between
the two triangles of the square softens/goes away, but the edges between all of
the squares are still pretty abrupt.
When I try to use a small dy or dx offset to calculate the normals, I get a lot
of the degenerate triangle warnings and few if any visible triangles. Not sure
why.
So:
When calculating the normals, do I use the remaining two triangle vertices, or
the orthogonal edge vectors of the square?
Do I normalize the vectors before using vcross()?
Do I normalize the resulting vertex normal vectors?
Thanks
Post a reply to this message


 
 




 
 


"Bald Eagle" <cre### [at] netscapenet> wrote:
> I've been rendering quite a few illustrations for
>
>
http://news.povray.org/povray.offtopic/message/%3Cweb.5f3045d617b7b05f1f9dae300%40news.povray.org%3E/#%3Cweb.5f3045d
61
> 7b7b05f1f9dae300%40news.povray.org%3E
>
> and have been mixing the very broad strokes with digging into the very detailed
> bits.
>
> At the moment, having some issues with smooth_triangles and want to verify a few
> things, so I want to make sure everything is absolutely correct. Assume I'm
> laying out a grid of squares made up of 2 triangles each.
>
> All my flat triangles are fine, and I can see all of the individual triangles,
> since all of the face normals are sufficiently different.
>
> With smooth_triangles, even though the vertex coordinates are the same,
> sometimes I get the degenerate triangle warning when working out the vertex
> normal vectors.
>
> When I use the corners of the square to calculate the normals, the edge between
> the two triangles of the square softens/goes away, but the edges between all of
> the squares are still pretty abrupt.
> When I try to use a small dy or dx offset to calculate the normals, I get a lot
> of the degenerate triangle warnings and few if any visible triangles. Not sure
> why.
>
> So:
>
> When calculating the normals, do I use the remaining two triangle vertices, or
> the orthogonal edge vectors of the square?
> Do I normalize the vectors before using vcross()?
> Do I normalize the resulting vertex normal vectors?
There are several possible ways to create normals for a triangle mesh.
One of them is described in the first answer here:
"Calculating normals in a triangle mesh"
https://stackoverflow.com/questions/6656358/calculatingnormalsinatrianglemesh
A couple of the other answers also contain some useful information.
I would also suggest that you explore the "Linked" and "Related"
questions/answers.
Some more ways to calculate the normals are described in this article:
"A Comparison of Algorithms for Vertex Normal Computation"
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.99.2846&rep=rep1&type=pdf
I think that there are even more sensible ways to calculate the normals,
each having it's advantages and disadvantages with different meshes.

Tor Olav
http://subcube.com
https://github.com/tok
Post a reply to this message


 
 




 
 


Expecting this to be super helpful. Maybe some of those will rectify the
visible tiling.
Still perplexed about why normal vector values would cause POVRay to report
degenerate triangles.
Just for reference:
#ifdef () doesn't preempt negative subscript or subscript out of range errors.
One should likely protect code with index < 0 or index > dimension_size1
checks.
Thanks, Tor.
BW
Post a reply to this message


 
 




 
 


"Bald Eagle" <cre### [at] netscapenet> wrote:
> Expecting this to be super helpful. Maybe some of those will rectify the
> visible tiling.
>
> Still perplexed about why normal vector values would cause POVRay to report
> degenerate triangles.
Have you verified that none of the normal vectors are zero vectors or have a
very short length ?
Does POVRay accept the triangles in the mesh when you do not add the normal
vectors ?
> Just for reference:
> #ifdef () doesn't preempt negative subscript or subscript out of range errors.
>
> One should likely protect code with index < 0 or index > dimension_size1
> checks.
 Or write code that does not create out of range indices...

Tor Olav
http://subcube.com
https://github.com/tok
Post a reply to this message


 
 




 
 


"
> When calculating the normals, do I use the remaining two triangle vertices, or
> the orthogonal edge vectors of the square?
You lost me here with the "orthogonal edge vectors of the square".
I would always use triangle vertices.
> Do I normalize the vectors before using vcross()?
I never do.
> Do I normalize the resulting vertex normal vectors?
Yes! Well, I usually do mesh2, I add all the normals for a point togather then
normalize that.
How are you filling the smooth_triangle.
From the sound of it, a normal and a triangle values may be switched.
Hope this helps some.
Have Fun!
Post a reply to this message


 
 




 
 


"Tor Olav Kristensen" <tor### [at] TOBEREMOVEDgmailcom> wrote:
> "Bald Eagle" <cre### [at] netscapenet> wrote:
> > Still perplexed about why normal vector values would cause POVRay to report
> > degenerate triangles.
>
> Have you verified that none of the normal vectors are zero vectors or have a
> very short length ?
I have not  I was mostly just trying to get the code to _work_ in the short
blocks of time I had available to struggle with it. I did not think it was
possible or probably, as the normal vector was calculated as a _sum_, implying
that the sum of all the vectors would have had to be very small or zero. And I
was adding more vectors to code that previously worked....
But it had occurred to me to do that and I should do the checks.
I was just surprised that the normal triggered a degenerate triangle warning.
> Does POVRay accept the triangles in the mesh when you do not add the normal
> vectors ?
Yes. In terms of the fact that I was using union {}, not mesh {}.
>  Or write code that does not create out of range indices...
That's just a patently absurd assertion. ;P
Post a reply to this message


 
 




 