Rendering Noise Preview

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

On 06/05/2011 at 06:04, xxxxxxxx wrote:

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

---------
Hey everyone. 
 
I am mostly posting this to verify that my understanding is correct.   I am using noise functions namely C4DNoise::Noise() to deform geometry.  I would like to display the noise that is created in a Bitmap as a preview for the user to see the noise.  The Noise() function uses the different noise presets that are available in C4D...  So here how I understand it.. 
 
I will need to iterate through the pixels of the bitmap and set their value to the current noise value within the loop.   Does this sound right? 
 
Is there an example in the SDK of this anywhere?
 
Thanks,
 
Shawn

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

On 06/05/2011 at 06:11, xxxxxxxx wrote:

Yep, I think that's right.
You can draw Pixels into a GeUserArea to present your bitmap.
As I don't code in Cpp, I will post pseudocode.

  
//Pseudocode, don't copy   
uarea = MyUserArea(mydlg);   
mynoise = C4DNoise.GetNoiseArray(); //should be a 2D array   
  
for (int i = 0; i < sizeof(mynoise); i++){   
    for (int j = 0; j < sizeof(mynoise[i]); j++) {   
        uarea.SetPen(integer(mynoise[i][j]*255));   
        uarea.DrawXY(i,j);   
    }   
}   
uarea.Update()   

Cheers, Niklas

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

On 06/05/2011 at 07:07, xxxxxxxx wrote:

So in your pseudo code you say GetNoiseArray() which I know is pseudo code lol or coffee which I don't know the SDK very well  ...   HAHA  but would the equivalent be GetValueTable() which is private in the C++ SDK?  or are you just referring to an array filled with each noise value.  🙂 
 
~Shawn

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

On 06/05/2011 at 08:39, xxxxxxxx wrote:

Yes, I'm referring to an array holding all values you want to represent in your Userarea.

A function to obtain the array could look like this.
Since I do not know much about the C++ Syntax, this code won't work at all. 😉

  
float GetNoiseArray(C4DNoise *noise, int width, int height) {  
  float arr[width,height];  
  for (int i = 0; i < width; i++) {  
      for (int j = 0; j < height; j++) {  
          Vector _2dVector = new Vector(i,j,0);  
          arr[i,j] = noise.SNoise(vector);  
      }  
  }  
  return arr;  
}  

Cheers, Niklas

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

On 06/05/2011 at 08:41, xxxxxxxx wrote:

Awesome.  Thanks again Niklas!

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

On 06/05/2011 at 11:24, xxxxxxxx wrote:

You're welcome. 🙂
By the way:
You could also do this within one loop instead of seperating it by functions.

float PaintNoiseToArea(GeUserArea *uarea, C4DNoise *noise, int width, int height) {   
    for (int i = 0; i < width; i++) {   
        for (int j = 0; j < height; j++) {   
            Vector _2dVector = new Vector(i,j,0);   
            float value = noise.SNoise(vector);   
            uarea.SetPen(integer(value*255));   
            uarea.Draw(i,j);   
        }   
    }   
    return TRUE;   
}