1

我正在尝试将 THREE.js 与 kotlin/JS 一起使用。到目前为止它工作得很好,但是,我在如何导入 gLTFLoader 方面遇到了困难。文档说我应该这样做:

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';

在科特林

@file:JsModule("three")
@file:JsNonModule

在文件的开头工作。

这个

@file:JsModule("three/examples/jsm/loaders/GLTFLoader")
@file:JsNonModule
package mypackage

import org.w3c.xhr.XMLHttpRequest

external class GLTFLoader() {
    fun load(url: String, onLoad: (GLTF) -> Unit, onProgress: (XMLHttpRequest) -> Unit = definedExternally, onError: (dynamic) -> Unit = definedExternally)
}

external class GLTF {
    val scene: Group
}

不起作用。和

@file:JsModule("@three/examples/jsm/loaders/GLTFLoader")

也不起作用。在这两种情况下,我得到

找不到模块:错误:无法解析“/my_project_dir/build/js/packages/z-index/kotlin”中的“@three/examples/jsm/loaders/GLTFLoader”

所需的文件在 /my_project_dir/build/js/node_modules/three/examples/jsm/loaders/GLTFLoader.js Three.js 的主文件,显然可以找到,在 /my_project_dir/build/js/node_modules/三/src/Three.js。

如何进行所需的导入?

4

1 回答 1

1

您应该使用 require for 语句,如 three.kt 中的语句,定义您的定义

@file:JsModule("three")
@file:JsNonModule
package mypackage

import org.w3c.xhr.XMLHttpRequest

external interface ThreeGLTFLoader() {
    fun load(url: String, onLoad: (GLTF) -> Unit, onProgress: (XMLHttpRequest) -> Unit = definedExternally, onError: (dynamic) -> Unit = definedExternally)
}

external interface GLTF {
    val scene: Group
}

然后在three.dsl.kt中定义

val GLTFLoader : ThreeGLTFLoader = require("three/examples/jsm/loaders/GLTFLoader")

现在你可以使用 GTFLLoader

于 2020-04-18T04:51:35.683 回答