Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Three.js и import файлов .glsl (https://javascript.ru/forum/misc/81319-three-js-i-import-fajjlov-glsl.html)

Biotoxsin 08.11.2020 23:57

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";


Подскажите, может знает кто, почему возникает эта ошибка и как её можно решить?

laimas 09.11.2020 01:11

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

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

Судя по сообщению, в качестве типа сервер вообще ничего не сообщает - пусто.

Biotoxsin 09.11.2020 01:32

Цитата:

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

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

Судя по сообщению, в качестве типа сервер вообще ничего не сообщает - пусто.

Именно. Вот я и не пойму причину почему нет типа. Может вы знаете как его можно указать в загрузке этих файлов?

laimas 09.11.2020 02:19

Цитата:

Сообщение от Biotoxsin
Вот я и не пойму причину почему нет типа

Ну так код сервера посмотреть, почему он не передает заголовков нужных.

MallSerg 09.11.2020 02:36

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

По факту это просто текстовые данные которые передаются в API функцию браузера. А уже браузер передает их драйверу видеокарты который их компилирует для текущей видеокарты и выполняет.

Vlasenko Fedor 09.11.2020 12:41

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>

Biotoxsin 09.11.2020 12:56

Цитата:

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

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

Судя по сообщению, в качестве типа сервер вообще ничего не сообщает - пусто.

Цитата:

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

По факту это просто текстовые данные которые передаются в API функцию браузера. А уже браузер передает их драйверу видеокарты который их компилирует для текущей видеокарты и выполняет.

В Three.js их загружают именно что через import. В точности как я указал в примере.

SuperZen 09.11.2020 13:09

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

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

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

https://webpack.js.org/loaders/raw-loader/

voraa 09.11.2020 13:26

Цитата:

Сообщение от Biotoxsin
В Three.js их загружают именно что через import. В точности как я указал в примере.

Примерчик киньте.
Даже если и случайно загрузится, то в vertexShader и fragmentShader точно ничего не будет.
Там могут быть только объекты, которые экспортируются из указанных модулей.

Biotoxsin 09.11.2020 14:16

Цитата:

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

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";


Часовой пояс GMT +3, время: 15:42.