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
    • Recent
    • Tags
    • Users
    • Login

    Gradient

    Scheduled Pinned Locked Moved SDK Help
    14 Posts 0 Posters 1.2k 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 21/11/2009 at 10:55, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   11 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      I was wondering how I would get the gradient that is stored in a Description Element Gradient and set the gradient in a shader to that gradient that the user created with the description element.

      Currently I set the gradient in the shader myself with this code.

        
           AutoAlloc<Gradient> colorGradient;   
           if (!colorGradient) return FALSE;   
        
        
                // set up color gradient   
                GradientKnot k1,k2;   
                k1.col =Vector(0.29,0.67,0.98);   
                k1.pos =0.0;   
        
                k2.col =Vector(0.0,0.0,0.0);   
                k2.pos =1.0;   
              
        
                colorGradient->InsertKnot(k1);   
                colorGradient->InsertKnot(k2);   
        
      

      I would like to set k1 and k2 to the colors that are found in the description element. Better yet, I would like to copy all of the gradient info from the gradient description element to the shader gradient without having to specify the # of knots ..

      Can someone please explain how I would do this?

      Thanks,

      ~Shawn

      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 21/11/2009 at 14:14, xxxxxxxx wrote:

        You just cast the gradient from your description to a Gradient:
        gdata.gradient      = (Gradient* )dat->GetCustomDataType(YOURSHADER_GRADIENTRES, CUSTOMDATATYPE_GRADIENT);

        Hope it helps

        Kabe

        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 21/11/2009 at 14:23, xxxxxxxx wrote:

          Thanks Kabe,

          I tried that. but because my gradient is declared as:
          AutoAlloc<Gradient> colorGradient;

          it tells me it can't convert from AutoAlloc<Gradient> to Gradient. 🙂

          ~Shawn

          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 21/11/2009 at 15:00, xxxxxxxx wrote:

            My gdata.gradient is just a Gradient pointer... I'm just taking the object, not creating a copy.

            Kabe

            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 21/11/2009 at 15:32, xxxxxxxx wrote:

              Gradient* test;
              test = (Gradient* )data->GetCustomDataType(ATMOSPHERIC_COLOR, CUSTOMDATATYPE_GRADIENT);

              I use the above code and get the following errors.

              1>c:\users he fosters\desktop\cinema4dr11010\plugins\#planet\source\object\planet.cpp(606) : error C2665: 'GeData::GeData' : none of the 18 overloads could convert all the argument types
              1>        c:\users he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(119) : could be 'GeData::GeData(void *,VOIDVALUETYPE)'
              1>        c:\users he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(125) : or       'GeData::GeData(LLONG,LLONGVALUETYPE)'
              1>        c:\users he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(189) : or       'GeData::GeData(LONG,const CustomDataType &)'
              1>        c:\users he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(196) : or       'GeData::GeData(LONG,DEFAULTVALUETYPE)'
              1>        while trying to match the argument list '(int, Gradient * )'

              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 21/11/2009 at 19:34, xxxxxxxx wrote:

                Still can't figure this one out. Any help would be greatly appreciated.

                Thanks,

                ~Shawn

                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 22/11/2009 at 05:31, xxxxxxxx wrote:

                  Your base container should be created something along this:
                  BaseContainer *data = sh->GetDataInstance();

                  Check that ATMOSPHERIC_COLOR is defined properly in yourplugin.h, and have a look at the SDK examples, at least one of them loads a gradient.

                  Hope it helps

                  Kabe

                  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 23/11/2009 at 09:17, xxxxxxxx wrote:

                    I am able to load the gradient into the shader with no problem. The problem I am running in to is that I am not sure how to load a gradient from an existing description element gradient in the attributes manager. I would like the user to be able to create a gradient using the description element and have that gradient loaded in to the shader.

                    ATMOSPHERIC_COLOR is a GRADIENT decription element and is setup correctly in the .res, .h, and .str files.

                    Thanks,

                    ~Shawn

                    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 23/11/2009 at 11:57, xxxxxxxx wrote:

                      Shawn, please have a look into the gradientshader.cpp of the cinema4dsdk. It's all in there!

                      Note especially gdata, which is set up as a public class variable, initialized in Init() to avoid non-initialized data, and then reading the user data from the description during InitRender(). This is general good practice for storing user parameters, Cinema takes care of parameter persistence.

                      Hope it helps

                      Kabe

                      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 23/11/2009 at 15:33, xxxxxxxx wrote:

                        Hi Kabe,

                        I have looked at the gradientshader.cpp..   I see how they get the user data from the description element. But when I try to to that, I get errors. Because my gradient is defined as :

                          
                                  AutoAlloc<Gradient> colorGradient;   
                                  if (!colorGradient) return FALSE;   
                        

                        Therefore, I can't assign it the value :

                          
                        colorGradient = (Gradient* )data->GetCustomDataType(ATMOSPHERIC_COLOR,CUSTOMDATATYPE_GRADIENT);   
                        

                        When I try to change the declaration to :

                          
                             Gradient* colorGradient;   
                                  if (!colorGradient) return FALSE;   
                        

                        I can no longer pass the gradient to the shader with :

                          
                        fresnelColor->SetParameter(SLA_FRESNEL_GRADIENT,GeData(CUSTOMDATATYPE_GRADIENT, colorGradient), 0);   
                        

                        I get the following errors:

                          
                        1>planet.cpp   
                        1>c:\users	he fosters\desktop\cinema4dr11010\plugins\#planet\source\object\planet.cpp(641) : error C2665: 'GeData::GeData' : none of the 18 overloads could convert all the argument types   
                        1>        c:\users	he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(119) : could be 'GeData::GeData(void *,VOIDVALUETYPE)'   
                        1>        c:\users	he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(125) : or       'GeData::GeData(LLONG,LLONGVALUETYPE)'   
                        1>        c:\users	he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(189) : or       'GeData::GeData(LONG,const CustomDataType &)'   
                        1>        c:\users	he fosters\desktop\cinema4dr11010\resource\_api\c4d_gedata.h(196) : or       'GeData::GeData(LONG,DEFAULTVALUETYPE)'   
                        1>        while trying to match the argument list '(int, Gradient * )'   
                          
                        

                        I really appreciate you helping me out. Do you know why these errors are occurring?

                        Thanks,

                        ~Shawn

                        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 24/11/2009 at 09:19, xxxxxxxx wrote:

                          Can anyone help me with this?

                          ~Shawn

                          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 26/11/2009 at 13:55, xxxxxxxx wrote:

                            Any thoughts? 🙂 Why would AutoAlloc<Gradient> colorGradient; allow me to pass the gradient to the shader but Gradient* colorGradient does not?

                            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 27/11/2009 at 06:38, xxxxxxxx wrote:

                              Instead of:

                                
                              fresnelColor->SetParameter(SLA_FRESNEL_GRADIENT,GeData(CUSTOMDATATYPE_GRADIENT, colorGradient), 0);  
                              

                              use:

                                
                              fresnelColor->SetParameter(SLA_FRESNEL_GRADIENT,GeData(CUSTOMDATATYPE_GRADIENT, *colorGradient), 0);  
                              

                              or:

                                
                              fresnelColor->SetData(SLA_FRESNEL_GRADIENT,GeData(CUSTOMDATATYPE_GRADIENT, *colorGradient));  
                              

                              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 27/11/2009 at 15:32, xxxxxxxx wrote:

                                Perfect.. That worked wonderfully. Thanks Matthias.

                                ~Shawn

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