threeJS加载无贴图模型(亲测已实现)

学习threejs,dds格式图片文件贴图 本文详细介绍如何基于threejs在三维场景中实现dds格式图片文件贴图,亲测可用。希望能帮助到您。一起学习,加油!加油! 阅读详情

<template>

  <div class="earth-container">

    <div id="three-earth" ref="three-earth" />

  </div>

</template>

 

<script>

import * as THREE from 'three'

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'

export default {

  name: 'Earth',

  props: {

 

  },

  components: {

 

  },

  data () {

    return {

      container: null,

      render: null,

      camera: null,

      scene: null,

      raycaster: new THREE.Raycaster(),

      mouse: new THREE.Vector2(),

      controls: null

    }

  },

 

  mounted () {

    this.initRender()

    this.initScene()

    this.initCamera()

    this.initLight()

    this.addCube() 

    this.initControls()

 

    this.animate()

    window.onresize = this.onWindowResize

    window.addEventListener('click', this.onMouseClick, false)

  },

  methods: {

    addCube () {

      var that = this

   //   const loader = new GLTFLoader().setPath('static/cube/')

     const loader = new GLTFLoader()

      loader.load('http://33.33.39.35:8088/3dmodel/red.gltf', function (gltf) {

        gltf.scene.traverse(function (child) {

          if (child.isMesh) {

            /* child.scale.set( 0.1, 0.1, 0.1 ); */

            /* child.material.side = THREE.DoubleSide; */

 

            console.log(child)

            /* camera.lookAt( child.position ); */

 

            // TOFIX RoughnessMipmapper seems to be broken with WebGL 2.0

            // roughnessMipmapper.generateMipmaps( child.material );

          }

        })

 

        that.scene.add(gltf.scene)

 

        that.animate()

      })

    },

    initRender: function () {

      this.render = new THREE.WebGLRenderer({ antialias: true, alpha: true })

      this.render.setPixelRatio(window.devicePixelRatio)

      this.render.setSize(window.innerWidth, window.innerHeight)

 

      /* this.render.shadowMap.enabled = false

      this.render.shadowMap.type = THREE.PCFSoftShadowMap */

      this.render.outputEncoding = THREE.sRGBEncoding

      this.container = document.getElementById('three-earth')

      this.container.appendChild(this.render.domElement)

    },

    initCamera: function () {

      this.camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 100000)

      this.camera.position.set(0, 0, 0)

      /* this.camera.lookAt(new THREE.Vector3(0, 0, 0)) */

    },

    initScene: function () {

      this.scene = new THREE.Scene()

    },

    initLight: function () {

      /* const ambient = new THREE.AmbientLight(0xffffff)

      this.scene.add(ambient) */

      const dirLight = new THREE.DirectionalLight(0xffffff)

      dirLight.position.set(10, 0, 0)

      this.scene.add(dirLight)

    },

    initStats: function () {

      /* this.stats = new Stats()

      this.container.appendChild(this.stats) */

    },

    initControls: function () {

      this.controls = new OrbitControls(this.camera, this.render.domElement)

      /* this.controls.enableDamping = true

      this.controls.dampingFactor = 0.25

      this.controls.enableZoom = true */

      /* this.controls.autoRotate = true

      this.controls.autoRotateSpeed = 3

      this.controls.dampingFactor = true */

      this.controls.enableDamping = true

      this.controls.minDistance = 500

      this.controls.maxDistance = 2500

      this.controls.enablePan = false

      /* this.controls.panSpeed = 200

      this.controls.rotateSpeed = 2 */

    },

    animate: function () {

      requestAnimationFrame(this.animate)

      this.camera.lookAt(this.scene.position)

      this.render.render(this.scene, this.camera)

      this.controls.update()

    },

    randomColor: function () {

      var arrHex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']

      var strHex = '#'

      var index = ''

      for (var i = 0; i < 6; i++) {

        index = Math.round(Math.random() * 15)

        strHex += arrHex[index]

      }

      return strHex

    },

    onMouseClick: function (event) {

      event.preventDefault()

      this.mouse.x = ((event.clientX) / window.innerWidth) * 2 - 1

      this.mouse.y = -((event.clientY) / window.innerHeight) * 2 + 1

 

      // 通过鼠标点的位置和当前相机的矩阵计算出raycaster

      this.raycaster.setFromCamera(this.mouse, this.camera)

 

      // 获取raycaster直线和所有模型相交的数组集合

      var intersects = this.raycaster.intersectObjects(this.scene.children)

 

      // 将所有的相交的模型的颜色设置为红色,如果只需要将第一个触发事件,那就数组的第一个模型改变颜色即可

      if (intersects.length > 0) {

        intersects[0].object.material.color.set(0xff0000)

      }

    },

    onWindowResize: function () {

      this.camera.aspect = window.innerWidth / window.innerHeight

      this.camera.updateProjectionMatrix()

      this.render.setSize(window.innerWidth, window.innerHeight)

    }

  }

}

</script>

 

<!-- Add "scoped" attribute to limit CSS to this component only -->

<style scoped>

  #three-earth{

    width: 100%;

    height: 100%;

  }

.earth-container{

  width: 100%;

  height: 100%;

}

</style>

 

基于ThreeJS为3D模型添加贴图 基于ThreeJS为3D模型增加贴图示例描述与操作指南示例效果展示实现方式 示例描述与操作指南 当前示例用于展示如何在三维立体构件六个面上添加贴图。 示例效果展示 实现方式 添加贴图:在模型的多个面上添加材质图片 // 改变材质种类 const changeMaterial = () => { // 实例化一个加载器loader const loader = new THREE.T... 阅读详情

相关推荐

学习threejs,tga格式图片文件贴图

本文详细介绍如何基于threejs在三维场景中使用tga格式图片文件贴图,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 1992

THREE.js模型贴图不显示

THREE.js加载模型有时候贴图加载不出来,材质出现问题,整个模型为黑色,手动加载一个新的材质贴图即可,代码如下 var loader = new THREE.TextureLoader(); var texture = loader.load('xxx.png', function () { }); //material 类型自己选择 var material = new THREE.Mes...

qq_40245044的博客 7109

学习threejs,使用设置lightMap光照贴图创建阴影效果

本文详细介绍如何基于threejs在三维场景中设置lightMap光照贴图创建阴影效果,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 1626

three.js 如何解决orbitcontrols 右键拖拽和放大缩小功能失效的问题

前言 本文主要给大家介绍了关于Three.js利用orbitcontrols插件(轨道控制)控制模型交互动作的相关内容,以及在引入插件时候,碰到右键拖拽和滚轮放大缩小功能没法实现的解决方案。 首先引入插件,文件地址在官方案例的 examples/js/controls/OrbitControls.js。 import OrbitControls from 'three/examples/j...

蜗牛速度额的博客 1万+

threejs基础下:贴图资源加载与光照

优先更新个人博客,求关注~~ 个人博客:https://jinglecjy.github.io/ 加载器Loaders 加载器是threejs中很重要的一个步骤,可以用于加载纹理/图片/模型/音频等资源,不同的loader对应不同格式的文件,loaders通用流程如下: var loader = new THREE.[Loader](); /* * 函数名:.load(url, onLoa...

快去创造奇迹 4242

学习threejs,使用canvas更新纹理

本文详细介绍如何基于threejs在三维场景中使用canvas更新纹理,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 1805

使用Three.js 心得系列二 如何改变三维场景的GlTF模型的位置

如何改变三维场景的GlTF模型的位置? 如图,我的世界原点有个人物模型,这里人物模型时GLTF格式的3D模型,这个模型,暂不包含动画。 如何所示我想实现它在点击按钮时 沿着X轴方向前进如何做? 不说废话,直接上源码。 我这里把人人物的模型 起名字: main_mode const loader = new GLTFLoader().setPath( './01Images_Test/' ); loader.load( 'miner.gltf', function ( g...

个人的工作随笔和日记,主要作为一个记录风向平台 3720

ThreeJs法向贴图

皮肤的皱纹,砖墙表面的凹凸,衣服的褶皱,树皮的纹路… 这些丰富的细节在计算机的3D世界中,最常用的展现方式就是法相贴图了。 对于高模来说,如果精度足够高,近似认为一个面就是一个点,那么将其贴图揭下就是一张图片。 这张高模贴图上的每个点拥有一个法向量,反应出高模上的细节。 对于低模来说,一个面对应高模中的很多个面,每个面看作是一面镜子,将其贴图揭下来就是一张很多三角形镜子拼接的图,每个三角

u010664247的博客 7343

3dmax导出three.js使用的obj格式文件时缺少贴图

最近一直在研究使用three.js加载obj模型,遇到的很多问题,其中之一就是这个让人头大,模型/贴图/材质/渲染都没有问题,导出来的OBJ怎么就没有贴图了呢,经过一周折腾得到的答案,其实答案很简单,就是3dmax导出obj(含贴图),是不支持插件渲染器下的材质,只支持3dmax本身自带的默认扫描线渲染器下的材质。(ps:为什么插件渲染导不出来贴图,这个问题本人也在探究,如果有哪位大神解决了,请告知,不胜感激!)

lerayZhang的博客 6824

学习threejs,通过设置纹理属性来修改纹理贴图的位置和大小

本文详细介绍如何基于threejs在三维场景中通过设置纹理属性来修改纹理贴图的位置和大小,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 2652

学习threejs,局部纹理刷新,实现图片分块加载

本文详细介绍如何基于threejs在三维场景中局部纹理刷新,实现图片分块加载,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 1756

Threejs 加载模型贴图不显示,只显示黑色的模型,也没报404错误的解决方案

看看是不是坑爹的建模把颜色材质颜色设置成黑色了! 颜色贴图。默认为null。纹理贴图颜色由漫反射颜色.color调节。 贼坑

李二狗的博客 7652

学习threejs,设置envMap环境贴图创建反光效果

本文详细介绍如何基于threejs在三维场景中设置envMap环境贴图创建反光效果,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 1588

学习threejs,使用设置bumpMap凹凸贴图创建褶皱,实现贴图厚度效果

本文详细介绍如何基于threejs在三维场景中使用设置bumpMap凹凸贴图创建褶皱,实现贴图厚度效果,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 1766

学习threejs,导入STL格式的模型

本文详细介绍如何基于threejs在三维场景中导入STL格式的模型,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 2241

ADS2020与SystemVue2020Update1.0同机安装避坑指南:解决License冲突,实现EVM联合仿真

本文详细介绍了ADS2020与SystemVue2020 Update1.0同机安装的完整解决方案,重点解决License冲突问题,实现EVM联合仿真。通过合理的安装顺序、路径规划和License服务配置,确保两款EDA工具和谐共存,为射频与微波电路设计提供高效仿真环境。

weixin_30271335的博客 347

ThreeJS:模型加载与播放模型动画

ThreeJS:模型加载与播放模型动画

席木木的博客 4009

STM32CubeIDE无法连接STLinkV2的一个可能原因

前些日子买了个新的STLINKV2 , ( 老的被我家猫猫一泡尿送上西天了)刚开始还挺正常的, 后来有一天就突然间发现无法调试了.网上尝试了各种方法, 各种操作. 百度了好久. 最后好在我自己研究出来了.我使用的是 STM32CubeIDE 这个开发工具调试选项如下图其它的不需要修改, 然后点击下面的apply 按钮, 然后调试Debug, 提示 No STLink 如下图后来尝试了下载ST-LINK Utility 用它是可以正常连接STLink的, 然后也能正常进行升级操作.

走错路的程序员 9825

在ThreeJS中使用PNG实现透明贴图效果

ThreeJS是一个基于WebGL的开源库,使用起来十分方便。不过由于是开源,所以相关文档相当稀少,本人把在学习过程中遇到的一些问题及解决方法整理成一个专栏,希望对大家可以有所帮助! 在ThreeJS中如果直接把PNG贴图赋给材质,是无法在场景中正常显示的,效果如下图所示: 贴图是自己随便找的PNG图片,所以效果比较那个,大家不要介意。 现在说一下解决方法,就是在材质中设置透明...

X249125114的博客 3682

华为OD机试双机位C卷:流量波峰 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 流量波峰,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 流量波峰。

qq_45776114的博客 2445

C# 上位机内存泄漏排查指南:3 个工具 + 4 个技巧,从 GC 频繁到稳定运行 720 小时

C# 上位机内存泄漏排查的核心是「先定位泄漏存在,再追溯引用根源,最后修复验证通过「Visual Studio 诊断工具(快速定位)+ dotMemory(深度分析)+ PerfView(生产监控)」三个工具的配合,结合「复现场景、排查静态成员+事件、检查非托管资源、GC 日志验证」四个技巧,可高效解决绝大多数泄漏问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 735

three.js加载3d模型_Blender体验3D建模UV贴图导入至ThreeJS

回想起2017年初识Blender,被他的开源所吸引,而且Blender每发布一个新版本都会随之放出一段影片,用于测试新版本功能。上个月Blender发布2.8Beta版,最为明显的是用户界面的改变。迫不及待上手新版blender3D建模与UV贴图。上面这个卫星3D模型是我在2017年期间为某项目制作的,当时就是使用Blender做的建模和贴图。这个模型将和THREEJS配合用于在Web端呈现。上...

weixin_39951112的博客 2005

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 618
上一篇: vue页面引入three.js创造3d动画场景
下一篇: three.js加载有贴图的三维模型(亲测,已实现)
磊磊正正
博客等级 码龄15年 4837粉丝 226原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值