CloudFlare suffered a massive security issue affecting all of its customers, including Rosetta Code. All passwords not changed since February 19th 2017 have been expired, and session cookie longevity will be reduced until late March.--Michael Mol (talk) 05:15, 25 February 2017 (UTC)

OpenGL/Utah Teapot

From Rosetta Code
OpenGL/Utah Teapot is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

This is way to render classic Utah Teapot using OpenGL library.

See also: Utah Teapot wikipage.

Lisp[edit]

Library: GL
Library: GLU
 
; initial data:
(define vertices '(
( 0.2000 0.0000 2.70000 ) ( 0.2000 -0.1120 2.70000 )
( 0.1120 -0.2000 2.70000 ) ( 0.0000 -0.2000 2.70000 )
( 1.3375 0.0000 2.53125 ) ( 1.3375 -0.7490 2.53125 )
( 0.7490 -1.3375 2.53125 ) ( 0.0000 -1.3375 2.53125 )
( 1.4375 0.0000 2.53125 ) ( 1.4375 -0.8050 2.53125 )
( 0.8050 -1.4375 2.53125 ) ( 0.0000 -1.4375 2.53125 )
( 1.5000 0.0000 2.40000 ) ( 1.5000 -0.8400 2.40000 )
( 0.8400 -1.5000 2.40000 ) ( 0.0000 -1.5000 2.40000 )
( 1.7500 0.0000 1.87500 ) ( 1.7500 -0.9800 1.87500 )
( 0.9800 -1.7500 1.87500 ) ( 0.0000 -1.7500 1.87500 )
( 2.0000 0.0000 1.35000 ) ( 2.0000 -1.1200 1.35000 )
( 1.1200 -2.0000 1.35000 ) ( 0.0000 -2.0000 1.35000 )
( 2.0000 0.0000 0.90000 ) ( 2.0000 -1.1200 0.90000 )
( 1.1200 -2.0000 0.90000 ) ( 0.0000 -2.0000 0.90000 )
( -2.0000 0.0000 0.90000 ) ( 2.0000 0.0000 0.45000 )
( 2.0000 -1.1200 0.45000 ) ( 1.1200 -2.0000 0.45000 )
( 0.0000 -2.0000 0.45000 ) ( 1.5000 0.0000 0.22500 )
( 1.5000 -0.8400 0.22500 ) ( 0.8400 -1.5000 0.22500 )
( 0.0000 -1.5000 0.22500 ) ( 1.5000 0.0000 0.15000 )
( 1.5000 -0.8400 0.15000 ) ( 0.8400 -1.5000 0.15000 )
( 0.0000 -1.5000 0.15000 ) ( -1.6000 0.0000 2.02500 )
( -1.6000 -0.3000 2.02500 ) ( -1.5000 -0.3000 2.25000 )
( -1.5000 0.0000 2.25000 ) ( -2.3000 0.0000 2.02500 )
( -2.3000 -0.3000 2.02500 ) ( -2.5000 -0.3000 2.25000 )
( -2.5000 0.0000 2.25000 ) ( -2.7000 0.0000 2.02500 )
( -2.7000 -0.3000 2.02500 ) ( -3.0000 -0.3000 2.25000 )
( -3.0000 0.0000 2.25000 ) ( -2.7000 0.0000 1.80000 )
( -2.7000 -0.3000 1.80000 ) ( -3.0000 -0.3000 1.80000 )
( -3.0000 0.0000 1.80000 ) ( -2.7000 0.0000 1.57500 )
( -2.7000 -0.3000 1.57500 ) ( -3.0000 -0.3000 1.35000 )
( -3.0000 0.0000 1.35000 ) ( -2.5000 0.0000 1.12500 )
( -2.5000 -0.3000 1.12500 ) ( -2.6500 -0.3000 0.93750 )
( -2.6500 0.0000 0.93750 ) ( -2.0000 -0.3000 0.90000 )
( -1.9000 -0.3000 0.60000 ) ( -1.9000 0.0000 0.60000 )
( 1.7000 0.0000 1.42500 ) ( 1.7000 -0.6600 1.42500 )
( 1.7000 -0.6600 0.60000 ) ( 1.7000 0.0000 0.60000 )
( 2.6000 0.0000 1.42500 ) ( 2.6000 -0.6600 1.42500 )
( 3.1000 -0.6600 0.82500 ) ( 3.1000 0.0000 0.82500 )
( 2.3000 0.0000 2.10000 ) ( 2.3000 -0.2500 2.10000 )
( 2.4000 -0.2500 2.02500 ) ( 2.4000 0.0000 2.02500 )
( 2.7000 0.0000 2.40000 ) ( 2.7000 -0.2500 2.40000 )
( 3.3000 -0.2500 2.40000 ) ( 3.3000 0.0000 2.40000 )
( 2.8000 0.0000 2.47500 ) ( 2.8000 -0.2500 2.47500 )
( 3.5250 -0.2500 2.49375 ) ( 3.5250 0.0000 2.49375 )
( 2.9000 0.0000 2.47500 ) ( 2.9000 -0.1500 2.47500 )
( 3.4500 -0.1500 2.51250 ) ( 3.4500 0.0000 2.51250 )
( 2.8000 0.0000 2.40000 ) ( 2.8000 -0.1500 2.40000 )
( 3.2000 -0.1500 2.40000 ) ( 3.2000 0.0000 2.40000 )
( 0.0000 0.0000 3.15000 ) ( 0.8000 0.0000 3.15000 )
( 0.8000 -0.4500 3.15000 ) ( 0.4500 -0.8000 3.15000 )
( 0.0000 -0.8000 3.15000 ) ( 0.0000 0.0000 2.85000 )
( 1.4000 0.0000 2.40000 ) ( 1.4000 -0.7840 2.40000 )
( 0.7840 -1.4000 2.40000 ) ( 0.0000 -1.4000 2.40000 )
( 0.4000 0.0000 2.55000 ) ( 0.4000 -0.2240 2.55000 )
( 0.2240 -0.4000 2.55000 ) ( 0.0000 -0.4000 2.55000 )
( 1.3000 0.0000 2.55000 ) ( 1.3000 -0.7280 2.55000 )
( 0.7280 -1.3000 2.55000 ) ( 0.0000 -1.3000 2.55000 )
( 1.3000 0.0000 2.40000 ) ( 1.3000 -0.7280 2.40000 )
( 0.7280 -1.3000 2.40000 ) ( 0.0000 -1.3000 2.40000 )))
 
(define Rim: '(
( 102 103 104 105 4 5 6 7
8 9 10 11 12 13 14 15 )))
(define Body: '(
( 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 )
( 24 25 26 27 29 30 31 32
33 34 35 36 37 38 39 40 )))
(define Lid: '(
( 96 96 96 96 97 98 99 100
101 101 101 101 0 1 2 3 )
( 0 1 2 3 106 107 108 109
110 111 112 113 114 115 116 117 )))
(define Handle: '(
( 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 )
( 53 54 55 56 57 58 59 60
61 62 63 64 28 65 66 67 )))
(define Spout: '(
( 68 69 70 71 72 73 74 75
76 77 78 79 80 81 82 83 )
( 80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95 )))
 
; render pass:
(define knots '(0 0 0 0 1 1 1 1))
 
(let ((render (lambda (surface)
(gluBeginSurface teapot)
(gluNurbsSurface teapot 8 knots 8 knots (* 4 3) 3 (fold append '() (map (lambda (n) (nth vertices n)) surface)) 4 4 GL_MAP2_VERTEX_3)
(gluEndSurface teapot))))
(for-each render Rim:)
(for-each render Body:)
(for-each render Lid:)
(glScalef -1 1 1)
(for-each render Rim:)
(for-each render Body:)
(for-each render Lid:)
(glScalef -1 -1 1)
(for-each render Rim:)
(for-each render Body:)
(for-each render Lid:)
(glScalef -1 1 1)
(for-each render Rim:)
(for-each render Body:)
(for-each render Lid:)
 
(for-each render Handle:)
(for-each render Spout:)
(glScalef 1 -1 1)
(for-each render Handle:)
(for-each render Spout:))