THREE.JSONLoader ile yüklenen bir nesneyi genel değişken olarak eklemenin mümkün olup olmadığını merak ediyordum? İdeal olarak, tüm yüklenen dokularım, malzeme oluşturma ve geometrinin kolay manipulasyon için komutumun en üstünde genel değişkenler olmasını isterim (güçlü 3D arka planım var ama js ve webGL'ye yeni). Ben kamuya açık bir şey bildirilen varsayıyorum - bir işlev için parametre olarak eklendikten sonra artık halka açık değil - bu durumda JSONLoader. Ancak, sadece bir var, değerini "çalışma" ilan etmeden adlandırma ama ben tuhaf THREE.min.js hatası alıyorum anlayamıyorum. Aşağıda benim kod yer verdik - Beni ne kadar kötü bildirmek için çekinmeyin - - bu bana stoolFrame yüklerken :)THEE.JSONLoader Genel değişken olarak nesne
//webGL
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
camera.position.set(0, 16, 25);
camera.rotation.x += -0.32;
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
cubeCamera = new THREE.CubeCamera(1, 1000, 256); // parameters: near, far, resolution
cubeCamera.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter; // mipmap filter
scene.add(cubeCamera);
///LOADERS
var loadTexture = new THREE.TextureLoader();
var loaderJs = new THREE.JSONLoader();
///TEXTURES
var skyTexture = loadTexture.load("textures/background.jpg");
var seatTexture = loadTexture.load("textures/abc_Diffuse.jpg");
///MATERIALS
var skyMaterial = new THREE.MeshBasicMaterial({
side: THREE.DoubleSide,
map: skyTexture
});
var frameMaterial = new THREE.MeshLambertMaterial({
//envMap: cubeCamera.renderTarget,
color: 0xffffff
});
var seatMaterial = new THREE.MeshLambertMaterial({
map: seatTexture
});
///GEOMETRY and MESHES
var frameGeo;
var skyGeo = new THREE.SphereGeometry(30, 30, 30);
var skySphere = new THREE.Mesh(skyGeo, skyMaterial);
scene.add(skySphere);
loaderJs.load("models/stoolFrame.js", function(){
frameGeo = new THREE.Mesh(frameGeo, frameMaterial);
frameGeo.scale.set(.5, .5, .5);
barStool.add(frameGeo);
});
loaderJs.load("models/stoolSeat.js", function (seatGeo){
seatGeo = new THREE.Mesh(seatGeo, seatMaterial);
seatGeo.scale.set(.5, .5, .5);
barStool.add(seatGeo);
});
var barStool = new THREE.Object3D();
scene.add(barStool);
var render = function() {
requestAnimationFrame(render);
barStool.rotation.y += 0.01;
frameGeo.visible = false;
cubeCamera.position.copy(frameGeo.position);
cubeCamera.updateCubeMap(renderer, scene);
frameGeo.visible = true;
renderer.render(scene, camera);
};
render();
Büyük yardımlar! frameMaterial = malzeme, eksik olduğum bulmacanın büyük bir anahtarıydı. –
@ ab3d_work cevabınız, yaşadığınız problemi çözdüyse, lütfen cevabımın solundaki onay işaretine tıklayarak işaretleyin. – micnil
Sadece biraz daha erken yaptım :) böylece malzeme = frameMaterial harika çalışıyor. Şimdi JSONLoader üzerinden yüklenen geometri üzerinde bir krom malzeme (cubeCamera kullanarak) oluşturmaya çalışıyorum. Küresel bir varyasyonda bildirilen geometrinin bir JSONLoader'daki global bir materyal kadar kolay olmadığını görüyorum. Global olması gerekiyor, bu yüzden render için cubeCamera'daki güncellemeyi arayabilirim. Herhangi bir fikir verebilirseniz, yine onun için büyük bir yardım olur! –