TTeapot


Croquet-Teapot

Comment:

Standard Utah teapot. Used primarily for testing.

Hierarchy:

ProtoObject
Object
TObject
TFrame
TPrimitive
TTeapot

Summary:

instance variables:

gridSize patches scale type

Pool:

OpenGLConstants

methods:

instance class
accessing initialize render no messages

Detail:

instance variables:

gridSize
patches
scale
type

instance methods:

accessing
gridSize


	^ gridSize.
gridSize: gs


	gridSize _ gs.
scale


	^ scale.
scale: sc


	scale _ sc.
	self boundsChanged.
type


	^ type.
type: tp


	type _ tp.

initialize
initialize

	| glp v |

	super initialize.
	patches _ OrderedCollection new.
	v_ self vertexData.
	gridSize _ 10.
	scale _ 0.5.
	type _ GLFill.
	(self patchData) doWithIndex: [:pdata :index| 
		glp _ TPatch new. 
		glp patch: pdata vertex: v.
		patches add: glp.
		patches add: glp mirrorY.
		index <= 6 ifTrue:[
		patches add: glp mirrorX.
		patches add: glp mirrorX mirrorY.]].

	^ self.
		
patchData

| p |
p _ OrderedCollection new.

p
" rim"
	add: #(102 103 104 105 4 5 6 7 8 9 10 11 12 13 14 15) asIntegerArray;  
" body "
 	add: #(12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27) asIntegerArray;
  	add: #(24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40) asIntegerArray; 
" lid "
  	add: #(96 96 96 96 97 98 99 100 101 101 101 101 0 1 2 3) asIntegerArray;
	add: #(0 1 2 3 106 107 108 109 110 111 112 113 114 115 116 117) asIntegerArray;  
" bottom "
	add: #(118 118 118 118 124 122 119 121 123 126 125 120 40 39 38 37) asIntegerArray; 
" handle "
	add: #(41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56) asIntegerArray;
  	add: #(53 54 55 56 57 58 59 60 61 62 63 64 28 65 66 67) asIntegerArray; 
" spout "
  	add: #(68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83) asIntegerArray;
  	add: #(80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95) asIntegerArray.
^p.
vertexData


^#(0.2 0.0 2.7		
0.2 -0.112  2.7		
0.112  -0.2  2.7		
0.0 -0.2  2.7
1.3375  0  2.53125	
1.3375  -0.749  2.53125
0.749  -1.3375  2.53125
0  -1.3375  2.53125
1.4375 0  2.53125
1.4375  -0.805  2.53125
0.805  -1.4375 2.53125
0  -1.4375  2.53125
1.5  0  2.4
1.5   -0.84 2.4
0.84  -1.5  2.4
0  -1.5  2.4
1.75  0  1.875
1.75  -0.98  1.875
0.98  -1.75  1.875
0  -1.75  1.875
2  0  1.35
2  -1.12  1.35
1.12  -2  1.35
0  -2  1.35
2  0  0.9
2  -1.12  0.9
1.12  -2  0.9 
0  -2  0.9
-2  0  0.9
2  0  0.45
2  -1.12   0.45
1.12  -2  0.45
0  -2  0.45
1.5  0  0.225
1.5  -0.84  0.225
0.84  -1.5  0.225
0  -1.5  0.225
1.5  0  0.15
1.5  -0.84  0.15
0.84  -1.5  0.15
0  -1.5  0.15
-1.6  0  2.025
-1.6  -0.3  2.025
-1.5   -0.3  2.25
-1.5  0  2.25
-2.3  0  2.025
-2.3  -0.3   2.025
-2.5  -0.3  2.25
-2.5  0  2.25
-2.7  0  2.025
-2.7  -0.3  2.025
-3  -0.3  2.25
-3   0   2.25
-2.7  0  1.8
-2.7  -0.3  1.8
-3  -0.3  1.8
-3  0  1.8
-2.7  0  1.575
-2.7   -0.3  1.575
-3  -0.3  1.35
-3  0  1.35
-2.5  0  1.125
-2.5  -0.3  1.125
-2.65  -0.3  0.9375
-2.65  0  0.9375
-2  -0.3  0.9
-1.9  -0.3  0.6
-1.9  0  0.6
1.7  0   1.425
1.7  -0.66  1.425
1.7  -0.66  0.6
1.7  0  0.6
2.6  0  1.425
2.6  -0.66  1.425
3.1  -0.66   0.825
3.1  0  0.825
2.3  0  2.1
2.3  -0.25  2.1
2.4  -0.25  2.025
2.4  0  2.025
2.7  0  2.4
2.7   -0.25  2.4
3.3  -0.25  2.4
3.3   0  2.4
2.8  0   2.475
2.8  -0.25  2.475
3.525  -0.25  2.49375
3.525  0  2.49375
2.9  0   2.475
2.9  -0.15  2.475
3.45  -0.15  2.5125
3.45  0  2.5125
2.8  0  2.4
2.8  -0.15  2.4
3.2  -0.15  2.4
3.2  0  2.4
0  0  3.15
0.8  0  3.15
0.8  -0.45  3.15
0.45  -0.8   3.15
0  -0.8  3.15
0  0  2.85
1.4  0  2.4
1.4    -0.784  2.4
0.784  -1.4  2.4
0   -1.4  2.4
0.4  0  2.55
0.4  -0.224  2.55
0.224  -0.4  2.55
0  -0.4  2.55
1.3  0  2.55
1.3   -0.728  2.55
0.728  -1.3   2.55
0  -1.3  2.55
1.3  0   2.4
1.3  -0.728  2.4
0.728  -1.3  2.4
0  -1.3  2.4
0  0  0
1.425  -0.798  0
1.5  0  0.075
1.425   0  0
0.798  -1.425    0
0  -1.5  0.075
0   -1.425  0
1.5  -0.84  0.075
0.84  -1.5  0.075) asFloatArray.

render
glTeapot: renderer gridSize: grid
 

self glTeapot: renderer gridSize: grid scale: 0.5 type: GLFill.
glTeapot: renderer gridSize: grid scale: sc type: tp

	| tex |

	renderer glPushMatrix.

	renderer 
		glRotatef: 270.0 
		with: 1.0
		with: 0.0
		with: 0.0.

	renderer
		glScalef: sc  * 0.28
		with: sc * 0.28
		with: sc * 0.28.

	renderer
		glTranslatef: 0 
				with: 0 
				with:  -1.5. 
	tex _ #(0 0 1 0 0 1 1 1) asFloatArray.

" construction settings. "
	renderer
		glPushAttrib: (GLEnableBit bitOr: GLEvalBit).
	renderer glEnable: GLAutoNormal.
	renderer glEnable: GLNormalize.
	renderer glEnable: GLMap2Vertex3.
 	renderer glEnable: GLMap2TextureCoord2.

	patches
		do: [:p | 
   			renderer glMap2f: GLMap2TextureCoord2 
				with: 0 with: 1 with: 2 with: 2 with: 0 with: 1 with: 4 with: 2 with: tex.
			renderer
				glMap2f: GLMap2Vertex3
				with: 0
				with: 1
				with: 3
				with: 4
				with: 0
				with: 1
				with: 12
				with: 4
				with: p.
			renderer
				glMapGrid2f: grid
				with: 0.0
				with: 1.0
				with: grid
				with: 0.0
				with: 1.0.
			renderer
				glEvalMesh2: tp
				with: 0
				with: grid
				with: 0
				with: grid].
	renderer glPopMatrix.
	renderer glPopAttrib.
initBounds

	| v v3 minCorner maxCorner center dimension radiusSquared testRad |
	v _ self vertexData.
	minCorner _ B3DVector3
				x: Float infinity
				y: Float infinity
				z: Float infinity.
	maxCorner _ B3DVector3
				x: Float infinity negated
				y: Float infinity negated
				z: Float infinity negated.
	dimension _ 1.
	v do: [:vertex | 
			dimension = 1
				ifTrue: [vertex < minCorner x
						ifTrue: [minCorner x: vertex].
					vertex > maxCorner x
						ifTrue: [maxCorner x: vertex].].
			dimension = 2
				ifTrue: [vertex < minCorner y
						ifTrue: [minCorner y: vertex].
					vertex > maxCorner y
						ifTrue: [maxCorner y: vertex].].
			dimension = 3
				ifTrue: [vertex < minCorner z
						ifTrue: [minCorner z: vertex].
					vertex > maxCorner z
						ifTrue: [maxCorner z: vertex].].
			dimension _ dimension+1.
			dimension = 4 ifTrue:[dimension _ 1].].
	dimension = 1.
	v3 _B3DVector3 new.
	center _ (maxCorner + minCorner)/2.0.
	radiusSquared _ 0.
	
	v do: [:vertex |
		dimension = 1 ifTrue:[v3 x: vertex.].
		dimension = 2 ifTrue:[v3 y: vertex.].
		dimension = 3 ifTrue:[v3 z: vertex.
				testRad _ (v3-center)squaredLength.
				radiusSquared < testRad ifTrue:[radiusSquared_testRad].].
		dimension _ dimension+1.
		dimension = 4 ifTrue:[dimension _ 1].].
		
	boundSphere _ TBoundSphere localPosition: B3DVector3 new
			radius: scale * 0.6 * 0.28 * (radiusSquared sqrt).
	boundSphere frame: self.
pick: pointer


	^ pointer pickSphere: self boundSphere localPosition 
		radiusSquared: self boundSphere radiusSquared.
renderPrimitive: ogl

	| tex  |

	ogl glPushMatrix.

	ogl 
		glRotatef: 270.0 
		with: 1.0
		with: 0.0
		with: 0.0.

	ogl
		glScalef: scale  * 0.28
		with: scale * 0.28
		with: scale * 0.28.

	ogl
		glTranslatef: 0 
				with: 0 
				with:  -1.5. 
	tex _ #(0 0 1 0 0 1 1 1) asFloatArray.
	
	
" construction settings. "
	ogl
		glPushAttrib: (GLEnableBit bitOr: GLEvalBit).
	ogl glEnable: GLAutoNormal.
	ogl glEnable: GLNormalize.
	ogl glEnable: GLMap2Vertex3.
 	ogl glEnable: GLMap2TextureCoord2.

	patches
		do: [:p | 
   			ogl glMap2f: GLMap2TextureCoord2 
				with: 0 with: 1 with: 2 with: 2 with: 0 with: 1 with: 4 with: 2 with: tex.
			ogl
				glMap2f: GLMap2Vertex3
				with: 1
				with: 0
				with: 3
				with: 4
				with: 0
				with: 1
				with: 12
				with: 4
				with: p.
			ogl
				glMapGrid2f: gridSize
				with: 0.0
				with: 1.0
				with: gridSize
				with: 0.0
				with: 1.0.
			ogl
				glEvalMesh2: type
				with: 0
				with: gridSize
				with: 0
				with: gridSize].
	ogl glPopMatrix.
	ogl glPopAttrib.

class methods:

^top


- made by Dandelion -