-
-
Notifications
You must be signed in to change notification settings - Fork 35.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Examples: Add demo for indexed BufferGeometry #13266
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,206 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<title>three.js webgl - buffergeometry - indexed</title> | ||
<meta charset="utf-8"> | ||
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> | ||
<style> | ||
body { | ||
color: #cccccc; | ||
font-family:Monospace; | ||
font-size:13px; | ||
text-align:center; | ||
|
||
background-color: #050505; | ||
margin: 0px; | ||
overflow: hidden; | ||
} | ||
|
||
#info { | ||
position: absolute; | ||
top: 0px; width: 100%; | ||
padding: 5px; | ||
} | ||
|
||
a { | ||
color: #0080ff; | ||
} | ||
|
||
</style> | ||
</head> | ||
<body> | ||
|
||
<div id="container"></div> | ||
<div id="info"><a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> webgl - buffergeometry - indexed</div> | ||
|
||
<script src="../build/three.js"></script> | ||
|
||
<script src="js/Detector.js"></script> | ||
<script src="js/libs/stats.min.js"></script> | ||
<script src="./js/libs/dat.gui.min.js"></script> | ||
|
||
<script> | ||
|
||
if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); | ||
|
||
var camera, scene, renderer, stats; | ||
|
||
var mesh; | ||
|
||
init(); | ||
animate(); | ||
|
||
function init() { | ||
|
||
// | ||
|
||
camera = new THREE.PerspectiveCamera( 27, window.innerWidth / window.innerHeight, 1, 3500 ); | ||
camera.position.z = 64; | ||
|
||
scene = new THREE.Scene(); | ||
scene.background = new THREE.Color( 0x050505 ); | ||
|
||
// | ||
|
||
var ambientLight = new THREE.AmbientLight( 0xcccccc ); | ||
scene.add( ambientLight ); | ||
|
||
var light1 = new THREE.DirectionalLight( 0xffffff, 0.5 ); | ||
light1.position.set( 1, 1, 1 ); | ||
scene.add( light1 ); | ||
|
||
var light2 = new THREE.DirectionalLight( 0xffffff, 1.5 ); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Try not not over-brighten you scene. |
||
light2.position.set( 0, -1, 0 ); | ||
scene.add( light2 ); | ||
|
||
// | ||
|
||
var geometry = new THREE.BufferGeometry(); | ||
|
||
var indices = []; | ||
|
||
var vertices = []; | ||
var normals = []; | ||
var colors = []; | ||
|
||
var size = 20; | ||
var segments = 10; | ||
|
||
var halfSize = size / 2; | ||
var segmentSize = size / segments; | ||
|
||
// generate vertices, normals and color data for a simple grid geometry | ||
|
||
for ( var i = 0; i <= segments; i ++ ) { | ||
|
||
var y = ( i * segmentSize ) - halfSize; | ||
|
||
for ( var j = 0; j <= segments; j ++ ) { | ||
|
||
var x = ( j * segmentSize ) - halfSize; | ||
|
||
vertices.push( x, - y, 0 ); | ||
normals.push( 0, 0, 1 ); | ||
|
||
var r = ( x / size ) + 0.5; | ||
var g = ( y / size ) + 0.5; | ||
|
||
colors.push( r, g, 1 ); | ||
|
||
} | ||
|
||
} | ||
|
||
// generate indices (data for element array buffer) | ||
|
||
for ( var i = 0; i < segments; i ++ ) { | ||
|
||
for ( var j = 0; j < segments; j ++ ) { | ||
|
||
var a = i * ( segments + 1 ) + ( j + 1 ); | ||
var b = i * ( segments + 1 ) + j; | ||
var c = ( i + 1 ) * ( segments + 1 ) + j; | ||
var d = ( i + 1 ) * ( segments + 1 ) + ( j + 1 ); | ||
|
||
// generate two faces (triangles) per iteration | ||
|
||
indices.push( a, b, d ); // face one | ||
indices.push( b, c, d ); // face two | ||
|
||
} | ||
|
||
} | ||
|
||
// | ||
|
||
geometry.setIndex( indices ); | ||
geometry.addAttribute( 'position', new THREE.Float32BufferAttribute( vertices, 3 ) ); | ||
geometry.addAttribute( 'normal', new THREE.Float32BufferAttribute( normals, 3 ) ); | ||
geometry.addAttribute( 'color', new THREE.Float32BufferAttribute( colors, 3 ) ); | ||
|
||
var material = new THREE.MeshPhongMaterial( { | ||
specular: 0xffffff, shininess: 250, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If the specular reflectance of the material is There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Okay done 👍 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. BTW: I've just copied the material/lights from an other example. We might want to review the lightings in the examples at some point... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Right. Check the outline pass demo. :/ |
||
side: THREE.DoubleSide, vertexColors: THREE.VertexColors | ||
} ); | ||
|
||
mesh = new THREE.Mesh( geometry, material ); | ||
scene.add( mesh ); | ||
|
||
// | ||
|
||
renderer = new THREE.WebGLRenderer( { antialias: true } ); | ||
renderer.setPixelRatio( window.devicePixelRatio ); | ||
renderer.setSize( window.innerWidth, window.innerHeight ); | ||
document.body.appendChild( renderer.domElement ); | ||
|
||
// | ||
|
||
stats = new Stats(); | ||
document.body.appendChild( stats.dom ); | ||
|
||
// | ||
|
||
var gui = new dat.GUI() | ||
gui.add( material, 'wireframe' ); | ||
|
||
// | ||
|
||
window.addEventListener( 'resize', onWindowResize, false ); | ||
|
||
} | ||
|
||
function onWindowResize() { | ||
|
||
camera.aspect = window.innerWidth / window.innerHeight; | ||
camera.updateProjectionMatrix(); | ||
|
||
renderer.setSize( window.innerWidth, window.innerHeight ); | ||
|
||
} | ||
|
||
// | ||
|
||
function animate() { | ||
|
||
requestAnimationFrame( animate ); | ||
|
||
render(); | ||
stats.update(); | ||
|
||
} | ||
|
||
function render() { | ||
|
||
var time = Date.now() * 0.001; | ||
|
||
mesh.rotation.x = time * 0.25; | ||
mesh.rotation.y = time * 0.5; | ||
|
||
renderer.render( scene, camera ); | ||
|
||
} | ||
|
||
</script> | ||
|
||
</body> | ||
</html> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ambient light should never be that high. Try 0x222222.