Three.js: r73: ничего не работает!?!

Созданный на 16 окт. 2015  ·  42Комментарии  ·  Источник: mrdoob/three.js

Рикардо,

Вы когда-нибудь тестировали какие-либо из предыдущих проектов на последней версии r73?
Ошибки всякие, ничего не работает!
Почему ты выпустил что-то подобное?

Question

Самый полезный комментарий

Создание релиза включает в себя несколько шагов. Иногда мое терпение / преданность делу заканчиваются ...: confused:
Кто угодно может обновить страницу миграции. Я хотел бы получить там некоторую помощь.

Недавно я столкнулся с этой проблемой, используя старую версию three.js.

Но после прочтения полученных вами комментариев и оскорблений, вместо того, чтобы просить о помощи, я просто хотел поблагодарить вас за поддержку three.js.

Ты супер преданный и терпеливый парень! : +1:

Все 42 Комментарий

Что не работает? Какие ошибки вы получаете? Я всегда убеждаюсь, что все примеры работают. Если что-то сломалось, мы должны добавить пример, который это проверяет.

Что не работает?

Ничего не работает !!!
Просто пример (для вас):
http://necromanthus.com/Test/html5/dog_r72.html
http://necromanthus.com/Test/html5/dog_r73.html
Ошибки:

  • THREE.MorphAnimMesh не определено
  • loader.load не является функцией

Почему вы выпустили что-то подобное ???

Ах! Понимаю.

Мы полностью заменили систему анимации, и SEA3D по-прежнему полагается на старую (я думаю, @sunag работает над обновлением).

А пока вам нужно включить старую систему анимации в свой проект:

<script src="js/MorphAnimMesh.js"></script>
<script src="js/loaders/collada/Animation.js"></script>
<script src="js/loaders/collada/AnimationHandler.js"></script>
<script src="js/loaders/collada/KeyFrameAnimation.js"></script>

Вы найдете файлы в папке examples .

Мы полностью заменили систему анимации

И снова ты напортачил с обратной совместимостью ... ОМГ

Во всяком случае, вот еще кое-что (без анимации и загрузчика):
http://necromanthus.com/Test/html5/koolmoves_r72.html
http://necromanthus.com/Test/html5/koolmoves_r73.html
Ошибки:

  • _typeface_js не определен
  • THREE.TextGeometry не является конструктором

Честно говоря, r73 - полный бардак и его надо убрать.
ура

Я полагаюсь на Three.js для ChiliPeppr уже около 1,5 лет. Сегодня утром кажется, что THREE.FontUtils не определен, поэтому рендеринг всех шрифтов в ChiliPeppr нарушен. Я предполагаю, что это та же проблема r73, о которой говорит

FontUtils и TextGeometry также были удалены из ядра.

Теперь вам нужно включить файлы отдельно:

<script src="js/geometries/TextGeometry.js"></script>
<script src="js/utils/FontUtils.js"></script>
<script src="fonts/helvetiker_regular.typeface.js"></script>

Я решил переместить их из ядра, потому что пользователю все равно пришлось включить *.typeface.js .

@RemusMar Мы не гарантируем обратную совместимость между версиями. Но мы добавляем код перехода, который уведомляет пользователя и поддерживает работу кода, когда и где мы можем.

Утилиты FontUtils и TextGeometry также были удалены из ядра.

Почему бы тебе не удалить все из ядра?
Ядро с НУЛЕВЫМИ байтами вообще не нужно загружать.

Мы не гарантируем обратную совместимость между версиями.

Это плохой ход, Рикардо.
Как я сказал с самого начала:

Обратная совместимость ОБЯЗАТЕЛЬНА в любом серьезном проекте.
Иначе все меньше и меньше людей будет интересоваться этим проектом.

ура

Почему бы тебе не удалить все из ядра?
Ядро с НУЛЕВЫМИ байтами вообще не нужно загружать.

Я так понимаю, ты эмоциональный парень. Тем не менее, вы остаетесь здесь, поэтому я также понимаю, что в конце дня вы сочтете проект полезным 😉

Обратная совместимость ОБЯЗАТЕЛЬНА в любом серьезном проекте.

Может, это не такой серьезный проект, как вы думаете? Я не Adobe, понимаете?

Иначе все меньше и меньше людей будет интересоваться этим проектом.

Меня не беспокоят люди, теряющие интерес. Вместо этого я сосредотачиваюсь на создании красивого API, который абстрагирует неприятности компьютерной графики, и в то же время я хочу, чтобы библиотека умещалась в сжатом архиве 100 КБ. Невозможно навсегда включать все функции, которые добавляют люди.

@RemusMar Обратная совместимость, если вы используете такие js-библиотеки, вы сможете самостоятельно исправить проблему, если что-то больше не поддерживается. Если нет, спрашивайте более дружно, все будут рады помочь. Если примеры сломаны, смело ремонтируйте ...

@RemusMar Одна из самых первых вещей, которые я узнал о three.js, когда я начал программировать 3D на JavaScript, был тот факт, что он не имеет обратной совместимости.

Я думаю, что в целом это не проблема, потому что мне нужно только убедиться, что в моем проекте я ссылаюсь на ту же версию three.js, на которой я построил свой код.

Политика не принимать во внимание обратную совместимость, безусловно, была основой для возможности разработки three.js таким динамичным образом, с такими фантастическими возможностями, до сих пор.

Это плохой ход, Рикардо

удивительно, как люди замечают это после 70+ ревизий)

Но чтобы добавить к сути, кто-то недавно написал мне «последний стабильный three.js - это r72», смеется. стабильного three.js нет. они не обновляют старые версии с исправлениями ошибок, вместо этого появляется новая версия с исправлениями _и_ критические изменения или новые ошибки.

Опять же, некоторые вещи волшебным образом работают через версии, даже если базовый код был перевернут. Как скины с использованием буферной геометрии)

Пока мы говорим о критических изменениях, меня больше всего бесят изменения json. У кого-то в 3dmax есть старый плагин экспорта, и я целую вечность редактирую json вручную, чтобы анимация работала.

Опять же, некоторые вещи волшебным образом работают через версии, даже если базовый код был перевернут. Как скины с использованием буферной геометрии)

Это потребовало некоторых усилий! 😅

Пока мы говорим о критических изменениях, меня больше всего бесят изменения json. У кого-то в 3dmax есть старый плагин экспорта, и я целую вечность редактирую json вручную, чтобы анимация работала.

Да. Анимация должна стать стабильной как можно скорее. Я считаю, что новая система анимации - отличный шаг в правильном направлении.

Похоже, этот образец не работает с учетом ваших изменений r73. http://threejs.org/docs/scenes/geometry-browser.html#TextGeometry

image

Ой! Всегда забывайте про образцы в документах ...

@mrdoob
Чем заменить "старый" класс THREE.Animation?
Есть ли примеры использования новой системы анимации? Не очень понятно, что нового на странице примеров.

Пока мы говорим о критических изменениях, меня больше всего бесят изменения json. У кого-то в 3dmax есть старый плагин экспорта, и я целую вечность редактирую json вручную, чтобы анимация работала.

Меня это тоже беспокоило. Я действительно не хочу, чтобы когда-либо приходилось реэкспортировать сотни моделей.

@jostschmithals
Политика не принимать во внимание обратную совместимость, безусловно, была основой для возможности разработки three.js таким динамичным образом, с такими фантастическими возможностями, до сих пор.

Это ложное заявление.
Фактически, постоянное нарушение обратной совместимости заставляет сторонних разработчиков отказываться от THREE.js
С другой стороны, новые функции и исправления ошибок не означают нарушения совместимости со старыми проектами.
Если Рикардо продолжит идти по этому пути, время покажет, прав я или нет.
ура

Меня это тоже беспокоило. Я действительно не хочу, чтобы когда-либо приходилось реэкспортировать сотни моделей.

Согласовано! Я считаю, что обратная совместимость очень важна для формата json. В любом случае это сделать несложно.

Согласовано! Я считаю, что обратная совместимость очень важна для формата json. В любом случае это сделать несложно.

Большой вздох облегчения =]

Кажется немного преждевременным выпускать сборку без обновления руководства по миграции, когда речь идет о критических изменениях. К счастью для меня, поскольку я слежу за этими досками, я знал об изменении анимации. Не могу поспорить, что все пользователи были подготовлены одинаково.

Я согласен с Ремусом в удалении вещей из ядра, чтобы сохранить ограничение на размер 100 КБ. Лично меня в 10000 раз больше заботит функциональность, чем сокращение нескольких байтов. Я знаю, что могу взять необходимые файлы из примеров, но это кажется своего рода ненужной головной болью (особенно при необходимости обновлять их каждый выпуск).

Во всяком случае, достаточно жалоб от меня. Если отбросить эти несколько критических замечаний, ребята, отличные рабочие!

Кажется немного преждевременным выпускать сборку без обновления руководства по миграции, когда речь идет о критических изменениях.

Создание релиза включает в себя несколько шагов. Иногда мое терпение / преданность делу заканчиваются ... 😕
Кто угодно может обновить страницу миграции. Я хотел бы получить там некоторую помощь.

Похоже, этот образец не работает с учетом ваших изменений r73. http://threejs.org/docs/scenes/geometry-browser.html#TextGeometry

Исправлена!

Где найти FontUtils в r74? Вроде убрали в r74 ...

@pjanik

Да, извините, API TextGeometry снова изменился. Но он вернулся в ядро!

Используйте http://threejs.org/examples/webgl_shadowmap.html в качестве ссылки.

var loader = new THREE.FontLoader();
loader.load( 'fonts/helvetiker_bold.typeface.js', function ( font ) {

    var textGeo = new THREE.TextGeometry( "THREE.JS", {

        font: font,

        size: 200,
        height: 50,
        curveSegments: 12,

        bevelThickness: 2,
        bevelSize: 5,
        bevelEnabled: true

    });

    textGeo.computeBoundingBox();
    var centerOffset = -0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x );

    var textMaterial = new THREE.MeshPhongMaterial( { color: 0xff0000, specular: 0xffffff } );

    var mesh = new THREE.Mesh( textGeo, textMaterial );
    mesh.position.x = centerOffset;
    mesh.position.y = FLOOR + 67;

    mesh.castShadow = true;
    mesh.receiveShadow = true;

    scene.add( mesh );

} );

Если кому-то интересно, вот как я загружал шрифт без асинхронного запроса, используя модуль NPM [email protected] и webpack: https://gist.github.com/pjanik/49c03c02c66341a26904
Если вы используете какой-либо другой инструмент сборки, ключевым моментом является загрузка файла шрифта в виде строки. Может быть, этот забавный синтаксический анализ можно будет извлечь в какой-нибудь вспомогательный метод в будущем?

Кстати, замечательно, что r74 включает /examples dir (в r73 нет), пожалуйста, продолжайте это делать. : wink: Наконец, я могу использовать только пакет three , больше никаких файлов внешних сценариев (я также использую examples/js/controls/OrbitControls ). Было бы еще круче, если бы примеры были опубликованы с использованием формата UMD, чтобы я мог напрямую требовать OrbitControls, не убирая глобальную зависимость THREE (не так уж важно, поскольку большинство инструментов сборки могут с этим справиться, но все же).

Благодаря!

или вы могли бы просто определить _typeface_js.loadFace локально и оценить его?

Да, извините, API TextGeometry снова изменился. Но он вернулся в ядро!

Это было мудрое решение Рикардо.
Требуется небольшое изменение синтаксиса загрузчика, но он обратно совместим.
r71: http://necromanthus.com/Test/html5/koolmoves.html
r74: http://necromanthus.com/Test/html5/koolmoves_r74.html
ура

Должны ли мы добавить обратную загрузку текстовой геометрии в ObjectLoader?

@fraguada ну, это не так просто, мы также должны обработать файл шрифта ...

FontUtil не определен в версии r74, которую я получаю: https://github.com/mrdoob/three.js/blob/master/build/three.js

Похоже, что это то же самое, что используется http://threejs.org/examples/webgl_shadowmap.html (кроме минифицированного), но я также не вижу его явно, включая FontUtils или гарнитуру ... но эта страница примера работает . (В то время как я по-прежнему получаю «_typeface_js is not defined»). Делаете ли вы что-то помимо того, что показано в вашем комментарии (пример кода 6 комментариев над этим)?

Документация должна обновляться по мере изменения API, это больше не применяется: http://threejs.org/docs/index.html#Reference/Extras.Geometries/TextGeometry

Было бы очень полезно иметь очень простой пример без всех нажатий клавиш, переключающих шрифты, толщину и скосы. Не то чтобы это тоже было нехорошо, но простой базовый вариант в ваших примерах сэкономил бы мне массу времени.

Этот пример мог бы очень помочь: http://threejs.org/docs/scenes/geometry-browser.html#TextGeometry , но когда вы смотрите на исходный код, он заканчивает тем, что рисует тор, поскольку он втягивает внешние ресурсы в на самом деле делать работу.

Я собрал этот простой пример на JSFiddle для всех, кто найдет эту ветку.
https://jsfiddle.net/287rumst/1/

Было бы очень полезно иметь очень простой пример

r75 и r76dev:
http://necromanthus.com/Test/html5/koolmoves.html

Всего два цента, потому что я тоже фанат обратной совместимости:

Если совместимость не может быть гарантирована, было бы неплохо иметь папку upgrade (или fixes ) в github, которая показывает старую версию и новую обработку. Ссылка.

Таким образом, программистам будет легко догнать изменения.

Я до сих пор использую r65 из-за таких «неизвестных» проблем, что у меня нет лишнего времени, чтобы потратить его на поиски способов их решения.

Привет всем, я только что перешел с r71 на r76 и открыл для себя новый animation.mixer. Поэтому, чтобы мои старые библиотеки json 3D-объектов работали, я скопировал MorphAnimMesh.js Animation.js AnimationHandler.js и KeyFrameAnimation.js в свою библиотеку javascript. Но теперь я получаю ошибку «иерархия данных не определена». Означает ли это, что мне нужно повторно экспортировать все мои бывшие объекты 3D json из Blender, или есть способ сохранить их работоспособность?

Здравствуйте, Некому помочь с "undefined data.hierarchy"?

Пожалуйста, используйте StackOverflow для помощи.

Создание релиза включает в себя несколько шагов. Иногда мое терпение / преданность делу заканчиваются ...: confused:
Кто угодно может обновить страницу миграции. Я хотел бы получить там некоторую помощь.

Недавно я столкнулся с этой проблемой, используя старую версию three.js.

Но после прочтения полученных вами комментариев и оскорблений, вместо того, чтобы просить о помощи, я просто хотел поблагодарить вас за поддержку three.js.

Ты супер преданный и терпеливый парень! : +1:

Обновление с r72 до r84 было большим трудом (~ 3 часа на один проект).

Полезно:

  • По проблеме шрифта: см. Исходный код http://necromanthus.com/Test/html5/koolmoves.html (вы больше не загружаете шрифт в HTML, а вместо этого в JS назначьте var, и это войдет в параметры. Следите за тем, чтобы назначать шрифт только ПОСЛЕ его загрузки)
  • см. сообщения об ошибках в консоли разработчика, они очень помогают, потому что даже говорят вам, что делать (хорошая работа @mrdoob )
  • также посетите https://github.com/mrdoob/three.js/wiki/Migration-Guide

Мой счастливый результат: https://www.matheretter.de/geoservant/en/


Подробно, что мне нужно было сделать с v72 по v84:

  1. Удалите из вашего html файла:

    <!-- OLD <script src="../../threejs/geometries/TextGeometry.js"></script>  -->
    <!-- <script src="../../threejs/helvetiker_regular.typeface.js"></script>  -->
    
  2. Запустите свою сцену threejs, вы, вероятно, получите:

    Uncaught TypeError: c.generateShapes is not a function
    
  3. Это происходит потому, что средство визуализации запускается без загрузки шрифта. Итак, давайте сначала загрузим шрифт, а затем вызовем средство визуализации при запуске:

    var text3dparams;
    var font_helvetiker;
    var fontload = new THREE.FontLoader();
    fontload.load( '/threejs/fonts/helvetiker_regular.typeface.json', function ( font ) {
        font_helvetiker = font;
        initStageText();
    
        // startup
        render(); 
    });
    
  4. Поскольку я устанавливаю новый текст во время выполнения, мне нужно определить объекты сцены на глобальном уровне, например:

    var text3d_r;
    var text3d_s;
    var text3d_h;
    var material1;
    var material_s;
    var material2;
    
  5. Пример функции запуска:

    function initStageText()
    {
        // 3D TEXT LABELS
        text3dparams = {
            font:           font_helvetiker, // font, important to change, before was "helvetiker", now the font directly!
            size:           0.3,    // size of the text
            height:         0.05,   // thickness to extrude text
            curveSegments:  2,      // number of points on the curves
            weight:         'normal',       // font weight (normal, bold)
            style:          'normal',       // font style  (normal, italics)
        }
    
        // label radius
        material1 = new THREE.MeshBasicMaterial({color: 0x009900});
        var text3dgeom_r = new THREE.TextGeometry('r = '+cone_radius, text3dparams);
        text3d_r = new THREE.Mesh(text3dgeom_r, material1);
        text3d_r.position.y = cone_height+0.1;
        text3d_r.position.z = cone_radius/2-0.35;
        text3d_r.rotation.y = -Math.PI/2;
        scene.add(text3d_r);
    }
    
  6. Я также получил ошибку THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead. Чтобы решить эту проблему, я удалил:

    gridHelper.setColors( new THREE.Color(gridcolor), new THREE.Color(gridcolor) );
    

и добавил (шаг сетки раньше был 1, затем нужно было установить значение 20, чтобы получить ту же сетку):

    var gridHelper = new THREE.GridHelper(gridplaneSize/2, gridstep, gridcolor, gridcolor);
  1. Затем мне нужно позаботиться об изменениях threejs (показано как предупреждение в консоли Chrome):

6.1 THREE.MeshBasicMaterial: 'ambient' is not a property of this material. Решено путем удаления ambient:color, из new THREE.MeshBasicMaterial();

6.2 Изменения освещения, просто замените, как указано в предупреждениях:

    THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.
    THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.
    THREE.Light: .shadowCameraNear is now .shadow.camera.near.
    THREE.Light: .shadowCameraFar is now .shadow.camera.far.
    THREE.Light: .shadowCameraFov is now .shadow.camera.fov.
    THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( 
    THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.

6.3 THREE.Light: .shadowDarkness has been removed. - удалить.

  1. Я также изменил настройку рендерера:

    // OLD 
    var renderer = Detector.webgl ? new THREE.WebGLRenderer({ antialias: true }) : new THREE.CanvasRenderer({ antialias: true });
    
    // NEW
    var renderer;
    if(Detector.webgl)
    {
        renderer = new THREE.WebGLRenderer({ antialias: true });
    }
    else
    {
        renderer = new THREE.CanvasRenderer({ antialias: true });
    }
    
  2. Мне также нужно было добавить белый цвет фона в настройку сцены:

    var scene = new THREE.Scene();          
    scene.background = new THREE.Color( 0xffffff );
    

Теперь мое приложение работает так же, как и в старой версии threejs. Удачи и вашему проекту!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

mrdoob picture mrdoob  ·  75Комментарии

RicoLiu picture RicoLiu  ·  100Комментарии

sunag picture sunag  ·  161Комментарии

WaltzBinaire picture WaltzBinaire  ·  67Комментарии

mrdoob picture mrdoob  ·  66Комментарии