2012-05-11 2 views
1

json 파일을 사용하여 매우 복잡한 모델을 렌더링하려고합니다. json 파일의 크기는 40MB이므로 대용량 데이터이므로 모델을 캔버스에 렌더링 할 수 있습니다.WebGl 렌더링은 JSON 파일의 경우 매우 느립니다. JSON 파일의 크기 때문입니까?

이제 렌더링 문제는 매우 느리게 처리됩니다. 모델을 회전 시키거나 확대하려고하면 전체 브라우저가 멈추고 느려집니다.

나는 webgl에 새로운 무엇이 나는이 문제를 일으키는 지 모른다. 주변을 둘러 보니 아무 것도 찾지 못했습니다.

렌더링에 영향을 미치는 json 파일의 크기입니까? 성능 향상을 위해 어떻게해야합니까? 나는 이것을 언급해야한다, 그것은 그래픽 카드의 문제가 아니다. 바디 브라우저와 같은 것들은 매우 빠릅니다.

애니메이션으로 불린다 I이 방법 나 기능 렌더링

renderer = new THREE.CanvasRenderer(); 
renderer.setSize(window.innerWidth, window.innerHeight); 
container.appendChild(renderer.domElement); 

init을이 내부 하하고, 렌더링

loader = new THREE.JSONLoader(); 
loader.load('file.js', function (geometry) { 
    geometry.computeVertexNormals(); 
    mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial()); 
    scene.add(mesh); 
}); 

제이슨 로더 three.js를 사용하고()

function animate() { 
    requestAnimationFrame(animate); 
    render(); 
    stats.update(); 
} 

과 같이 메쉬를 회전하는 렌더 함수에서

,210
function render() { 
    mesh.rotation.x += (targetXRotation - mesh.rotation.x) * 0.05; 
    mesh.rotation.y += (targetYRotation - mesh.rotation.y) * 0.05; 
    renderer.render(scene, camera); 
} 
+0

IO 때문일 가능성이 큽니다. 40MB 파일을 읽기위한 IO 지연은 렌더링 속도가 느릴 정도로 높습니다. 또한 JSON이 아니라 JSON입니다. – Corbin

+0

몇 가지 코드, 특히 렌더링 방법을 알려주시겠습니까? 데이터에 버퍼를 사용하고 있습니까? – Matthias

+0

빠른 응답을 위해 고맙습니다.이 경우 json 파일을로드하는 효율적인 프로세스는 무엇입니까? 바디 브라우저조차도 거대한 데이터입니다. 그 뒤에있는 원리는 무엇입니까? Thanx @ Json 교정을위한 코빈 (불면 작업의 효과). – Vij

답변

2

당신은 "WebGL을"같은이 질문에 태그, 그래서 당신이 WebGL을 렌더러를 사용하고자하는 생각 : 대신 캔버스의

renderer = new THREE.WebGLRenderer(); 

하나

renderer = new THREE.CanvasRenderer(); 
2

그것은 40meg 파일의 구조에 달려 있습니다. 얼마나 많은 개별 모델이 있습니까? 더 많은 모델은 더 느리게 갈 것입니다.

모델은 무엇을 의미합니까?

좋아하는 모델링 패키지에 들어가서 2 개의 구체를 만들면 2 가지 모델이 있습니다. 1000 개의 구체를 만들면 각각 1000 개의 다각형을 말하며 수출 속도가 느려질 것입니다. 그러나 1000 개의 구형 모델을 1000 개의 구형 모델로 축소하여 다시 내보낼 수있는 방법을 찾으면 빠르게 실행됩니다.

드로잉 1 큰 것은 종종 1000 개의 작은 것들을 드로잉하는 것보다 빠릅니다.

+0

정말 고마워요. 캔버스 공간에서 렌더링하는 것은 문제였습니다. 이제는로드 한 후에 만로드하는 것이 좋습니다. 나는 Juan Mellado에게 똑딱 거리며, 내 문제를 해결했다. @gman 모델링 제안을 주셔서 감사합니다, 나는 항상 다음 트릭을 구현하기 전에이 트릭을 염두에 둘 것입니다. 사실 그것은 .stl에서 .obj 그리고 .js로 변환되는 단일 모델입니다. 그래서 저는 많은 폴리곤으로 구성된 단일 모델을 말할 것입니다, 그것은 두개골의 모델입니다. 내가 ur 개념을 잘못 이해했다면, 어떤 제안도 환영합니다. 도움을 요청하십시오. – Vij

+0

헤이 그만, 당신은 2^16 개 이상의 얼굴 성능이 현명 할 때 어떻게 작동합니까? 지오메트리를 수동으로 깨고 그리기 호출을 관리해야합니까, 아니면 무엇이든지 처리해야한다면 처리하십시오. – pailhead

+0

Perf는 무엇에 비례합니까? 2^16 정점을 그릴 필요가있는 경우 2 가지 옵션이 있습니다. 다중 그리기 호출 또는 인덱싱되지 않은 형상. 비 색인 지오메트리는 WebGL에서 2^16 정점으로 제한되지 않습니다. 나는 어느 것이 더 빠를 지 모른다. 그것은 [인덱스와 정점이 최적화 된] 방법 (https://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html)에 달려 있습니다. 대부분 나는 그것에 대해 걱정하지 않을 것이다. 내 모델을 자동으로 분할 한 다음 잊어 버릴 도구를 만들려고했습니다. – gman