Français
PHP, HTML & JavaScript- Forum

3D Grafik - WebGL avec three.js

 
- page 1 -



HofK
sur une appeler Tipp de IF hin, habe je mir la fois
three.js  [...]  angeschaut. là  [...]  (entier unten) qui ersten Resultate.
 
31.01.2016  
 



 
- page 46 -



HofK
sur qui la base obigen Rechtecks avec abgerundeten Ecken une variante einer Box.

Discourse:  [...]  UPDATE 2022:
Github:  [...] 


const geometry = RoundedBoxFlat( width, height, depth, radiusCorner, smoothness );

function RoundedBoxFlat( w, h, d, r, s ) {

    const pi2 = Math.PI * 2;
    const n = ( s + 1 ) * 4;// number of segments
    let indices = [];
    let positions = [];
    let uvs = [];
    makeFronts( n,  1,     0 );// segments, front is 1, start index 0 is center front
    makeFronts( n, -1, n + 1 );// segments, back is -1, start index n + 1 is center back
    makeFrame( n, 2 * n + 2, 1, n + 2 );// segments, start index framing ,start index front, start index back
    const geometry = new THREE.BufferGeometry( );
    geometry.setIndex( new THREE.BufferAttribute( new Uint32Array( indices ), 1 ) );
    geometry.setAttribute('position', new THREE.BufferAttribute( new Float32Array( positions ), 3 ) );
    geometry.setAttribute('uv', new THREE.BufferAttribute( new Float32Array( uvs ), 2 ) );
    // add multimaterial groups for front, back, framing
    const vtc = n * 3 ;// vertex count
    geometry.addGroup ( 0, vtc, 0 );
    geometry.addGroup ( vtc, vtc, 1 );
    geometry.addGroup ( 2 * vtc, 2 * vtc + 3, 2  );
    geometry.computeVertexNormals( );
    return geometry;

    function makeFronts( n, side, idx ) {

        const d0 = side === 1 ? 0 : 1;
        const d1 = side === 1 ? 1 : 0;

        for ( let j = 1; j < n; j ++ ) {

            indices.push( idx, idx + d0 + j, idx + d1 + j  );

        }

        const d2 = side === 1 ? n : 1;
        const d3 = side === 1 ? 1 : n;
        indices.push( idx, idx + d2 , idx + d3 );
        positions.push( 0, 0, side * d / 2 );// center
        uvs.push( 0.5, 0.5 );

        for ( let j = 0; j < n; j ++ ) {// contour

            const qu = Math.trunc( 4 * j / n ) + 1 ;// quadrant  qu: 1..4
            const sgn = ( qu === 1 || qu === 4 ? 1: -1)// signum left/right
            const c = { x: sgn * ( w / 2 - r ), y: ( qu < 3 ? 1 : -1 ) * ( h / 2 - r ), z: side * d / 2 }// quadrant center
            const x = c.x + r * Math.cos( pi2 * ( j - qu + 1 ) / ( n - 4 ) );
            const y = c.y + r * Math.sin( pi2 * ( j - qu + 1 ) / ( n - 4 ) );
            const z = c.z;
            positions.push( x, y, z );
            const u0 = side === 1 ? 0 : 1;
            uvs.push( u0 + side * ( 0.5 + x / w ), 0.5 + y / h );

        }

    }

    function makeFrame( n, sidx, sif,  sib ) {

        let a, b, c, d, xf, yf, zf, xb, yb, zb;
        const pif = sif * 3;// position start index  front
        const pib = sib * 3;// position start index back
        let st = [];
        let idx = sidx;

        for ( let j = 0; j < n; j ++ ) {

            a = idx;
            b = idx + 1;
            c = idx + 2;
            d = idx + 3;
            indices.push( a, b, d, a, d, c );
            idx += 2;

        }

        for ( let j = 0; j < n ; j ++ ) {

            const j3 = j * 3;
            xf = positions[ pif + j3 ];
            yf = positions[ pif + j3 + 1 ];
            zf = positions[ pif + j3 + 2 ];
            xb = positions[ pib + j3 ];
            yb = positions[ pib + j3 + 1 ];
            zb = positions[ pib + j3 + 2 ];
            positions.push( xf, yf, zf, xb, yb, zb );

            si ( j === 0 ) st = [ xf, yf, zf, xb, yb, zb ];// memorize

                const v = j / n;// here only independent of section height
                uvs.push( 0, v, 1, v );

            }

            positions.push( st[ 0 ], st[ 1 ], st[ 2 ], st[ 3 ], st[ 4 ], st[ 5 ] );// end = start
            uvs.push( 0, 1, 1, 1 );

        }

    }

 
05.12.2022  
 




HofK
encore une weitere variante,  [...] 



chez qui on pour qui Textur sur qui Umhüllung den Startpunkt sur une beliebigen Quadranten poser peux. chez den vorherigen Varianten étions qui u Werte à des Start qui Konstruktion attaché et jeweils verschieden.

en supplément sommes 4 zusätzliche Dreiecke zur vorherigen variante et une Doppelung qui mittleren Punkte qui Seiten erforderlich. qui Berechnung erfolgt quadrantenweise. cela comme mir très bien, là es übersichtlich ist.



un anderer Startpunkt.



Github [...] 
Discourse [...] 

-----------------------------------------------------------------------------------------
<!DOCTYPE html>
<!-- https://discourse.threejs.org/t/round-edged-box-flat/30012 -->
<head>
<title> RoundedBoxFlatUV </title>
<meta charset="utf-8" />
<style>
body {  margin: 0; }
</style>
</head>
<body>
</body>
<script type="module">
// @author hofk
importation * as THREE à partir de "../jsm/three.module.132.js";
importation { OrbitControls } à partir de "../jsm/OrbitControls.132.js";
const scene = new THREE.Scene( );
const camera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 0.01, 10000 );
camera.position.set(  4, 12, 12 );
const renderer = new THREE.WebGLRenderer( { antialias: vrai } );
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.setClearColor( 0xdedede, 1 );
const container = document.createElement('div' );
document.body.appendChild( container );
container.appendChild( renderer.domElement );
const axesHelper = new THREE.AxesHelper( 10 );
scene.add( axesHelper );
const controls = new OrbitControls( camera, renderer.domElement );
const texturLoader = new THREE.TextureLoader( );
const matériel = [

new THREE.MeshBasicMaterial( { map: texturLoader.load('uvgrid01.png' ), wireframe: faux} ),

    new THREE.MeshBasicMaterial( { map: texturLoader.load('uv_grid_opengl.jpg' ), wireframe: faux} ),

        new THREE.MeshBasicMaterial( { map: texturLoader.load('uvgrid01.png' ), wireframe: faux } ),

            ];
            // const matériel =new THREE.MeshBasicMaterial( { color: 'black',  wireframe: vrai } );
            const width         =  5;
            const height        =  4;
            const depth         =  9;
            const radiusCorner  =  1;
            const smoothness    =  4;
            const uStartQuadr   =  2;// tart quadrant regarding u, default is 1
            const geometry = RoundedBoxFlat( width, height, depth, radiusCorner, smoothness, uStartQuadr );// uStartQuadr optionnel
            geometry.computeVertexNormals( );
            const mesh = new THREE.Mesh( geometry, matériel );
            scene.add( mesh );
            animate( );

            function animate( ) {

                requestAnimationFrame( animate );
                renderer.render( scene, camera );

            }

            function RoundedBoxFlat( w, h, d, r, s, q ) {

                let qu = q || 1;// qu: start quadrant regarding u, optionnel
                const pi = Math.PI;
                let indices = [];
                let positions = [];
                let uvs = [];
                makeFronts( s,  1, 0 );// smoothness, front is 1, start index  center front
                makeFronts( s, -1, 4 * ( s + 3 ) + 1 );// smoothness, back is -1, start index center back
                makeFrame( s, 2 * ( 4 * ( s + 3 ) + 1 ), 1,  4 * ( s + 3 ) + 2 );// smoothness, start index framing ,start index front, start index back
                const geometry = new THREE.BufferGeometry( );
                geometry.setIndex( new THREE.BufferAttribute( new Uint32Array( indices ), 1 ) );
                geometry.setAttribute('position', new THREE.BufferAttribute( new Float32Array( positions ), 3 ) );
                geometry.setAttribute('uv', new THREE.BufferAttribute( new Float32Array( uvs ), 2 ) );
                // add multimaterial groups for front, back, framing
                const vtc = 4 * ( s + 2 ) * 3;
                geometry.addGroup ( 0, vtc, 0 );
                geometry.addGroup ( vtc , vtc, 1 );
                geometry.addGroup ( 2 * vtc, 2 * vtc + 3, 2 );
                geometry.computeVertexNormals( );
                return geometry;

                function makeFronts( s, side, idx ) {

                    const d0 = side === 1 ? 0 : 1;
                    const d1 = side === 1 ? 1 : 0;
                    let id = 0;

                    for ( let q = 1; q < 5; q ++ ) {// quadrants

                        id ++;

                        for ( let j = 0; j < s + 2; j ++ ) {

                            indices.push( idx, idx + d0 + id, idx + d1 + id  );
                            id ++;

                        }

                    }

                    positions.push( 0, 0, side * d / 2 );// center
                    uvs.push( 0.5, 0.5 );
                    let x, y, z, sgnX, sgnY;
                    let phi = 0;
                    const u0 = side === 1 ? 0 : 1;

                    for ( let q = 1; q < 5; q ++ ) {

                        sgnX = q === 1 || q === 4 ? 1 : -1;
                        sgnY = q < 3 ? 1 : -1 ;
                        x = Math.cos( phi ) * w / 2;
                        y = Math.sin( phi ) * h / 2;
                        z = side * d / 2;
                        positions.push( x, y, z );
                        uvs.push( u0 + side * ( 0.5 + x / w ), 0.5 + y / h  );

                        for ( let j = 0; j < s + 1; j ++ ) {

                            const c = { x: sgnX * ( w / 2 - r ), y: sgnY * ( h / 2 - r ), z: side * d / 2 }// quadrant center
                            const dPhi = pi / 2 * j / s;
                            x = c.x + r * Math.cos( phi + dPhi );
                            y = c.y + r * Math.sin( phi + dPhi );
                            z = c.z;
                            positions.push( x, y, z );
                            uvs.push( u0 + side * ( 0.5 + x / w ), 0.5 + y / h );

                        }

                        phi = phi + pi / 2;
                        x = Math.cos( phi ) * w / 2;
                        y = Math.sin( phi ) * h / 2;
                        z = side * d / 2;
                        positions.push( x, y, z );
                        uvs.push( u0 + side * ( 0.5 + x / w ), 0.5 + y / h  );

                    }

                }

                function makeFrame( s, sidx, sif, sib ) {

                    let a, b, c, d, xf, yf, zf, xb, yb, zb;
                    const pif = sif * 3;// position start index front
                    const pib = sib * 3;// position start index back
                    let idx = sidx;

                    for ( let q = 1; q < 5; q ++ ) {

                        for ( let j = 0; j < s + 2; j ++ ) {

                            a = idx;
                            b = idx + 1;
                            c = idx + 2;
                            d = idx + 3;
                            indices.push( a, b, d, a, d, c );
                            idx += 2;

                        }

                        idx += 2;

                    }

                    const ls = 2 * r * Math.sin( pi / ( s * 4 ) );// length of le outer line of a corner segment
                    const w2r = w / 2 - r;
                    const h2r = h / 2 - r;
                    const peri = 4 * w2r + 4 * h2r +  4 * s * ls;// perimeter
                    let u;
                    idx = 0;// reset

                    for ( let q = 1; q < 5; q ++ ) {

                        // console.log ( 'qu', qu );
                        u = qu / 4;

                        for ( let j = 0; j < s + 3; j ++ ) {

                            xf = positions[ pif + idx ];
                            yf = positions[ pif + idx + 1 ];
                            zf = positions[ pif + idx + 2 ];
                            xb = positions[ pib + idx ];
                            yb = positions[ pib + idx + 1 ];
                            zb = positions[ pib + idx + 2 ];
                            positions.push( xf, yf, zf, xb, yb, zb );
                            idx += 3;
                            // console.log ( 'u ', u );
                            uvs.push( u , 0, u, 1 );

                            si ( j === 0 )     { u -= q === 1 || q === 3 ? h2r / peri : w2r / peri; }

                            si ( j === s + 1 ) { u -= q === 1 || q === 3 ? w2r / peri : h2r / peri; }

                            si ( j > 0 && j < s + 1 ) { u -= ls / peri; }

                        }

                        qu = 4 - ( ( 5 - qu ) % 4 );// cyclic next quadrant with respect to u

                    }

                }

            }

            </script>
            </html>
 
09.12.2022  
 




HofK
une weitere Figur,qui je im Netz verwenden werde. vous ist aus losen Punkten zusammengesetzt.

 [...] 

Github  [...] 
<!DOCTYPE html>
<!-- https://discourse.threejs.org/t/create-circle-with-fuzzy-edge-asticot-of-individual-random-particles/30150/9 -->
<head>
<title> SphereWithRandomPointsl </title>
<meta charset="utf-8" />
<style>

body{

    overflow: hidden;
    margin: 0;

}

</style>
</head>
<body> </body>
<script type="module">
// @author hofk
importation * as THREE à partir de'../jsm/three.module.135.js';
importation { OrbitControls} à partir de'../jsm/OrbitControls.135.js'
let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera( 60, innerWidth / innerHeight, 0.001, 100);
camera.position.set( 1, 1, 2 );
let renderer = new THREE.WebGLRenderer();
renderer.setSize(innerWidth, innerHeight);
renderer.setClearColor( 0xdedede, 1 );
document.body.appendChild(renderer.domElement);

window.addEventListener("resize", (event) => {

    camera.aspect = innerWidth / innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize(innerWidth, innerHeight);

});

let controls = new OrbitControls(camera, renderer.domElement);
let helper = new THREE.AxesHelper( );
scene.add( helper );
const n = 25000;// points count
const dri = 0.07;// radius inner difference
const r = 0.6;// radius main
const dro = 0.4;// radius outer difference
const geometry = PointsSphere( n, dri, r, dro );
const pointsMaterial = new THREE.PointsMaterial( { size: 0.01, color: 0xff00ff } );
const spherePoints = new THREE.Points( geometry, pointsMaterial );
scene.add( spherePoints );
renderer.setAnimationLoop( ( ) => { renderer.render(scene, camera); } );
// .....................................

function PointsSphere( n, dri, r, dro ) {

    // n: points count,  dri: inner difference , r: radius main, dro: outer difference
    const pts = [];

    for( let i = 0; i < n ; i++){

        const inout = ( Math.random( ) - 0.5 ) * 2;
        const lim = ( inout >= 0 ? dro : dri );
        const rebord = r + Math.pow( Math.random( ), 3 ) * lim * inout;
        const θ = Math.PI * 2 * Math.random( );
        const φ = Math.acos( 2 *  Math.random( ) - 1 );
        const ps = new THREE.Vector3( Math.cos( θ ) * Math.sin( φ ),  Math.sin( θ ) * Math.sin( φ ),  Math.cos( φ ) );
        pts.push( ps.multiplyScalar( rebord ) );

    }

    const geometry = new THREE.BufferGeometry( ).setFromPoints( pts );
    return geometry;

}

</script>
</html>
 
21.12.2022  
 




HofK


un l'an ist wieder vorüber et qui gesammelten Beispiele de Discourse stehen depuis einigen Tagen zum Télécharger bereit.  [...] 
 
15.01.2023  
 




HofK
chez qui travail am Netz J'ai eu un Problem avec qui Transparenz. Je pour Kameraposition verschwanden qui transparenten Flügel qui Biene dans qui transparenten Blase.

Transparenz gemischt est un oftmals schwieriges Problem. dans mon cas donnais es une simple Solution - simple, si on es ensuite kennt.

Discourse:  [...] 

page dans qui recueil avec Solution:  [...] 

 
10.02.2023  
 




HofK
une neue spezielle Geometrie:

Dynamisches Mondphasen Panel



Siehe sous Github  [...] 
<!DOCTYPE html>
<!-- https://discourse.threejs.org/t/addon-to-create-special-extended-geometries/1855/12 -->
<head>
<title> MoonPhases </title>
<meta charset="utf-8" />
<style>

body{

    overflow: hidden;
    margin: 0;

}

</style>
</head>
<body></body>
<script type="module">
// @author hofk
importation * as THREE à partir de "../jsm/three.module.149.js";
importation { OrbitControls } à partir de "../jsm/OrbitControls.149.js";
const scene = new THREE.Scene( );
const camera = new THREE.PerspectiveCamera( 55, innerWidth / innerHeight, 0.01, 1000 );
camera.position.set(  0, 1, 4 );
const renderer = new THREE.WebGLRenderer( );
renderer.setSize( innerWidth, innerHeight );
renderer.setClearColor( 0xdedede );
document.body.appendChild(renderer.domElement);
const pointLight1 = new THREE.PointLight( 0xffff00, 1.1 );
pointLight1.position.set( 1, 2, 7 );
scene.add( pointLight1 );
const pointLight2 = new THREE.PointLight( 0xffff00, 1.1 );
pointLight2.position.set( -1, -2, -7 );
scene.add( pointLight2 );
new  OrbitControls( camera, renderer.domElement );
const matériel = new THREE.MeshPhongMaterial( { color: 0xfbfb23, wireframe: vrai,  side: THREE.DoubleSide } );
const moonGeo = MoonPhases( 1, 0.2, 32, 0 );
const moon = new THREE.Mesh( moonGeo, matériel );
scene.add( moon );
let t = 0;
animate( );

function animate( ) {

    t += 0.01;
    requestAnimationFrame( animate );
    moonGeo.calculatePositions( t );// phase dynamic
    renderer.render( scene, camera );

}

function MoonPhases( radius, depth, heightSegments, phase ) {

    const g = new THREE.BufferGeometry( );
    const pi = Math.PI;
    const pi2 = pi * 2;
    const hs2 = heightSegments * 2;// equals triangles per side
    const phs = phase || 0.1;
    let indices = [];
    let φ;
    let ib;// index back

    for ( let i = 0; i < hs2; i += 2 ) {

        indices.push( i, i + 2, i + 1,  i + 1, i + 2, i + 3 );// front

    }

    for ( let i = 0; i < hs2; i += 2 ) {

        ib = i + hs2 + 2;
        indices.push( ib, ib + 1, ib + 2,  ib + 1, ib + 3, ib + 2 );// back

    }

    for ( let i = 0; i < hs2; i += 2 ) {

        ib = i + hs2 + 2;
        indices.push( i, ib, ib + 2,          i,  ib + 2, i + 2 );// framing right
        indices.push( ib + 1, i + 1, i + 3,   ib + 1, i + 3, ib + 3 );// framing left

    }

    const sidePosCount = ( heightSegments + 1 ) * 2 ;
    g.setIndex( new THREE.BufferAttribute( new Uint32Array( indices ), 1 ) );
    g.setAttribute('position', new THREE.BufferAttribute( new Float32Array( sidePosCount * 2 * 3 ), 3 ) );

    g.calculatePositions = function( t ) {

        t = t % pi2;
        const leftEdge  = t => t < pi ? Math.cos( t ) : -1;
        const rightEdge = t => t < pi ? 1 : -Math.cos( t );
        φ = 0;

        for ( let i = 0; i < sidePosCount; i += 2 ) {

            // front
            g.attributes.position.setXYZ(  i    , radius * rightEdge( t ) * Math.sin( φ ), -radius * Math.cos( φ ), depth / 2 );
            g.attributes.position.setXYZ(  i + 1, radius * leftEdge( t )  * Math.sin( φ ), -radius * Math.cos( φ ), depth / 2 );
            //  back
            ib = i + hs2 + 2;
            g.attributes.position.setXYZ( ib    , radius * rightEdge( t ) * Math.sin( φ ), -radius * Math.cos( φ ), -depth / 2 );
            g.attributes.position.setXYZ( ib + 1, radius * leftEdge( t )  * Math.sin( φ ), -radius * Math.cos( φ ), -depth / 2 );
            φ += pi / heightSegments;

        }

        g.attributes.position.needsUpdate = vrai;
        g.computeVertexNormals( );

    }

    g.calculatePositions( phs * pi2 );
    return g;

}

</script>
</html>
 
15.02.2023  
 




p.specht

(Off Topic avec welchem Programme volonté eigentich cet Hochglanz-Werbefilme erzeugt, wohin glänzende Materialien comment Apfelsaft ou bien Schokolade dynamisch dans Behälter strömen?
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
15.02.2023  
 




HofK
p.specht (15.02.2023)
(Off Topic avec welchem Programme ...


là gibt es une Reihe très professioneller Software. qui Preise sommes rien pour privat.

et Firmen comment z.B. Mynd ( la fois googeln) nutzen sûrement verschiedene solcher Systeme.
 
24.02.2023  
 




HofK
avant einem l'an habe je à einer prozedural erzeugten Figur gearbeitet. Siehe plus dessus. Allerdings habe je cela seulement comme Studie gemacht et pas komplett ausgearbeitet.

je suis maintenant sur une droite professionelle et libre verfügbare variante gestoßen. elle travaille sans Skelett, benutzt mais aussi Kugelgelenke.

Siehe Github:  [...] 

j'ai vous erfolgreich dans mon derzeitiges projet integriert.

qui README ist vom Autor très umfangreich bebildert et Live-Beispielen versehen.

cette dynamische Kerl ist sehenswert.

 
24.02.2023  
 




HofK
un weiteres paralleles projet erfordert Zeit et peut wenig übrig.



un faute zeigte, dass chez komplexen Rechnungen qui Präzision zum Problem volonté peux. Siehe  [...] 



Es donnais une glänzende Analyse de PavelBoytchev, qui dans dernier Zeit très viele professionelle Lösungen sur Fragen im Forum postet. toujours avec très bien dokumentierten Codepens. là je avec qui recueil aus Zeitgründen pas hinterher viens, habe je dans qui recueil à gauche trop  [...]  et trop  [...]  hinzugefügt.

 
01.04.2023  
 




HofK
Mittlerweile habe je une stabile Grundkonstruktion pour cela projet.



Allerdings était es pas so simple comment gedacht.

une Frage chez discourse brachte mich quelque chose weiter [...] 

Dabei une schwer verdauliche source, qui Pavel Boytchev pour mich sinnvoll fand.
j'ai vous umgangen, siehe discourse !
 
20.06.2023  
 




HofK
comment vite qui Zeit vergeht.

depuis dem letzten Beitrag ist eh bien bereits un halbes l'an passé.

cela parallele projet ist une kommerzielle l'affaire et daher doit cela vorherige open source projet pausieren.

cela projet wird umfangreicher comme zunächst prévu, car à Geometrien sinnvoll erzeugen trop peut brauchte es encore une speziellen web-Editor. qui l'affaire ist encore dans travail.

Nebenbei suis je justement la fois en supplément gekommen zum Jahresende qui recueil qui Beispiele de discourse trop vervollständigen. là gibt es viele interessante Beispiele.

Insbesondere Pavel Boytchev ( Researcher and educator Faculty of Mathematics and Informatics, Sofia University  )
hat très viele lehrreiche Posts avec Beispielen im Forum verfasst.

Siehe  [...] 

aussi sur seiner page  [...]  trouver sich interessante Beispiele. aussi reines WebGL sans three.js.
 
30.12.2023  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

349.516 Views

Untitledvor 0 min.
Uwe ''Pascal'' Niemeier vor 14 Tagen
Manfred Barei vor 19 Tagen
R.Schneider05.03.2025
Roland Schäffer03.03.2025
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie