X3D and HTML5 examples
From Web3D.org
Here are several examples that show different ways of combining HTML web pages and X3D scenes.
Contents
- 1 HelloWorld.x3d standalone scene
- 2 HTML Anchor link to X3D document
- 3 X3D embedded using HTML5 object element
- 4 X3D served as text/html (no namespace prefix)
- 5 X3D served as application/xhtml+xml (with namespace prefix)
- 6 Possible future X3D extension - Box has added html onclick event
- 7 X3D - Making direct updates on the tree
HelloWorld.x3d standalone scene
HelloWorld.x3d shows a simple standalone example (.html and .png)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.2//EN" "http://www.web3d.org/specifications/x3d-3.2.dtd"> <X3D profile='Immersive' version='3.2' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.2.xsd'> <head> <meta name='title' content='HelloWorld.x3d'/> <meta name='identifier' content='http://www.web3d.org/x3d/content/examples/HelloWorld.x3d'/> </head> <Scene> <Group> <Viewpoint centerOfRotation='0 -1 0' description='Hello world!' position='0 -1 7'/> <Transform rotation='0 1 0 3'> <Shape> <Sphere/> <Appearance> <Material diffuseColor='0 0.5 1'/> <ImageTexture url='"earth-topo.png"' /> </Appearance> </Shape> </Transform> <Transform translation='0 -2 0'> <Shape> <Text solid='false' string='"Hello" "world!"'> <FontStyle justify='"MIDDLE" "MIDDLE"'/> </Text> <Appearance> <Material diffuseColor='0.1 0.5 1'/> </Appearance> </Shape> </Transform> </Group> </Scene> </X3D>
HTML Anchor link to X3D document
HTML anchor links allow an HTML page to load the contents of an X3D scene.
HTML source:
Here is my <a href='HelloWorld.x3d' title='Link to a new X3D document'>HelloWorld example</a> in X3D.
HTML result:
Here is my HelloWorld example in X3D.
Typically Web browser responses to a user selecting the link:
- Show X3D scene, if an X3D plugin is installed or native support for X3D is provided
- If X3D file format is unrecognized, browser might save file or else provide the user a choice to launch an external application (such as an X3D viewer or editor)
- Show source (if http server X3D MIME type settings are incorrect)
X3D embedded using HTML5 object element
September 2022 status: There are no publicly distributed plug-ins for current web browsers that display X3D content referenced in an object tag. Current practice is to render X3D on a web page using a javascript library such as X3DOM or X_ITE
<object name='x3dBlock' type='model/x3d+xml' allow-same-origin allow-scripts> <param name='src' value='aScene.x3d'> <-- fallback HTML here --> </object>
- Goal for this example is to show some HTML5-specific attributes
- Opens nested browsing context in parent block element
- Set of negotiated <param> pairs for initialization and runtime
X3D served as text/html (no namespace prefix)
<!DOCTYPE html> <html> <head> <style type=text/css'> X3D { height:100%;width:100%; } svg { height:100%;width:100%; } </style> </head> <body> <X3D name='x3dBlock' type='model/x3d+xml' version='3.3' profile='Interchange' allow-same-origin allow-scripts> <Scene> <Viewpoint description='Start' /> <Shape> <Box size="4 4 4" /> </Shape> <Shape> <Text string='"This is X3D Text"' /> </Shape> </Scene> </X3D> <svg type='image/svg+xml' version="1.1"> <ellipse cx="2cm" cy="4cm" rx="2cm" ry="1cm" /> </svg> <mathml> <mrow><mi> x </mi><mo> + </mo> <mrow><mi> a </mi><mo> / </mo><mi> b </mi> </mrow></mrow> </mathml> <ruby> WWW <rt>World Wide Web</rt> </ruby> </body> </html>
X3D served as application/xhtml+xml (with namespace prefix)
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type=text/css'> x3d:X3D { height:200px;width:200px; } </style> </head> <body> <x3d:X3D name='x3dBlock' xmlns:x3d= "http://www.web3d.org/specifications/x3d-3.2.xsd"> <Scene> <Shape> <Box size="4 4 4" /> </Shape> <Shape> <Text string='"This is X3D Text"' /> </Shape> </Scene> </x3d:X3D> </body> </html>
Possible future X3D extension - Box has added html onclick event
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type=text/css'> x3d:X3D { height:200px;width:200px; } </style> </head> <body> <x3d:X3D name='x3dBlock' xmlns:x3d="http://www.web3d.org/specifications/x3d-3.2.xsd"> <Scene> <Shape> <Box size="4 4 4" onclick="alert('box picked at position ' + hitPnt);" /> </Shape> <Shape> <Text string='"This is X3D Text"' /> </Shape> </Scene> </x3d:X3D> </body> </html>
- Note that addition of onclick attribute is not standard X3D
- Preferred approach is probably to use X3D TouchSensor instead
X3D - Making direct updates on the tree
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type=text/css'> x3d:X3D { height:200px;width:200px; } </style> </head> <body> <x3d:X3D name='x3dBlock' xmlns:x3d="http://www.web3d.org/specifications/x3d-3.2.xsd"> <Scene> <Shape> <Appearance> <Material diffuseColor="1 0 0" /> </Appearance> <Box size="4 4 4" /> </Shape> <Shape> <Text string='"This is X3D Text"' /> </Shape> </Scene> </x3d:X3D> <script type="text/javascript"><! CDATA var colSel = true; function toggleRendering() { var button = document.getElementById("color"); colSel = !colSel; if (colSel) button.value = "Blue"; else button.value = "Red"; var mat = document.getElementsByTagName("Material"); var n = mat.length; var aMat = mat[0]; aMat.setAttribute("diffuseColor", (!colSel ? "0 0 1" : "1 0 0")); return false; } ></script> <p class="case"> Dynamic material update <input type="button" id="color" value="Change Color" onclick="toggleRendering();" /> </p> </body> </html>