提交 2cb466af 编写于 作者: B Ben Houston

Merge branch 'dev' of git@github.com:mrdoob/three.js into output_encoding

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<base href="../../../" />
<script src="list.js"></script>
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
[page:BufferGeometry] &rarr;
<h1>[name]</h1>
<div class="desc">This is the [page:BufferGeometry] port of [page:BoxGeometry].</div>
<iframe src='scenes/geometry-browser.html#BoxBufferGeometry'></iframe>
<h2>Example</h2>
<code>var geometry = new THREE.BoxBufferGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( {color: 0x00ff00} );
var cube = new THREE.Mesh( geometry, material );
scene.add( cube );
</code>
<h2>Constructor</h2>
<h3>[name]([page:Float width], [page:Float height], [page:Float depth], [page:Integer widthSegments], [page:Integer heightSegments], [page:Integer depthSegments])</h3>
<div>
width — Width of the sides on the X axis.<br />
height — Height of the sides on the Y axis.<br />
depth — Depth of the sides on the Z axis.<br />
widthSegments — Optional. Number of segmented faces along the width of the sides. Default is 1.<br />
heightSegments — Optional. Number of segmented faces along the height of the sides. Default is 1.<br />
depthSegments — Optional. Number of segmented faces along the depth of the sides. Default is 1.
</div>
<h2>Properties</h2>
<h3>.parameters</h3>
<div>
<p>Using the above example code above as our basis:</p>
<code>
geometry.parameters; // outputs an object {width: 1, height: 1, depth: 1, widthSegments: undefined, heightSegments: undefined}
cube.geometry.parameters; // as above
cube.geometry.parameters.width; // === 1
cube.geometry.parameters.widthSegments // === undefined.
</code>
</div>
<h2>Source</h2>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<base href="../../../" />
<script src="list.js"></script>
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
[page:BufferGeometry] &rarr;
<h1>[name]</h1>
<div class="desc">This is the [page:BufferGeometry] port of [page:CircleGeometry].</div>
<h2>Example</h2>
<iframe src='scenes/geometry-browser.html#CircleBufferGeometry'></iframe>
<code>
var geometry = new THREE.CircleBufferGeometry( 5, 32 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var circle = new THREE.Mesh( geometry, material );
scene.add( circle );
</code>
<h2>Constructor</h2>
<h3>[name]([page:Float radius], [page:Integer segments], [page:Float thetaStart], [page:Float thetaLength])</h3>
<div>
radius — Radius of the circle, default = 50.<br />
segments — Number of segments (triangles), minimum = 3, default = 8.<br />
thetaStart — Start angle for first segment, default = 0 (three o'clock position).<br />
thetaLength — The central angle, often called theta, of the circular sector. The default is 2*Pi, which makes for a complete circle.
</div>
<h2>Source</h2>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
</body>
</html>
......@@ -19,15 +19,10 @@
<iframe src='scenes/geometry-browser.html#CircleGeometry'></iframe>
<code>var material = new THREE.MeshBasicMaterial({
color: 0x0000ff
});
var radius = 5;
var segments = 32;
var circleGeometry = new THREE.CircleGeometry( radius, segments );
var circle = new THREE.Mesh( circleGeometry, material );
<code>
var geometry = new THREE.CircleGeometry( 5, 32 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var circle = new THREE.Mesh( geometry, material );
scene.add( circle );
</code>
......
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<base href="../../../" />
<script src="list.js"></script>
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
[page:BufferGeometry] &rarr;
<h1>[name]</h1>
<div class="desc">This is the [page:BufferGeometry] port of [page:PlaneGeometry].</div>
<h2>Example</h2>
<iframe src='scenes/geometry-browser.html#PlaneBufferGeometry'></iframe>
<code>var geometry = new THREE.PlaneBufferGeometry( 5, 20, 32 );
var material = new THREE.MeshBasicMaterial( {color: 0xffff00, side: THREE.DoubleSide} );
var plane = new THREE.Mesh( geometry, material );
scene.add( plane );
</code>
<h2>Constructor</h2>
<h3>[name]([page:Float width], [page:Float height], [page:Integer widthSegments], [page:Integer heightSegments])</h3>
<div>
width — Width along the X axis.<br />
height — Height along the Y axis.<br />
widthSegments — Optional. Default is 1. <br />
heightSegments — Optional. Default is 1.
</div>
<h2>Properties</h2>
<div>
Each of the contructor parameters is accessible as a property of the same name. Any modification of these properties after instantiation does not change the geometry.
</div>
<h2>Source</h2>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<base href="../../../" />
<script src="list.js"></script>
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
[page:BufferGeometry] &rarr;
<h1>[name]</h1>
<div class="desc">This is the [page:BufferGeometry] port of [page:SphereGeometry].</div>
<h2>Example</h2>
<iframe src='scenes/geometry-browser.html#SphereBufferGeometry'></iframe>
<code>var geometry = new THREE.SphereBufferGeometry( 5, 32, 32 );
var material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
var sphere = new THREE.Mesh( geometry, material );
scene.add( sphere );
</code>
<h2>Constructor</h2>
<h3>[name]([page:Float radius], [page:Integer widthSegments], [page:Integer heightSegments], [page:Float phiStart], [page:Float phiLength], [page:Float thetaStart], [page:Float thetaLength])</h3>
<div>
radius — sphere radius. Default is 50.<br />
widthSegments — number of horizontal segments. Minimum value is 3, and the default is 8.<br />
heightSegments — number of vertical segments. Minimum value is 2, and the default is 6.<br />
phiStart — specify horizontal starting angle. Default is 0.<br />
phiLength — specify horizontal sweep angle size. Default is Math.PI * 2.<br />
thetaStart — specify vertical starting angle. Default is 0.<br />
thetaLength — specify vertical sweep angle size. Default is Math.PI.<br />
</div>
<div>
The geometry is created by sweeping and calculating vertexes around the Y axis (horizontal sweep) and the Z axis (vertical sweep). Thus, incomplete spheres (akin to <em>'sphere slices'</em>) can be created through the use of different values of phiStart, phiLength, thetaStart and thetaLength, in order to define the points in which we start (or end) calculating those vertices.
</div>
<h2>Properties</h2>
<div>
Each of the contructor parameters is accessible as a property of the same name. Any modification of these properties after instantiation does not change the geometry.
</div>
<h2>Source</h2>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<base href="../../../" />
<script src="list.js"></script>
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
[page:BufferGeometry] &rarr;
<h1>[name]</h1>
<div class="desc">This is the [page:BufferGeometry] port of [page:TorusGeometry].</div>
<iframe src='scenes/geometry-browser.html#TorusBufferGeometry'></iframe>
<h2>Example</h2>
<code>var geometry = new THREE.TorusBufferGeometry( 10, 3, 16, 100 );
var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
var torus = new THREE.Mesh( geometry, material );
scene.add( torus );
</code>
<h2>Constructor</h2>
<h3>[name]([page:Float radius], [page:Float tube], [page:Integer radialSegments], [page:Integer tubularSegments], [page:Float arc])</h3>
<div>
radius — Default is 100. <br />
tube — Diameter of the tube. Default is 40. <br />
radialSegments — Default is 8 <br />
tubularSegments — Default is 6. <br />
arc — Central angle. Default is Math.PI * 2.
</div>
<h2>Properties</h2>
<div>
Each of the contructor parameters is accessible as a property of the same name. Any modification of these properties after instantiation does not change the geometry.
</div>
<h2>Source</h2>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
</body>
</html>
......@@ -191,7 +191,9 @@ var list = {
],
"Extras / Geometries": [
[ "BoxBufferGeometry", "api/extras/geometries/BoxBufferGeometry" ],
[ "BoxGeometry", "api/extras/geometries/BoxGeometry" ],
[ "CircleBufferGeometry", "api/extras/geometries/CircleBufferGeometry" ],
[ "CircleGeometry", "api/extras/geometries/CircleGeometry" ],
[ "CylinderGeometry", "api/extras/geometries/CylinderGeometry" ],
[ "DodecahedronGeometry", "api/extras/geometries/DodecahedronGeometry" ],
......@@ -200,13 +202,16 @@ var list = {
[ "LatheGeometry", "api/extras/geometries/LatheGeometry" ],
[ "OctahedronGeometry", "api/extras/geometries/OctahedronGeometry" ],
[ "ParametricGeometry", "api/extras/geometries/ParametricGeometry" ],
[ "PlaneBufferGeometry", "api/extras/geometries/PlaneBufferGeometry" ],
[ "PlaneGeometry", "api/extras/geometries/PlaneGeometry" ],
[ "PolyhedronGeometry", "api/extras/geometries/PolyhedronGeometry" ],
[ "RingGeometry", "api/extras/geometries/RingGeometry" ],
[ "ShapeGeometry", "api/extras/geometries/ShapeGeometry" ],
[ "SphereBufferGeometry", "api/extras/geometries/SphereBufferGeometry" ],
[ "SphereGeometry", "api/extras/geometries/SphereGeometry" ],
[ "TetrahedronGeometry", "api/extras/geometries/TetrahedronGeometry" ],
[ "TextGeometry", "api/extras/geometries/TextGeometry" ],
[ "TorusBufferGeometry", "api/extras/geometries/TorusBufferGeometry" ],
[ "TorusGeometry", "api/extras/geometries/TorusGeometry" ],
[ "TorusKnotGeometry", "api/extras/geometries/TorusKnotGeometry" ],
[ "TubeGeometry", "api/extras/geometries/TubeGeometry" ]
......
......@@ -93,6 +93,40 @@ function updateGroupGeometry( mesh, geometry ) {
var guis = {
BoxBufferGeometry : function( mesh ) {
var data = {
width : 15,
height : 15,
depth : 15,
widthSegments : 1,
heightSegments : 1,
depthSegments : 1
};
function generateGeometry() {
updateGroupGeometry( mesh,
new THREE.BoxBufferGeometry(
data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments
)
);
}
var folder = gui.addFolder( 'THREE.BoxBufferGeometry' );
folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
folder.add( data, 'depth', 1, 30 ).onChange( generateGeometry );
folder.add( data, 'widthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'heightSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'depthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
generateGeometry();
},
BoxGeometry : function( mesh ) {
var data = {
......@@ -173,6 +207,36 @@ var guis = {
},
CircleBufferGeometry : function( mesh ) {
var data = {
radius : 10,
segments : 32,
thetaStart : 0,
thetaLength : twoPi,
};
function generateGeometry() {
updateGroupGeometry( mesh,
new THREE.CircleBufferGeometry(
data.radius, data.segments, data.thetaStart, data.thetaLength
)
);
}
var folder = gui.addFolder( 'THREE.CircleBufferGeometry' );
folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
folder.add( data, 'segments', 0, 128 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
generateGeometry();
},
CircleGeometry : function( mesh ) {
var data = {
......@@ -281,6 +345,36 @@ var guis = {
},
PlaneBufferGeometry : function( mesh ) {
var data = {
width : 10,
height : 10,
widthSegments : 1,
heightSegments : 1
};
function generateGeometry() {
updateGroupGeometry( mesh,
new THREE.PlaneBufferGeometry(
data.width, data.height, data.widthSegments, data.heightSegments
)
);
}
var folder = gui.addFolder( 'THREE.PlaneBufferGeometry' );
folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
folder.add( data, 'widthSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'heightSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
generateGeometry();
},
PlaneGeometry : function( mesh ) {
var data = {
......@@ -345,6 +439,42 @@ var guis = {
},
SphereBufferGeometry : function( mesh ) {
var data = {
radius : 15,
widthSegments : 8,
heightSegments : 6,
phiStart : 0,
phiLength : twoPi,
thetaStart : 0,
thetaLength : Math.PI,
};
function generateGeometry() {
updateGroupGeometry( mesh,
new THREE.SphereBufferGeometry(
data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength
)
);
}
var folder = gui.addFolder( 'THREE.SphereBufferGeometry' );
folder.add( data, 'radius', 1, 30 ).onChange( generateGeometry );
folder.add( data, 'widthSegments', 3, 32 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'heightSegments', 2, 32 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'phiStart', 0, twoPi ).onChange( generateGeometry );
folder.add( data, 'phiLength', 0, twoPi ).onChange( generateGeometry );
folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
generateGeometry();
},
SphereGeometry : function( mesh ) {
var data = {
......@@ -473,6 +603,38 @@ var guis = {
},
TorusBufferGeometry : function( mesh ) {
var data = {
radius : 10,
tube : 3,
radialSegments : 16,
tubularSegments : 100,
arc : twoPi
};
function generateGeometry() {
updateGroupGeometry( mesh,
new THREE.TorusBufferGeometry(
data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc
)
);
}
var folder = gui.addFolder( 'THREE.TorusBufferGeometry' );
folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
folder.add( data, 'radialSegments', 2, 30 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'tubularSegments', 3, 200 ).step( 1 ).onChange( generateGeometry );
folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry );
generateGeometry();
},
TorusGeometry : function( mesh ) {
var data = {
......
......@@ -67,26 +67,35 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) {
}
function getTextureEncodingFromMap ( map, gammaOverrideLinear ) {
function getTextureEncodingFromMap( map, gammaOverrideLinear ) {
var encoding;
if( ! map ) {
encoding = THREE.LinearEncoding;
}
else if( map instanceof THREE.Texture ) {
encoding = map.encoding;
}
else if( map instanceof THREE.WebGLRenderTarget ) {
encoding = map.texture.encoding;
}
// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.
if( encoding === THREE.LinearEncoding && gammaOverrideLinear ) {
encoding = THREE.GammaEncoding;
}
return encoding;
}
this.getParameters = function ( material, lights, fog, object ) {
......
......@@ -281,7 +281,7 @@ def translate(vertices, t):
"""Translate array of vertices by vector t.
"""
for i in xrange(len(vertices)):
for i in range(len(vertices)):
vertices[i][0] += t[0]
vertices[i][1] += t[1]
vertices[i][2] += t[2]
......@@ -687,19 +687,19 @@ def generate_face(f, fc):
# must clamp in case on polygons bigger than quads
for i in xrange(nVertices):
for i in range(nVertices):
index = f['vertex'][i] - 1
faceData.append(index)
faceData.append( f['material'] )
if hasFaceVertexUvs:
for i in xrange(nVertices):
for i in range(nVertices):
index = f['uv'][i] - 1
faceData.append(index)
if hasFaceVertexNormals:
for i in xrange(nVertices):
for i in range(nVertices):
index = f['normal'][i] - 1
faceData.append(index)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册