1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
define.class(function(require, shape3d){
var GLGeom = require('$system/geometry/basicgeometry')
this.attributes = {
radius: Config({type:float, value:1}),
pointradius: Config({type:float, value:0}),
height: Config({type:float, value:1}),
detail: Config({type:float, value:60}),
cap: true
}
this.shape3d = {
update:function(){
var view = this.view
var D = view.height;
var R = view.radius
var gamma = Math.asin(R/D);
var beta = R / Math.tan(gamma);
var alpha = beta * Math.sin(gamma);
var conet = beta * Math.cos(gamma);
coneoffs = D - conet;
this.mesh = this.vertexstruct.array();
GLGeom.createCone(alpha,view.pointradius, view.height, view.detail,view.cap, function(triidx,v1,v2,v3,n1,n2,n3,t1,t2,t3,faceidx){
this.mesh.push(v1[0],v1[1]+coneoffs,v1[2],n1,t1,0,0,0,0);
this.mesh.push(v2[0],v2[1]+coneoffs,v2[2],n2,t2,0,0,0,0);
this.mesh.push(v3[0],v3[1]+coneoffs,v3[2],n3,t3,0,0,0,0);
}.bind(this))
GLGeom.createSphere(view.radius*1, view.detail, view.detail,function(triidx,v1,v2,v3,n1,n2,n3,t1,t2,t3,faceidx){
this.mesh.push(v1,n1,t1,0,0,0,0);
this.mesh.push(v2,n2,t2,0,0,0,0);
this.mesh.push(v3,n3,t3,0,0,0,0);
}.bind(this))
}
}
})
|