POV-Ray : Newsgroups : povray.general : Newbie Question: a simple polygon in 3D Server Time
3 Aug 2024 02:20:50 EDT (-0400)
  Newbie Question: a simple polygon in 3D (Message 4 to 13 of 13)  
<<< Previous 3 Messages Goto Initial 10 Messages
From: nomail
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 16 Jul 2004 16:55:00
Message: <web.40f83f6530a9f2a0c523eabf0@news.povray.org>
Tor Olav Kristensen <tor### [at] TOBEREMOVEDhotmailcom> wrote:
> nomail@nomail wrote:
>
> If the number of sampled points from each slice contour
> is equal, then you can write a little macro that produces
> triangles that connects each pair of successive slices.
>
> (All the triangles can be merged into a mesh.)
>
> --
> Tor Olav
> http://subcube.net
> http://subcube.com

Thanks Tor for your response.
I saw your web-site. The photos were great, but I am still newbie, and your
images are very complicated for me...
Do you have a simple example??.


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 09:53:05
Message: <40f92f41$1@news.povray.org>
nomail@nomail wrote:
> Tor Olav Kristensen <tor### [at] TOBEREMOVEDhotmailcom> wrote:
> 
>>nomail@nomail wrote:
>>
>>If the number of sampled points from each slice contour
>>is equal, then you can write a little macro that produces
>>triangles that connects each pair of successive slices.
>>
>>(All the triangles can be merged into a mesh.)
...
> Thanks Tor for your response.
> I saw your web-site. The photos were great, but I am still newbie, and your
> images are very complicated for me...
> Do you have a simple example??.

See below for an example.

Note that I have commented out some points in the second contour
in order to get the same amount of samples around each slice.

Better results can be achieved by using a mesh2{} mesh instead of
triangles.

The code can also be made more efficient (and optimal in other ways),
but I've tried to keep it simple.


Tor Olav


// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7

#macro Slice(ContourA, ContourB, FromZ, ToZ)

   #local Size = dimension_size(ContourA, 1);

   #local Cnt = 0;
   #while (Cnt < Size - 1)
     #local p1 = ContourA[Cnt] + z*FromZ;
     #local p2 = ContourB[Cnt] + z*ToZ;
     #local p3 = ContourA[Cnt + 1] + z*FromZ;
     #local p4 = ContourB[Cnt + 1] + z*ToZ;
     triangle { p1, p2, p3 }
     triangle { p2, p3, p4 }
     #local Cnt = Cnt + 1;
   #end // while

#end // macro Slice

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7

#declare Contour1 =
   array[84] {
     <346, 224, 0>,
     <345, 224, 0>,
     <345, 227, 0>,
     <344, 227, 0>,
     <344, 229, 0>,
     <343, 229, 0>,
     <343, 231, 0>,
     <342, 231, 0>,
     <342, 232, 0>,
     <341, 232, 0>,
     <341, 233, 0>,
     <340, 233, 0>,
     <340, 234, 0>,
     <339, 234, 0>,
     <339, 235, 0>,

     <337, 235, 0>,
     <337, 236, 0>,
     <335, 236, 0>,
     <335, 237, 0>,

     <333, 237, 0>,
     <333, 238, 0>,
     <324, 238, 0>,
     <324, 237, 0>,
     <322, 237, 0>,
     <322, 236, 0>,
     <320, 236, 0>,
     <320, 235, 0>,

     <318, 235, 0>,
     <318, 234, 0>,
     <317, 234, 0>,
     <317, 233, 0>,
     <316, 233, 0>,
     <316, 232, 0>,
     <315, 232, 0>,
     <315, 231, 0>,
     <314, 231, 0>,
     <314, 229, 0>,
     <313, 229, 0>,
     <313, 227, 0>,
     <312, 227, 0>,
     <312, 224, 0>,

     <311, 224, 0>,
     <311, 215, 0>,
     <312, 215, 0>,
     <312, 212, 0>,
     <313, 212, 0>,
     <313, 210, 0>,
     <314, 210, 0>,
     <314, 208, 0>,
     <315, 208, 0>,
     <315, 207, 0>,
     <316, 207, 0>,
     <316, 206, 0>,
     <317, 206, 0>,
     <317, 205, 0>,
     <318, 205, 0>,
     <318, 204, 0>,

     <320, 204, 0>,
     <320, 203, 0>,
     <322, 203, 0>,
     <322, 202, 0>,
     <324, 202, 0>,
     <324, 201, 0>,
     <333, 201, 0>,
     <333, 202, 0>,
     <335, 202, 0>,
     <335, 203, 0>,
     <337, 203, 0>,
     <337, 204, 0>,

     <339, 204, 0>,
     <339, 205, 0>,
     <340, 205, 0>,
     <340, 206, 0>,
     <341, 206, 0>,
     <341, 207, 0>,
     <342, 207, 0>,
     <342, 208, 0>,
     <343, 208, 0>,
     <343, 210, 0>,
     <344, 210, 0>,
     <344, 212, 0>,
     <345, 212, 0>,
     <345, 215, 0>,
     <346, 215, 0>
   }


#declare Contour2 =
   array[84] {
     <346, 224, 0>,
     <345, 224, 0>,
     <345, 227, 0>,
     <344, 227, 0>,
     <344, 229, 0>,
     <343, 229, 0>,
     <343, 231, 0>,
     <342, 231, 0>,
     <342, 232, 0>,
     <341, 232, 0>,
     <341, 233, 0>,
     <340, 233, 0>,
     <340, 234, 0>,
     <339, 234, 0>,
     <339, 235, 0>,

//    <338, 235, 0>,
//    <338, 236, 0>,
     <337, 236, 0>,
     <337, 237, 0>,
     <335, 237, 0>,
     <335, 238, 0>,

     <332, 238, 0>,
     <332, 239, 0>,
     <324, 239, 0>,
     <324, 238, 0>,
     <321, 238, 0>,
     <321, 237, 0>,
     <319, 237, 0>,
     <319, 236, 0>,

     <318, 236, 0>,
     <318, 235, 0>,
     <317, 235, 0>,
     <317, 234, 0>,
     <316, 234, 0>,
     <316, 233, 0>,
     <315, 233, 0>,
     <315, 232, 0>,
     <314, 232, 0>,
     <314, 231, 0>,
     <313, 231, 0>,
     <313, 229, 0>,
//    <312, 229, 0>,
     <312, 227, 0>,

//    <311, 227, 0>,
     <311, 224, 0>,
//    <310, 224, 0>,
     <310, 214, 0>,

     <311, 214, 0>,
     <311, 211, 0>,
//    <312, 211, 0>,
     <312, 209, 0>,
     <313, 209, 0>,
     <313, 207, 0>,
     <314, 207, 0>,
     <314, 206, 0>,
     <315, 206, 0>,
     <315, 205, 0>,
     <316, 205, 0>,
     <316, 204, 0>,
     <317, 204, 0>,
     <317, 203, 0>,
     <318, 203, 0>,
     <318, 202, 0>,

     <319, 202, 0>,
     <319, 201, 0>,
     <321, 201, 0>,
     <321, 200, 0>,
     <324, 200, 0>,
     <324, 199, 0>,
     <332, 199, 0>,
     <332, 200, 0>,
     <335, 200, 0>,
     <335, 201, 0>,
     <337, 201, 0>,
     <337, 202, 0>,
//    <338, 202, 0>,
//    <338, 203, 0>,

     <339, 203, 0>,
     <339, 204, 0>,
     <340, 204, 0>,
     <340, 205, 0>,
     <341, 205, 0>,
     <341, 206, 0>,
     <342, 206, 0>,
     <342, 207, 0>,
     <343, 207, 0>,
     <343, 209, 0>,
     <344, 209, 0>,
     <344, 211, 0>,
     <345, 211, 0>,
     <345, 214, 0>,
     <346, 214, 0>
   }

union {
   Slice(Contour1, Contour2, -10, 0)
   pigment { color rgb <1, 0, 0> }
}

/*
union {
   Slice(Contour1, Contour2, 0, 10)
   pigment { color rgb <1, 0, 0> }
}

union {
   Slice(Contour1, Contour2, 10, 20)
   pigment { color rgb <1, 0, 0> }
}
*/

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7

#declare pCenter = <311 + (346 - 311)/2, 199 + (239 - 199)/2, 0>;

camera {
   location <5, 4, -10>*10
   look_at <0, 0, 0>
   translate pCenter
}

background { color rgb <1, 1, 1>*0.4 }

light_source {
   <8, 10, 10>*100
   color rgb <1, 1, 1>
}

// ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 09:57:04
Message: <40f93030$1@news.povray.org>
Tor Olav Kristensen wrote:

...
> 
> #macro Slice(ContourA, ContourB, FromZ, ToZ)
> 
>   #local Size = dimension_size(ContourA, 1);
> 
>   #local Cnt = 0;
>   #while (Cnt < Size - 1)
>     #local p1 = ContourA[Cnt] + z*FromZ;
>     #local p2 = ContourB[Cnt] + z*ToZ;
>     #local p3 = ContourA[Cnt + 1] + z*FromZ;
>     #local p4 = ContourB[Cnt + 1] + z*ToZ;
>     triangle { p1, p2, p3 }
>     triangle { p2, p3, p4 }
>     #local Cnt = Cnt + 1;
>   #end // while
> 
> #end // macro Slice
> 
...

If you want the slice to be connected all the way around, then just
use this macro instead:


#macro Slice(ContourA, ContourB, FromZ, ToZ)

   #local Size = dimension_size(ContourA, 1);

   #local Cnt = 0;
   #while (Cnt < Size)
     #local p1 = ContourA[mod(Cnt, Size)] + z*FromZ;
     #local p2 = ContourB[mod(Cnt, Size)] + z*ToZ;
     #local p3 = ContourA[mod(Cnt + 1, Size)] + z*FromZ;
     #local p4 = ContourB[mod(Cnt + 1, Size)] + z*ToZ;
     triangle { p1, p2, p3 }
     triangle { p2, p3, p4 }
     #local Cnt = Cnt + 1;
   #end // while

#end // macro Slice


-- 
Tor Olav
http://subcube.net
http://subcube.com


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 10:01:13
Message: <40f93129$1@news.povray.org>
Tor Olav Kristensen wrote:

...
> union {
>   Slice(Contour1, Contour2, -10, 0)
>   pigment { color rgb <1, 0, 0> }
> }
> 
> /*
> union {
>   Slice(Contour1, Contour2, 0, 10)
>   pigment { color rgb <1, 0, 0> }
> }
> 
> union {
>   Slice(Contour1, Contour2, 10, 20)
>   pigment { color rgb <1, 0, 0> }
> }
> */
...


Ooops - I meant to write this:


union {
   Slice(Contour1, Contour2, -10, 0)
   pigment { color rgb <1, 0, 0> }
}

union {
   Slice(Contour2, Contour3, 0, 10)
   pigment { color rgb <1, 0, 0> }
}

union {
   Slice(Contour3, Contour4, 10, 20)
   pigment { color rgb <1, 0, 0> }
}


-- 
Tor Olav
http://subcube.net
http://subcube.com


Post a reply to this message

From: nomail
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 11:05:00
Message: <web.40f93efd30a9f2a09335918f0@news.povray.org>
Tor Olav Kristensen <tor### [at] TOBEREMOVEDhotmailcom> wrote:
> Tor Olav Kristensen wrote:
>
> ...
> > union {
> >   Slice(Contour1, Contour2, -10, 0)
> >   pigment { color rgb <1, 0, 0> }
> > }
> >
> > /*
> > union {
> >   Slice(Contour1, Contour2, 0, 10)
> >   pigment { color rgb <1, 0, 0> }
> > }
> >
> > union {
> >   Slice(Contour1, Contour2, 10, 20)
> >   pigment { color rgb <1, 0, 0> }
> > }
> > */
> ...
>
>
> Ooops - I meant to write this:
>
>
> union {
>    Slice(Contour1, Contour2, -10, 0)
>    pigment { color rgb <1, 0, 0> }
> }
>
> union {
>    Slice(Contour2, Contour3, 0, 10)
>    pigment { color rgb <1, 0, 0> }
> }
>
> union {
>    Slice(Contour3, Contour4, 10, 20)
>    pigment { color rgb <1, 0, 0> }
> }

Thanks again for your help Tor.... But the contours of my geometry don't
have the same number of points in each slice.
More clearly, I cut a mouse into 240 slices to do a phantom for medical
applications. I need to re-build the mouse in 3D using the photos of the
slices.. The form of organs is not regular. I mean, they have a polygon
shape. Take the kidney for example: when I start the cut, it appears small,

on for the other organs.
Another thing, I am looking for solid polygons and NOT for hollow

If it is posissible, I just want the method....Many thanks


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 11:27:44
Message: <40f94570$1@news.povray.org>
nomail@nomail wrote:

...
> Thanks again for your help Tor.... But the contours of my geometry don't
> have the same number of points in each slice.
> More clearly, I cut a mouse into 240 slices to do a phantom for medical
> applications. I need to re-build the mouse in 3D using the photos of the
> slices.. The form of organs is not regular. I mean, they have a polygon
> shape. Take the kidney for example: when I start the cut, it appears small,

> on for the other organs.
> Another thing, I am looking for solid polygons and NOT for hollow

> If it is posissible, I just want the method....Many thanks

I think (but I'm not sure) that you can achieve what you want
with POV-Ray if you put some work into it.

I don't have time to explain more right now, but in the mean
time you can have a look at this page:

http://staff.aist.go.jp/r-suzuki/e/povray/iso/df_body.htm

-- 
Tor Olav
http://subcube.net
http://subcube.com


Post a reply to this message

From: ingo
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 14:10:11
Message: <Xns9529CD309EDD5seed7@news.povray.org>
in news:web.40f7958f7069c0019335918f0@news.povray.org  wrote:

>  have cut an object into many slices. For each slice I have taken a
> photographical image... I can get the X Y coordinates of the
> perimeter of this object in each slice.. Using POV-Ray, I 'd like to
> reconstruct this object in 3D. Someone can help me?.. 


Have a look at this:
http://mi.eng.cam.ac.uk/~gmt11/software/isosurf/isosurf.html
the problem may be how to convert the output to a POV-Ray mesh object.

Another option is to convert your images to grayscale TGA's and then turn 
it into a df3-file  http://www.users.on.net/~pod/df3/
This then can be used with isosurfaces or media for the latter:   
http://news.povray.org/povray.binaries.images/13012/

Ingo


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 18:56:13
Message: <40f9ae8d$1@news.povray.org>
Tor Olav Kristensen wrote:

> nomail@nomail wrote:
> 
> ...
> 
>> Thanks again for your help Tor.... But the contours of my geometry don't
>> have the same number of points in each slice.
>> More clearly, I cut a mouse into 240 slices to do a phantom for medical
>> applications. I need to re-build the mouse in 3D using the photos of the
>> slices.. The form of organs is not regular. I mean, they have a polygon
>> shape. Take the kidney for example: when I start the cut, it appears 
>> small,

>> and so
>> on for the other organs.
>> Another thing, I am looking for solid polygons and NOT for hollow

>> If it is posissible, I just want the method....Many thanks
> 
> 
> I think (but I'm not sure) that you can achieve what you want
> with POV-Ray if you put some work into it.
> 
> I don't have time to explain more right now, but in the mean
> time you can have a look at this page:
> 
> http://staff.aist.go.jp/r-suzuki/e/povray/iso/df_body.htm

I see that Ingo has suggested that you make df3-files from
your photos. I was thinking along the lines too.

For this to work, you need to get the different organs to
stand out visually in the grayscale TGA-images. I.e. they
need to be darker or lighter than their surroundings.
I don't know if this is already the case with your photos.

If not you can try to play around with different color
filtering techniques in a good (preferable scriptable)
image editing program. ("The Gimp" is scriptable IIRC.)

It is also necessary to establish a common reference grid
for the object slices in your images.

Another solution could be to get a MRI (or CT) scan of a
mouse and then convert the data into a df3 file for
rendering with POV-Ray.

-- 
Tor Olav
http://subcube.net
http://subcube.com


Post a reply to this message

From: Tor Olav Kristensen
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 17 Jul 2004 19:19:13
Message: <40f9b3f1$1@news.povray.org>
nomail@nomail wrote:
...
 > Another thing, I am looking for solid polygons and NOT for hollow

...

Meshes can be made solid in POV-Ray. See "Solid Mesh" (2.3.2.3.1)
in the documentation. It's on this page:

http://www.povray.org/documentation/view/3.6.0/58/

-- 
Tor Olav
http://subcube.net
http://subcube.com


Post a reply to this message

From: Chris B
Subject: Re: Newbie Question: a simple polygon in 3D
Date: 18 Jul 2004 19:10:56
Message: <40fb0380$1@news.povray.org>
<nomail@nomail> wrote in message
news:web.40f83f6530a9f2a0c523eabf0@news.povray.org...
> Tor Olav Kristensen <tor### [at] TOBEREMOVEDhotmailcom> wrote:
> > nomail@nomail wrote:
> >
> > If the number of sampled points from each slice contour
> > is equal, then you can write a little macro that produces
> > triangles that connects each pair of successive slices.
> >
> > (All the triangles can be merged into a mesh.)
> >
> > --
> > Tor Olav
> > http://subcube.net
> > http://subcube.com
>
> Thanks Tor for your response.
> I saw your web-site. The photos were great, but I am still newbie, and
your
> images are very complicated for me...
> Do you have a simple example??.
>
>
>

I think there are lots of ways of rebuilding your mouse.

A simple way of using your data to rebuild a slice would be to use the
points to draw a 2d spline and extrude it as a prism. You could then use
your photo as an image map on the slice to show the organs. You would need
to define 240 prisms to reconstruct your whole mouse.
I've used your data below in an example of two slices, applying an image to
the second. I've made the slices 5 units thick and spaced them 5 units
apart.

I'm not sure if this is quite what you're after, but I hope it might give
you some ideas:


camera {
  location <360, 240, -60>
  look_at <320, 224, 0>
}

light_source { <300, 400, -100>, rgb<1, 1, 1> }

prism {
  linear_sweep
  linear_spline
  0,         // height 1
  5,        // height 2
  84,       // number of points

<346, 224>,
<345, 224>,
<345, 227>,
<344, 227>,
<344, 229>,
<343, 229>,
<343, 231>,
<342, 231>,
<342, 232>,
<341, 232>,
<341, 233>,
<340, 233>,
<340, 234>,
<339, 234>,
<339, 235>,
<337, 235>,
<337, 236>,
<335, 236>,
<335, 237>,
<333, 237>,
<333, 238>,
<324, 238>,
<324, 237>,
<322, 237>,
<322, 236>,
<320, 236>,
<320, 235>,
<318, 235>,
<318, 234>,
<317, 234>,
<317, 233>,
<316, 233>,
<316, 232>,
<315, 232>,
<315, 231>,
<314, 231>,
<314, 229>,
<313, 229>,
<313, 227>,
<312, 227>,
<312, 224>,
<311, 224>,
<311, 215>,
<312, 215>,
<312, 212>,
<313, 212>,
<313, 210>,
<314, 210>,
<314, 208>,
<315, 208>,
<315, 207>,
<316, 207>,
<316, 206>,
<317, 206>,
<317, 205>,
<318, 205>,
<318, 204>,
<320, 204>,
<320, 203>,
<322, 203>,
<322, 202>,
<324, 202>,
<324, 201>,
<333, 201>,
<333, 202>,
<335, 202>,
<335, 203>,
<337, 203>,
<337, 204>,
<339, 204>,
<339, 205>,
<340, 205>,
<340, 206>,
<341, 206>,
<341, 207>,
<342, 207>,
<342, 208>,
<343, 208>,
<343, 210>,
<344, 210>,
<344, 212>,
<345, 212>,
<345, 215>,
<346, 215>
  pigment { rgb <1,1,0>}
  rotate -x*90
}


prism {
  linear_sweep
  linear_spline
  10,         // height 1
  15,         // height 2
  92,         // number of points
<346, 224>,
<345, 224>,
<345, 227>,
<344, 227>,
<344, 229>,
<343, 229>,
<343, 231>,
<342, 231>,
<342, 232>,
<341, 232>,
<341, 233>,
<340, 233>,
<340, 234>,
<339, 234>,
<339, 235>,
<338, 235>,
<338, 236>,
<337, 236>,
<337, 237>,
<335, 237>,
<335, 238>,
<332, 238>,
<332, 239>,
<324, 239>,
<324, 238>,
<321, 238>,
<321, 237>,
<319, 237>,
<319, 236>,
<318, 236>,
<318, 235>,
<317, 235>,
<317, 234>,
<316, 234>,
<316, 233>,
<315, 233>,
<315, 232>,
<314, 232>,
<314, 231>,
<313, 231>,
<313, 229>,
<312, 229>,
<312, 227>,
<311, 227>,
<311, 224>,
<310, 224>,
<310, 214>,
<311, 214>,
<311, 211>,
<312, 211>,
<312, 209>,
<313, 209>,
<313, 207>,
<314, 207>,
<314, 206>,
<315, 206>,
<315, 205>,
<316, 205>,
<316, 204>,
<317, 204>,
<317, 203>,
<318, 203>,
<318, 202>,
<319, 202>,
<319, 201>,
<321, 201>,
<321, 200>,
<324, 200>,
<324, 199>,
<332, 199>,
<332, 200>,
<335, 200>,
<335, 201>,
<337, 201>,
<337, 202>,
<338, 202>,
<338, 203>,
<339, 203>,
<339, 204>,
<340, 204>,
<340, 205>,
<341, 205>,
<341, 206>,
<342, 206>,
<342, 207>,
<343, 207>,
<343, 209>,
<344, 209>,
<344, 211>,
<345, 211>,
<345, 214>
<346, 214>

  texture {
    pigment {
      image_map {
        png "plasma3.png"
        map_type 0
        interpolate 2
      }
        scale 100
    }

  }

  rotate -x*90
}


Post a reply to this message

<<< Previous 3 Messages Goto Initial 10 Messages

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.