Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    SDK questions.

    Scheduled Pinned Locked Moved SDK Help
    9 Posts 0 Posters 682 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 08/08/2007 at 11:24, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   10 
      Platform:      Mac OSX  ; 
      Language(s) :     C++  ;

      ---------
      Hi,

      I'm developing my first C4D plugin so I'm probably going to be asking a lot of questions as I run into problems, so be for warned! ; )

      My first question is how do I find out which joint a specific point is effected by?

      My second question is how would I go about finding the normals of the points in a object?

      Thats all for now.

      Thanks.

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 08/08/2007 at 16:08, xxxxxxxx wrote:

        Don't forget to set "Show Topics" to All and then search when looking for possible solutions. 🙂

        No idea on the first question so I'll answer the second.

        Vertex normals are indirect quantities. They need to be calculated as the average vector of all of the polygons' normals to which the vertex (point) is attached:

        From Wikipedia, the free encyclopedia:

        In the geometry of computer graphics, a vertex normal at a vertex of a polyhedron is the normalized average of the surface normals of the faces that contain that vertex. The average can be weighted by the area of the face or it can be unweighted. Vertex normals are used in Gouraud shading, Phong shading and other lighting models.

        With that information at hand, any source that discusses Gouraud or Phong shading (most of the text sources listed in the SDK documentation) should give code to finding the vertex normals of a polygon object.

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 09/08/2007 at 00:12, xxxxxxxx wrote:

          Quote: _My first question is how do I find out which joint a specific point is effected by?
          >
          > * * *
          _


          Take a look at the CAWeightTag an dthe CAJointObject classes in the SDK docu.

          > Quote: _My second question is how would I go about finding the normals of the points in a object?
          >
          > * * *
          _


          Use the CreatePhongNormals() function of the PolygonObject class to create a normal for each point of a polygon. The function takes custom and angle based phong breaks into account. Much better than calculating your own normals.

          cheers,
          Matthias

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 09/08/2007 at 02:23, xxxxxxxx wrote:

            Quote: Originally posted by Matthias Bober on 09 August 2007
            >
            > * * *
            >
            > Use the CreatePhongNormals() function of the PolygonObject class to create a normal for each point of a polygon. The function takes custom and angle based phong breaks into account. Much better than calculating your own normals.
            >
            >
            > * * *

            Hi Matthias,

            What about speed of this routine? How fast is it compared to calculating one´s own normals without Phong Breaks etc.?

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 09/08/2007 at 08:23, xxxxxxxx wrote:

              @ kuroyume0161
              Thanks for that info. on Gouraud or Phong shading, although I know a little about normals I never knew how they calculate the Phong and Gouraud shading for an object.

              Yes I did look up normals in the SDK documentation and there seems to be a couple of ways of getting an objects normals. It might help to know that I'm making an exporter for C4D, or what the SDK calls a Filter, and that the program I'm trying to export to wants the normal of each point in an object, which is fine. But when I try to get an objects normals in C4D it gives me an array. This is what the SDK documentation says the array contains "The array contains 4*GetPolygonCount() vectors, one for each point of each face (including the unused fourth point of a triangle)". Now the last couple of times I've tried exporting I have been skipping the forth vector, maybe that's what's casing the problem? What I'd really like is a function that goes through each point and gets the normal for that point, but until I find that function or find what the problem is I'll just have to take the x,y, and z vector of a point and normalize it and use that as the normal, which seems to work fine, but I'd rather get the normals from C4D so that the model looks the same in both programs.

              @ Matthias Bober
              Yes, thanks a lot for that info. on CAWeightTag that was really helpful I can't believe I missed that. Thanks again.

              Thanks for the info. on normals Matthias that is the function I'm currently using. But like I told kuroyume0161 I'm having some problems with that function. Another problem I'm having with that function is that it gives me the normals for each point in a polygon which makes many duplicate normals for each point in an object, which I could work around but I was hoping I wouldn't have to.

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 09/08/2007 at 09:11, xxxxxxxx wrote:

                I wouldn't just normalize the x,y,z vertex coordinates. This is just the vector from the object's origin to that point which will result in incorrect vertex normals.

                For CreatePhongNormals(), you could pick out the values in the array returned. First, make sure that there is a Phong tag - since it is required. You can easily add one temporarily while doing the export:

                // Check for existing Phong tag  
                Bool phongAdded = FALSE;  
                if (!obj->GetTag(Tphong))  
                {  
                     if (obj->MakeTag(Tphong)) phongAdded = TRUE;  
                     else // whoops, couldn't add a Phong tag, so try the other method of calculating vertex normals  
                       
                }  
                // continue on with CreatePhongNormals()  
                ...  
                // after processing, remove added Phong tag  
                if (phongAdded) obj->KillTag(Tphong);
                

                You'll probably also want to remove n-gons as CreatePhongNormals() doesn't appear to consider them. Unfortunately, it gets complex so if you never expect n-gons you might assume standard polygons.

                Then you call CreatePhongNormals() to get your 4*polygoncount 'CPN' array. Create a vector 'VN' array the size of GetPointCount(). Now, you need to go through both the CPN array and the Polygon array simultaneously and fill in the VN array by vertex index. Unless you have another array to track which VN elements have already been set, you'll just fill in the same values multiple times. In the end, you'll have a single array with the vertex normals correlated to the point array. GeFree() the CPN array.

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 10/08/2007 at 03:18, xxxxxxxx wrote:

                  Quote: Originally posted by 3D Designer on 09 August 2007
                  >
                  > * * *
                  >
                  >
                  > Hi Matthias,
                  >
                  > What about speed of this routine? How fast is it compared to calculating one´s own normals without Phong Breaks etc.?
                  >
                  >
                  > * * *

                  Hi Samir,

                  I have no idea if it is faster compared to calculating your own normals. But it seems quite speedy to me. Also getting the normals right on your own can be quite tricky so it's no bad idea to use this function.

                  cheers,
                  Matthias

                  1 Reply Last reply Reply Quote 0
                  • H Offline
                    Helper
                    last edited by

                    THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                    On 10/08/2007 at 04:33, xxxxxxxx wrote:

                    thanks Matthias. I´ll do some performance tests then. 🙂

                    1 Reply Last reply Reply Quote 0
                    • H Offline
                      Helper
                      last edited by

                      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                      On 10/08/2007 at 06:25, xxxxxxxx wrote:

                      Thanks kuroyume0161 I'll see if I can get that to work. I use BaseDocument::Polygonize() so n-gons shouldn't be a problem.

                      When I said that I normalize the x, y, and z vertex coordinates I left out that I first subtract the point's vector with the object's center vector and then I normalize it.

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post