<CsoundSynthesizer>
<CsOptions>

-+Y ;*** no audio

</CsOptions>
<CsInstruments>

	sr = 100
	kr = 100
	ksmps = 1
	nchnls = 1

	GLfps	20,.5
	GLpanel	"OpenGL panel", 512, 512
	GLpanel_end
	FLrun

#include "OpenGL.h"

gi1	ftgen	1,0,256,19,1,1,0,1
gi2	ftgen	2,0,2048,10,1,0,0,0,.3,0,0,0,0,0,.1,0,0,0,0,0,0,0,.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.1
gi3	ftgen	3,0,1024,10,1

giCPoints	ftgen	10,0,256, -2,	-6.0, -6.0, 0.0,	\;***  u = 0	v = 0
			      	-6.0, -2.0, 0.0,	\;*** 		v = 1
				-6.0,  2.0, 0.0,	\;*** 		v = 2
				-6.0,  6.0, 0.0,	\;*** 		v = 3
				-2.0, -6.0, 0.0,	\;***  u = 1	v = 0
				-2.0, -2.0, 20.0,	\;*** 		v = 1
				-2.0,  2.0, 20.0,	\;*** 		v = 2
				-2.0,  6.0, 0.0,	\;*** 		v = 3
				 2.0, -6.0, 0.0,	\;***  u = 2	v = 0
				 2.0, -2.0, -20.0,	\;*** 		v = 1
				 2.0,  2.0, -20.0,	\;*** 		v = 2
				 2.0,  6.0, 0.0,	\;*** 		v = 3
			  	 6.0, -6.0, 0.0,	\;***  u = 3	v = 0
				 6.0, -2.0, 0.0,	\;*** 		v = 1
				 6.0,  2.0, 0.0,	\;*** 		v = 2
				 6.0,  6.0, 0.0 	 ;*** 		v = 3

giKnots	ftgen	11,0,64, -2,	0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0

	glEnable	$GL_DEPTH_TEST	
	glEnable	$GL_CULL_FACE	
	glEnable	$GL_LIGHTING
	glEnable	$GL_LIGHT0
	glEnable	$GL_COLOR_MATERIAL
	glEnable	$GL_AUTO_NORMAL

	glFrontFace $GL_CCW	
	glMaterial $GL_SPECULAR, .8,.8,0,1
	GLshininess 19
	glShadeModel $GL_FLAT
giNurbObj	gluNewNurbsRenderer
;	gluNurbsProperty	giNurbObj, $GLU_SAMPLING_TOLERANCE, 50.0
	gluNurbsProperty	giNurbObj, $GLU_DISPLAY_MODE, $GLU_FILL

	gluNurbsProperty	giNurbObj, $GLU_SAMPLING_METHOD, $GLU_DOMAIN_DISTANCE 
	gluNurbsProperty	giNurbObj, $GLU_U_STEP, 40
	gluNurbsProperty	giNurbObj, $GLU_V_STEP, 40

	glColor3	0,0,1
GLinsert_i $GL_INIT

	glMatrixMode	$GL_PROJECTION 
	glLoadIdentity
	gluPerspective	90,.1,100
	glMatrixMode	$GL_MODELVIEW 
	glLoadIdentity
	glClearColor	0,0,.2,1
	
GLinsert_i $GL_NOT_VALID
	glClear	$GL_COLOR_BUFFER_BIT + $GL_DEPTH_BUFFER_BIT 

GLinsert_i 1


;////////////////////////
	instr	1
;////////////////////////


k1	oscili	1,.05,1,.75
k2	oscili	1,.023456,1
k3	oscili	1,.043215,1

	glLoadIdentity
	glTranslate	0,0,-10
	glPushMatrix
	glRotate		k1*360,1,1,0
	glRotate		k2*360,1,0,0
	glutTorus	1,  2,  10,   20, 1

	gluBeginSurface	giNurbObj

    	gluNurbsSurface	giNurbObj,	\ ;**  NURBS renderer object
		     	8, giKnots,	\ ;**  No. of knots and knot array u direction	
			8, giKnots,	\ ;**  No. of knots and knot array v direction
			4 * 3,		\ ;**  Distance between control points in u dir.
			3,		\ ;**  Distance between control points in v dir.
			giCPoints, 	\ ;**  Control points
			4, 4,		\ ;**  u and v order of surface
			$GL_MAP2_VERTEX_3	  ;**  Type of surface

	gluEndSurface	giNurbObj		  ;**   Done with surface

	glPopMatrix

GLinsert	1.1

	endin



</CsInstruments>
<CsScore>

i1 .5 3600 1


</CsScore>
</CsoundSynthesizer>
