Smooth Noise Overview
Blitz3D Forums/Blitz3D Beginners Area/Smooth Noise Overview
| ||
Graphics3D 1024,768,32,2 SetBuffer BackBuffer() Const oX=256 Const oY=384 Origin oX,oY Const W=512 Const H=256 Global min1=9999 Global max1=0-9999 Global min2=9999 Global max2=0-9999 ;______________________________________________________________________ While Not KeyHit(57) Cls Text -200,-180,"FIRST START WITH A BASIC SINE CURVE" Text -200,-160,"SINE IS GOOD BECAUSE SIN(0) = 0 AND AS WITH ALL TRIG FUNCTIONS IT IS CYCLIC AT 360 DEGREES" Local X Local Y Local Angle# Color 255,255,255 For X=0 To W Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.5 Plot X,Y Next Flip Wend ;______________________________________________________________________ Local Frequency# While Not KeyHit(57) Cls Text -200,-180,"WE CAN INCRESE / DECREASE THE FREQUENCY OF THE CURVE TO MAKE STEEPER GRADIENTS" For X=0 To W Angle#=(Float(X)/W)*360.0 Frequency=(Cos(MilliSecs()*0.1)+1) Angle=Angle*Frequency Y=Sin(Angle)*H*0.5 Plot X,Y Next Flip Wend ;______________________________________________________________________ While Not KeyHit(57) Cls Text -200,-180,"WE CAN INCRESE / DECREASE THE RADIUS TO TO CHANGE THE AMPLITUDE" For X=0 To W Angle#=(Float(X)/W)*360.0 Frequency=(Cos(MilliSecs()*0.1)) Angle=Angle Y=Sin(Angle)*H*Frequency*0.49 Plot X,Y Next Flip Wend ;______________________________________________________________________ Local Combine While Not KeyHit(57) Cls Color 255,255,255 Text -200,-180,"WE CAN COMBINE MULTIPLE WAVEFUNCTIONS TO PRODUCE ASYMMETRIC FORMS..." For X=0 To W Color 255,0,0 Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.49 Plot X,Y Combine=Y Color 0,64,192 Angle=Angle*4 Y=Sin(Angle)*H*0.49 Plot X,Y Combine=(Combine+Y)*0.5 Color 255,255,255 Plot X,Combine Next Flip Wend ;______________________________________________________________________ Local Offset While Not KeyHit(57) Cls Color 255,255,255 Text -200,-180,"...NOTE HOW THE CURVE IS STILL CYCLIC" For X=0 To W Color 255,0,0 Angle#=(Float(X)/W)*360.0 Y=Sin(Angle+(MilliSecs()*0.05))*H*0.49 Plot X,Y Combine=Y Color 0,64,192 Angle=Angle*4 Y=Sin(Angle+(MilliSecs()*0.05))*H*0.49 Plot X,Y Combine=(Combine+Y)*0.49 Color 255,255,255 Plot X,Combine Next Flip Wend ;______________________________________________________________________ While Not KeyHit(57) Cls For X=0 To W Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.49 Color 255-(Y+H*0.5),255-(Y+H*0.5),255-(Y+H*0.5) Plot X,Y+1 Next Color 255,255,255 Text -200,-300,"WE CAN CONSIDER THE PEAKS AND TROUGHS OF THE CURVES AS ACTUAL CONTOUR HEIGHTS" Text -200,-280,"SOMETIMES THESE ARE NORMALISED TO UNIT SIZES" Flip Wend ;______________________________________________________________________ Local YMap1 Local YMap2 Local YMap3 Local RMap1 Local RMap2 Local RMap3 Local GMap1 Local GMap2 Local GMap3 Local BMap1 Local BMap2 Local BMap3 While (Not(KeyHit(57))) Cls For X=0 To W Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.49 Combine=Y Angle=Angle*4 Y=Sin(Angle)*H*0.49 Combine=(Combine+Y)*0.49 RMap1=((255-(Y+H*0.5))/255)*96 GMap1=((255-(Y+H*0.5))/255)*32 BMap1=((255-(Y+H*0.5))/255)*128 Color RMap1,GMap1,BMap1 YMap1=Combine-200 Plot X,YMap1 Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.49 Combine=Y Angle=Angle*2.5 Y=Sin(360-Angle)*H*0.49 Combine=(Combine+Y)*0.49 RMap2=((255-(Y+H*0.5))/255)*192 GMap2=((255-(Y+H*0.5))/255)*64 BMap2=0 Color RMap2,GMap2,BMap2 YMap2=Combine+(H*0.25)-50 Plot X,YMap2 Angle#=(Float(X)/W)*360.0 Y=Sin(360-Angle)*H*0.49 Combine=Y Angle=Angle*6 Y=Sin(Angle)*H*0.15 Combine=(Combine+Y)*0.49 RMap3=((255-(Y+H*0.5))/255)*64 GMap3=((255-(Y+H*0.5))/255)*192 BMap3=((255-(Y+H*0.5))/255)*160 Color RMap3,GMap3,BMap3 YMap3=Combine+(H*0.15)+220 Plot X,YMap3 Next Color 255,255,255 Text -200,-300,"WE CAN USE A NUMBER OF CURVES ACROSS ANOTHER DIMENSION TO BEGIN THE TOPOGRAPHY OF A SURFACE" Flip Wend ;______________________________________________________________________ Local Height1 Local Height2 Local Height3 While (Not(KeyHit(57)) ) Cls For X=0 To W Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.49 Combine=Y Angle=Angle*4 Y=Sin(Angle)*H*0.49 Combine=(Combine+Y)*0.49 RMap1=((255-(Y+H*0.5))/255)*96 GMap1=((255-(Y+H*0.5))/255)*32 BMap1=((255-(Y+H*0.5))/255)*128 Height1=(255-(Y+H*0.5)) Color RMap1,GMap1,BMap1 YMap1=Combine-200 Plot X,YMap1 Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.49 Combine=Y Angle=Angle*2.5 Y=Sin(360-Angle)*H*0.49 Combine=(Combine+Y)*0.49 RMap2=((255-(Y+H*0.5))/255)*192 GMap2=((255-(Y+H*0.5))/255)*64 BMap2=0 Height2=(255-(Y+H*0.5)) Color RMap2,GMap2,BMap2 YMap2=Combine+(H*0.25)-50 Plot X,YMap2 Angle#=(Float(X)/W)*360.0 Y=Sin(360-Angle)*H*0.49 Combine=Y Angle=Angle*6 Y=Sin(Angle)*H*0.15 Combine=(Combine+Y)*0.49 RMap3=((255-(Y+H*0.5))/255)*64 GMap3=((255-(Y+H*0.5))/255)*192 BMap3=((255-(Y+H*0.5))/255)*160 Height3=(255-(Y+H*0.5)) Color RMap3,GMap3,BMap3 YMap3=Combine+(H*0.15)+220 Plot X,YMap3 If (Not(X Mod 16)) InterpBetween(X,YMap1,YMap2,RMap1,GMap1,BMap1,RMap2,GMap2,BMap2,Height1,Height2) InterpBetween(X,YMap2,YMap3,RMap2,GMap2,BMap2,RMap3,GMap3,BMap3,Height2,Height3) End If Next Color 255,255,255 Text -200,-300,"TO DEFINE THE SUFACE FORMALLY WE INTERPOLATE THE GRADIENT BETWEEN CONTOURS OF DIFFERENT CURVES AT RELATIVE POINTS" Flip Wend ;______________________________________________________________________ While Not KeyHit(57) Cls Text -200,-180,"FURTHERMORE REGARDING THE INTERPOLATION..." Text -200,-160,"REMEMBER HOW WE REMARKED ON THE SINE CURVE THAT SIN(0) IS ZERO?" For X=0 To W Angle#=(Float(X)/W)*360.0 Y=Sin(Angle)*H*0.45 Plot X,Y Next Flip Wend ;______________________________________________________________________ While Not KeyHit(57) Cls Color 255,255,255 Text -200,-180,"THE COSINE STARTS AT A MAXIMUM UNITY. IT IS EQUIVALENT TO SIN(THETA-90)" For X=0 To W Angle#=(Float(X)/W)*360.0 Y=0-Cos(Angle*2)*H*0.45 Color 255,255,255 Plot X,Y Y=0-Sin((Angle*2)+(Sin(MilliSecs()*0.05)*90))*H*0.45 Color 128,128,128 Plot X,Y Next Flip Wend ;______________________________________________________________________ While Not KeyHit(57) Cls Color 255,255,255 Text -200,-180,"THIS MAKES I EXTREMELY CONVENIENT IN PROVIDING A SMOOTHER GRADIENT FOR INTERPOLATION" For X=0 To W Angle#=(Float(X)/W)*360.0 Y=0-Cos(Angle*0.5)*H*0.45 Color 255,255,255 Plot X,Y Color 128,128,128 Line 0,-H*0.5,W,H*0.5 Next Flip Wend ;______________________________________________________________________ Function InterpBetween(X,Y1,Y2,R1#,G1#,B1#,R2#,G2#,B2#,H1,H2) Local Y Local Dist#=Float(Y2-Y1) Local GradR#=Float(R2-R1)/Dist Local GradG#=Float(G2-G1)/Dist Local GradB#=Float(B2-B1)/Dist Local GradH#=Float(H2-H1)/Dist For Y=Y1 To Y2 Color R1,G1,B1 Plot X,Y R1=R1+Float(GradR#) G1=G1+Float(GradG#) B1=B1+Float(GradB#) H1=H1+Float(GradH#) Next End Function |