Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.11.2020, 23:57
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Three.js и import файлов .glsl
Здравствуйте!

При попытке загрузить файл .glsl через import выдаёт такую ошибку
"Failed to load module script: The server responded with a non-JavaScript MIME type of "". Strict MIME type checking is enforced for module scripts per HTML spec."

Код загрузки:
import { ShaderMaterial, BackSide } from "../three/build/three.module.js";
import vertexShader from "./vertex.glsl";
import fragmentShader from "./fragments.glsl";


Подскажите, может знает кто, почему возникает эта ошибка и как её можно решить?
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2020, 01:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

В этом сообщении и указывается причина:

"Не удалось загрузить скрипт модуля: сервер ответил типом MIME, отличным от JavaScript. Для скриптов модуля в соответствии со спецификацией HTML применяется строгая проверка типов MIME."

Судя по сообщению, в качестве типа сервер вообще ничего не сообщает - пусто.
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2020, 01:32
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Сообщение от laimas Посмотреть сообщение
В этом сообщении и указывается причина:

"Не удалось загрузить скрипт модуля: сервер ответил типом MIME, отличным от JavaScript. Для скриптов модуля в соответствии со спецификацией HTML применяется строгая проверка типов MIME."

Судя по сообщению, в качестве типа сервер вообще ничего не сообщает - пусто.
Именно. Вот я и не пойму причину почему нет типа. Может вы знаете как его можно указать в загрузке этих файлов?
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2020, 02:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Biotoxsin
Вот я и не пойму причину почему нет типа
Ну так код сервера посмотреть, почему он не передает заголовков нужных.
Ответить с цитированием
  #5 (permalink)  
Старый 09.11.2020, 02:36
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Шейдерные программы это не JavaScript поэтому их нельзя загрузить с помощью import.

По факту это просто текстовые данные которые передаются в API функцию браузера. А уже браузер передает их драйверу видеокарты который их компилирует для текущей видеокарты и выполняет.
Ответить с цитированием
  #6 (permalink)  
Старый 09.11.2020, 12:41
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

MallSerg,
все правильно написал
в trree внешние ресурсы( текстуры, материалы) загружаем аяксом внешним запросом
далее, после загрузки , обрабатываем
или вставляем в тело документа
https://threejs.org/docs/#api/en/mat...ShaderMaterial
https://developer.mozilla.org/ru/doc...color_in_WebGL
<script id="shader-vs" type="x-shader/x-vertex">Код</script>
Ответить с цитированием
  #7 (permalink)  
Старый 09.11.2020, 12:56
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Сообщение от laimas Посмотреть сообщение
В этом сообщении и указывается причина:

"Не удалось загрузить скрипт модуля: сервер ответил типом MIME, отличным от JavaScript. Для скриптов модуля в соответствии со спецификацией HTML применяется строгая проверка типов MIME."

Судя по сообщению, в качестве типа сервер вообще ничего не сообщает - пусто.
Сообщение от MallSerg Посмотреть сообщение
Шейдерные программы это не JavaScript поэтому их нельзя загрузить с помощью import.

По факту это просто текстовые данные которые передаются в API функцию браузера. А уже браузер передает их драйверу видеокарты который их компилирует для текущей видеокарты и выполняет.
В Three.js их загружают именно что через import. В точности как я указал в примере.
Ответить с цитированием
  #8 (permalink)  
Старый 09.11.2020, 13:09
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Не понятно, где и когда загружается, и что используется... провангую )

https://discourse.threejs.org/t/how-...loader/10474/4

здесь смотреть raw-loader

https://webpack.js.org/loaders/raw-loader/
Ответить с цитированием
  #9 (permalink)  
Старый 09.11.2020, 13:26
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,753

Сообщение от Biotoxsin
В Three.js их загружают именно что через import. В точности как я указал в примере.
Примерчик киньте.
Даже если и случайно загрузится, то в vertexShader и fragmentShader точно ничего не будет.
Там могут быть только объекты, которые экспортируются из указанных модулей.
Ответить с цитированием
  #10 (permalink)  
Старый 09.11.2020, 14:16
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Сообщение от SuperZen Посмотреть сообщение
Не понятно, где и когда загружается, и что используется... провангую )

https://discourse.threejs.org/t/how-...loader/10474/4

здесь смотреть raw-loader

https://webpack.js.org/loaders/raw-loader/
Примерчик:

index.js
import * as THREE from '/three/build/three.module.js';
import loadTexture from "/texture-loader.js";
import loadModel from "/model-loader.js";
import BackfaceMaterial from "/backface-material";
import RefractionMaterial from "/refraction-material";


backface-material index.js
import { ShaderMaterial, BackSide } from "../three/build/three.module.js";
import vertexShader from "./vertex.glsl";
import fragmentShader from "./fragments.glsl";


refraction-material index.js
import { ShaderMaterial } from "../three/build/three.module.js";
import vertexShader from "./vertex.glsl";
import fragmentShader from "./fragments.glsl";
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение к Angular проекту Three.js вызывает ошибку сервере 404 Peter.ru Angular.js 2 15.10.2018 15:31
Как избежать ошибки по ограничению открытых файлов? Tipylja Node.JS 3 17.08.2018 19:43
Чтение и вывод данных из нескольких файлов Nikc174 Элементы интерфейса 7 15.06.2018 15:54
Миграция на Webpack 2 c Gulp yakutoc Сборка проекта, утилиты 4 03.02.2017 15:16
JSON в рендер Angular2 Alexander Belov Angular.js 6 04.01.2017 23:24