Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
ef12b67
Update HTML files
niebert Sep 23, 2022
91abd73
Update README.md
niebert Sep 23, 2022
087b4dd
Create README.md
niebert Sep 23, 2022
bb9d848
equirectangular images added
niebert Sep 23, 2022
acfd49f
Update index.html
niebert Sep 23, 2022
2ec08b5
Missing Thumbnails are added
niebert Sep 23, 2022
88eafa5
Update README.md
niebert Sep 23, 2022
9e843e1
Update README.md
niebert Sep 23, 2022
caa1873
LinkParam library added
niebert Sep 23, 2022
e9f5892
Update index.html
niebert Sep 23, 2022
a74c777
Aframe Library and AR.js library added
niebert Sep 23, 2022
3499b64
Update index.html
niebert Sep 23, 2022
1016229
Add files via upload
niebert Sep 23, 2022
f3e3404
Update index.html
niebert Sep 23, 2022
849eb3e
Add files via upload
niebert Sep 23, 2022
0bab2df
Update a_marker.html
niebert Sep 23, 2022
eb5d5e9
Update README.md
niebert Sep 23, 2022
c933dfc
Update README.md
niebert Sep 23, 2022
4ac2aee
Update index.html
niebert Sep 23, 2022
a8a747c
Update README.md
niebert Sep 23, 2022
1a11220
Update README.md
niebert Sep 23, 2022
51d2215
Update README.md
niebert Sep 23, 2022
fde58e4
Update rhein1_rodenkirchen.html
niebert Sep 23, 2022
c743beb
Update rhein2_rodenkirchen.html
niebert Sep 23, 2022
d5fca48
Update rhein2_rodenkirchen.html
niebert Sep 23, 2022
30b18b6
Update rhein1_rodenkirchen.html
niebert Sep 23, 2022
320b475
Update rhein3_rodenkirchen.html
niebert Sep 23, 2022
587325f
Update rhein4_rodenkirchen.html
niebert Sep 23, 2022
97fa4b0
Update rhein4_rodenkirchen.html
niebert Sep 23, 2022
8c0b08c
Add files via upload
niebert Jan 31, 2023
3b2144a
Add files via upload
niebert Dec 11, 2024
491de37
Add files via upload
niebert Dec 11, 2024
fc7a5b5
Add files via upload
niebert Dec 11, 2024
4456b34
Rename primal_carnage_spinosaurus_small.glb to primal_carnage_spinosa…
niebert Dec 11, 2024
72059c4
Update README.md
niebert Dec 15, 2024
7b8f0a7
Rename spinosaurus_rieselfelder_ar.html to spinosaurus_hiro_ar.html
niebert Dec 15, 2024
6eda543
Update index.html
niebert Dec 15, 2024
8d9d071
Rename aframe-ar.js to aframe-ar_v2a.js
niebert Dec 15, 2024
160b9b5
Create aframe-aj.js
niebert Dec 15, 2024
7f5e0ac
Rename aframe-aj.js to aframe-ar.js
niebert Dec 15, 2024
bd4f03a
Add files via upload
niebert Dec 15, 2024
d5f5775
Update README.md
niebert Dec 15, 2024
66024dc
Update spinosaurus_hiro_ar.html
niebert Dec 15, 2024
1c51a3e
Update index.html
niebert Dec 15, 2024
46a32b8
Update index.html
niebert Dec 15, 2024
290549e
Create aframe4dino.min.js
niebert Dec 15, 2024
fb5e29d
Update and rename spinosaurus_hiro_ar.html to spinosaurus_remote_libs…
niebert Dec 15, 2024
a7e461a
Create spinosaurus_hiro_ar.html
niebert Dec 15, 2024
51df57b
Update index.html
niebert Dec 15, 2024
c0bed31
Update spinosaurus_hiro_ar.html
niebert Dec 15, 2024
d3acd8e
Update README.md
niebert Dec 15, 2024
f511424
Add files via upload
niebert Dec 15, 2024
10c1471
Update spinosaurus_hiro_ar.html
niebert Dec 15, 2024
301fd18
Update spinosaurus_hiro_ar.html
niebert Dec 15, 2024
d474857
Update spinosaurus_hiro_ar.html
niebert Dec 16, 2024
84fa2f8
Update spinosaurus_hiro_ar.html
niebert Dec 16, 2024
4b9b555
Update spinosaurus_hiro_ar.html
niebert Dec 16, 2024
af7f858
Update README.md
niebert Dec 16, 2024
682ddd8
Update README.md
niebert Dec 16, 2024
d31ab2e
Update spinosaurus_hiro_ar.html
niebert Dec 16, 2024
ee5f6b7
Update README.md
niebert Dec 16, 2024
11e5fa1
Update README.md
niebert Dec 16, 2024
835df55
Update README.md
niebert Dec 16, 2024
7555b50
Update README.md
niebert Dec 16, 2024
baca725
Update README.md
niebert Dec 16, 2024
c0eade6
Update README.md
niebert Dec 16, 2024
4e4a821
Update index.css
niebert Dec 16, 2024
319dcde
Update index.css
niebert Dec 16, 2024
e1fdecb
Update index.html
niebert Dec 16, 2024
c7b7e58
Update README.md
niebert Dec 16, 2024
23d6f7b
Update README.md
niebert Dec 16, 2024
a448df6
Update index.html
niebert Dec 16, 2024
619bc0f
Update index.html
niebert Dec 16, 2024
bf4637d
Update spinosaurus_hiro_ar.html
niebert Dec 22, 2024
4cda4cf
Add files via upload
niebert Dec 26, 2024
812f4fd
Update spinosaurus_hiro_ar.html
niebert Dec 26, 2024
96be104
Add files via upload
niebert Dec 26, 2024
39b1924
Update rhein1_rodenkirchen.html
niebert Jan 13, 2025
503e9ed
Update rhein2_rodenkirchen.html
niebert Jan 13, 2025
09472e3
Update rhein3_rodenkirchen.html
niebert Jan 13, 2025
7b628b0
Update rhein4_rodenkirchen.html
niebert Jan 13, 2025
b21f944
Update index.html
niebert Jan 13, 2025
cbf14c4
Update index.html
niebert Mar 5, 2025
5ce98d5
Update index.html
niebert Mar 21, 2025
d24848c
Update README.md
niebert Mar 21, 2025
3befee9
Update index.html
niebert Apr 9, 2025
02db835
Update index.html
niebert Apr 9, 2025
0a39bec
Update README.md
niebert Apr 29, 2025
35972e0
Create aframe-1.7.0.js
niebert Jul 4, 2025
7213021
Create aframe-extras-1.7.0.js
niebert Jul 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Marker_Printout_AR_demo.pdf
Binary file not shown.
29 changes: 29 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,30 @@
# AR-Examples
The examples from [Lee Stemkoski](https://github.com/stemkoski/AR-Examples) was forked and a few examples are added.
* for using these examples, print out the [markers](markers/Marker_Printout_AR_demo.pdf) and
* switch on the WebCam and let browser to access the WebCam.
* place the marker mentioned in the [demo page](https://niebert.github.io/AR-Examples) in front of the camera and move the markers
* in some AR examples multiple markers can be used and different objects can be places
* also [360-degree (equirectangular) images](https://www.github.com/niebert/HuginSample) are used to and you could use e.g. the [hiro-marker](markers/Marker_Printout_AR_demo.pdf) to look around

Check out the online demos with:
## [Online-Demo](https://niebert.github.io/AR-Examples)
* [Download ZIP-file](https://github.com/niebert/AR-Examples/archive/refs/heads/master.zip) of this repository
* see also [Wikiversity learning resource about 3D-modelling](https://en.wikiversity.org/wiki/3D_Modelling/Examples/AR_with_Markers)
* [HuginSample - Equirectangular Images](https://www.github.com/niebert/HuginSample) or [AFrame Navigation](https://niebert.github.io/aframe360navigation/)

## 3D-Models on Marker
Sketchfab publishes 3D-Models as creative commons. One the CC-BY-4.0 models a dinosaur (Spinosaurus) is used as a 3D model on a marker. The model is called
* "[primal carnage spinosaurus](https://skfb.ly/pswyN))" (URL: https://skfb.ly/pswyN) created by `seth the yutyrannus`.
* The 3D model is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/).
* ***AR-Web-Demo:*** [Spinosaurus on AR-Marker](https://niebert.github.io/AR-Examples/spinosaurus_hiro_ar.html) - ***VR-Web-Demo:*** [Spinosaurus in VR](https://niebert.github.io/HuginSample/spinosaurus_rieselfelder_aframe.html)
* GLB-File: [model3d/primal_carnage_spinosaurus_small.glb](model3d/primal_carnage_spinosaurus_small.glb)
![Spinosaurus on AR-Marker](./img/spinosaurus_on_ar_marker.png)

* **(Print Marker)** Use Hiro-Marker as print out
* **(Display 3D Model in Browser)** Start [Web-Demo - Spinosaurus on AR-Marker - "Hiro"](https://niebert.github.io/AR-Examples/spinosaurus_hiro_ar.html)
* **(Marker in Camera Viewport)** Allow camera to record Hiro-Marker in Webcam.
* **(3D Model in Webpage displayed on Marker)** Dinosaur will be placed on Hiro-Marker in camera image.
* **(Coordinate System)** Hiro marker (and any other marker) defines in the asymmetric shape a coordinate system in which the objects are placed.
* **(Scaling of Object - Marker Size)** The size of the Hiro marker defines the unit length in the coordinate system. E.g. triple size of printed Hiro marker scales the objects by the factor 3.

![Hiro-Marker](./markers/hiro.png)
46 changes: 46 additions & 0 deletions a_hiro.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Receiver of Params</title>
<script src="js/linkparam.js"></script>
</head>
<body style="background-color: #CACACA">
<h3>Verwenden Sie den folgenden Marker</h3>
<div id="markerimage">
</div>

<div id="paramout">
</div>
<textarea id="nexturl" row="5" cols="95" style="display:none">undefined nexturl</textarea>
<textarea id="marker" row="5" cols="95" style="display:none">undefined marker</textarea>
<script>
var vNextURL = "";
var vMarker = "";
var vLinkParam = new LinkParam();
vLinkParam.init(document);
document.getElementById("paramout").innerHTML = vLinkParam.getTableHTML();
if (vLinkParam.exists("nexturl")) {
vNextURL= vLinkParam.getValue("nexturl");
//alert(vPar);
document.getElementById("nexturl").value = vNextURL;
// setTimeout("window.location.href='"+vNextURL+"'",5000);

} else {
alert("Receiver needs a LinkParameter 'nexturl'")
}
if (vLinkParam.exists("marker")) {
var vMarker = vLinkParam.getValue("marker");
//alert(vPar);
document.getElementById("marker").value = vMarker;
var img = document.createElement("img");
//img.src = "markers/hiro.png";
img.src = "markers/"+vMarker+".png";
var src = document.getElementById("markerimage");
src.appendChild(img);
} else {
alert("Receiver needs a LinkParameter 'marker'")
}
</script>
</body>
</html>
47 changes: 47 additions & 0 deletions a_marker.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Receiver of Params</title>
<script src="js/linkparam.js"></script>
</head>
<body style="background-color: #CACACA">
<h3>Use the following Marker for the AR-Example</h3>
<div id="markerimage">
</div>

<div id="paramout">
</div>
<textarea id="nexturl" row="5" cols="95" style="display:none">undefined nexturl</textarea>
<textarea id="marker" row="5" cols="95" style="display:none">undefined marker</textarea>
<script>
var vNextURL = "";
var vMarker = "";
var vLinkParam = new LinkParam();
vLinkParam.init(document);
document.getElementById("paramout").innerHTML = vLinkParam.getTableHTML();
if (vLinkParam.exists("nexturl")) {
vNextURL= vLinkParam.getValue("nexturl");
//alert(vPar);
document.getElementById("nexturl").value = vNextURL;
setTimeout("window.location.href='"+vNextURL+"'",5000)

} else {
alert("Receiver needs a LinkParameter 'nexturl'")
}
if (vLinkParam.exists("marker")) {
var vMarker = vLinkParam.getValue("marker");
//alert(vPar);
document.getElementById("marker").value = vMarker;
var img = document.createElement("img");
img.width=450;
//img.src = "markers/hiro.png";
img.src = "markers/"+vMarker+".png";
var src = document.getElementById("markerimage");
src.appendChild(img);
} else {
alert("Receiver needs a LinkParameter 'marker'")
}
</script>
</body>
</html>
157 changes: 157 additions & 0 deletions basic-scene-hiro.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
<!DOCTYPE html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<title>Hello, AR Cubes!</title>
<!-- include three.js library -->
<script src='js/three.js'></script>
<!-- include jsartookit -->
<script src="jsartoolkit5/artoolkit.min.js"></script>
<script src="jsartoolkit5/artoolkit.api.js"></script>
<!-- include threex.artoolkit -->
<script src="threex/threex-artoolkitsource.js"></script>
<script src="threex/threex-artoolkitcontext.js"></script>
<script src="threex/threex-arbasecontrols.js"></script>
<script src="threex/threex-armarkercontrols.js"></script>
</head>

<body style='margin : 0px; overflow: hidden; font-family: Monospace;'>

<!--
Example created by Lee Stemkoski: https://github.com/stemkoski
Based on the AR.js library and examples created by Jerome Etienne: https://github.com/jeromeetienne/AR.js/
-->

<script>

var scene, camera, renderer, clock, deltaTime, totalTime;

var arToolkitSource, arToolkitContext;

var markerRoot1, markerRoot2;

var mesh1;

initialize();
animate();

function initialize()
{
scene = new THREE.Scene();

let ambientLight = new THREE.AmbientLight( 0xcccccc, 0.5 );
scene.add( ambientLight );

camera = new THREE.Camera();
scene.add(camera);

renderer = new THREE.WebGLRenderer({
antialias : true,
alpha: true
});
renderer.setClearColor(new THREE.Color('lightgrey'), 0)
renderer.setSize( 640, 480 );
renderer.domElement.style.position = 'absolute'
renderer.domElement.style.top = '0px'
renderer.domElement.style.left = '0px'
document.body.appendChild( renderer.domElement );

clock = new THREE.Clock();
deltaTime = 0;
totalTime = 0;

////////////////////////////////////////////////////////////
// setup arToolkitSource
////////////////////////////////////////////////////////////

arToolkitSource = new THREEx.ArToolkitSource({
sourceType : 'webcam',
});

function onResize()
{
arToolkitSource.onResize()
arToolkitSource.copySizeTo(renderer.domElement)
if ( arToolkitContext.arController !== null )
{
arToolkitSource.copySizeTo(arToolkitContext.arController.canvas)
}
}

arToolkitSource.init(function onReady(){
onResize()
});

// handle resize event
window.addEventListener('resize', function(){
onResize()
});

////////////////////////////////////////////////////////////
// setup arToolkitContext
////////////////////////////////////////////////////////////

// create atToolkitContext
arToolkitContext = new THREEx.ArToolkitContext({
cameraParametersUrl: 'data/camera_para.dat',
detectionMode: 'mono'
});

// copy projection matrix to camera when initialization complete
arToolkitContext.init( function onCompleted(){
camera.projectionMatrix.copy( arToolkitContext.getProjectionMatrix() );
});

////////////////////////////////////////////////////////////
// setup markerRoots
////////////////////////////////////////////////////////////

let loader = new THREE.TextureLoader();
let texture = loader.load( 'images/border.png' );

let patternArray = ["letterA", "letterB", "letterC", "letterD", "letterF", "kanji", "hiro"];
let colorArray = [0xff0000, 0xff8800, 0xffff00, 0x00cc00, 0x0000ff, 0xcc00ff, 0xcccccc];
for (let i = 0; i < 7; i++)
{
let markerRoot = new THREE.Group();
scene.add(markerRoot);
let markerControls = new THREEx.ArMarkerControls(arToolkitContext, markerRoot, {
type : 'pattern', patternUrl : "data/" + patternArray[i] + ".patt",
});

let mesh = new THREE.Mesh(
new THREE.CubeGeometry(1.25,1.25,1.25),
new THREE.MeshBasicMaterial({color:colorArray[i], map:texture, transparent:true, opacity:0.5})
);
mesh.position.y = 1.25/2;
markerRoot.add( mesh );
}
}


function update()
{
// update artoolkit on every frame
if ( arToolkitSource.ready !== false )
arToolkitContext.update( arToolkitSource.domElement );
}


function render()
{
renderer.render( scene, camera );
}


function animate()
{
requestAnimationFrame(animate);
deltaTime = clock.getDelta();
totalTime += deltaTime;
update();
render();
}

</script>

</body>
</html>
Loading