Alright. So I commented out the lines that add group to the geometry.
I am still unable to export it in GLB format though. I tried GLTF and it worked perfectly but I need to export it in GLB format. Thus, I have made the changes. Unfortunately, I am still not able to see the GLB model in 3D Viewer. Am I going wrong somewhere in the below code?
import "./styles.css";
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
import { GLTFExporter } from "three/examples/jsm/exporters/GLTFExporter";
import { saveAs } from "file-saver";
var renderer, scene, camera;
init();
render();
function init() {
// renderer
renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setClearColor( 0x000000, 0.0 );
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
// scene
scene = new THREE.Scene();
// camera
camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 1000 );
camera.position.set( 15, 20, 30 );
scene.add( camera );
// controls
var controls = new OrbitControls( camera, renderer.domElement );
controls.addEventListener( 'change', render );
controls.minDistance = 10;
controls.maxDistance = 50;
// ambient
scene.add( new THREE.AmbientLight( 0xffffff, 0.1 ) );
// light
var light = new THREE.PointLight( 0xffffff, 1 );
camera.add( light );
// geometry
var geometry = new THREE.BoxBufferGeometry( 10, 10, 10 );
// geometry.clearGroups();
// geometry.addGroup( 0, 6, 0 );
// geometry.addGroup( 6, 6, 1 );
// geometry.addGroup( 12, 6, 2 );
// geometry.addGroup( 18, 6, 3 );
// geometry.addGroup( 24, 6, 4 );
// geometry.addGroup( 30, 6, 5 );
// geometry = geometry.toNonIndexed(); // Important for repro
// materials
var materials = [
new THREE.MeshBasicMaterial( { color: 0xFFFFFF, visible: true } ),
new THREE.MeshBasicMaterial( { color: 0xFF0000, visible: true } ),
new THREE.MeshBasicMaterial( { color: 0x00FF00, visible: true } ),
new THREE.MeshBasicMaterial( { color: 0x0000FF, visible: true } ),
new THREE.MeshBasicMaterial( { color: 0xFFFF00, visible: true } ),
new THREE.MeshBasicMaterial( { color: 0x00FFFF, visible: true } )
];
// mesh
var mesh = new THREE.Mesh(geometry, materials );
scene.add( mesh );
render();
}
function render() {
renderer.render( scene, camera );
}
function download() {
const exporter = new GLTFExporter();
exporter.parse(scene, function (gltfJson) {
console.log(gltfJson);
const jsonString = JSON.stringify(gltfJson);
console.log(jsonString);
// The following doesn't seem to work due to iframe sandboxing.
// But please save the gltf json from the Console to obtain the file.
const blob = new Blob([jsonString], { type: "application/json" });
saveAs(blob, "colored-square.glb");
console.log("Download requested");
}, { binary: true});
}
var btn = document.createElement("button");
document.body.appendChild(btn);
btn.textContent = "Download .gltf";
btn.onclick = download;