ThreeJS-纹理旋转、重复(十一)

这篇具有很好参考价值的文章主要介绍了ThreeJS-纹理旋转、重复(十一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

旋转

 文档:three.js docs

ThreeJS-纹理旋转、重复(十一)

关键代码:

   //设置旋转中心,默认左下角

    docColorLoader.center.set(0.5,0.5);

    //围绕旋转中心逆时针旋转45度

    docColorLoader.rotation = Math.PI/4;

完整代码:

<template>

  <div id="three_div"></div>

</template>

  <script>

import * as THREE from "three";

import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";

export default {

  name: "HOME",

  components: {

    // vueQr,

    // glHome,

  },

  data() {

    return {};

  },

  mounted() {

    //使用控制器控制3D拖动旋转OrbitControls

    //控制3D物体移动

    //1.创建场景

    const scene = new THREE.Scene();

    console.log(scene);

    //2.创建相机

    const camera = new THREE.PerspectiveCamera(

      75,

      window.innerWidth / window.innerHeight,

      0.1,

      1000

    );

    //设置相机位置

    camera.position.set(0, 0, 10);

    //将相机添加到场景

    scene.add(camera);

    //添加物体

    //创建几何体

    const cubeGeometry = new THREE.BoxBufferGeometry(2, 2, 2);

    //纹理加载器

    const textureLoader = new THREE.TextureLoader();

    //纹理加载器加载图片

    const docColorLoader = textureLoader.load('1.webp');

    //纹理位移

    docColorLoader.offset.x = 0;

    //设置旋转中心,默认左下角

    docColorLoader.center.set(0.5,0.5);

    //围绕旋转中心逆时针旋转45度

    docColorLoader.rotation = Math.PI/4;

    //设置纹理重复模式

    //docColorLoader.wrapS = THREE.RepeatWrapping;

    //镜像重复

    // docColorLoader.wrapT = THREE.MirroredRepeatWrapping;

    //docColorLoader.wrapT = THREE.RepeatWrapping;

    //纹理重复 横向方向重复两次,纵向重复3次

   // docColorLoader.repeat.set(2,3);

    // let color = new THREE.Color(Math.random(), Math.random(), Math.random());

    const cubeMaterial = new THREE.MeshBasicMaterial({

        color: 0xffff00,

        transparent: true,

        opacity: 0.5,

        map: docColorLoader

      });

      //根据几何体和材质创建物体

      const mesh = new THREE.Mesh(cubeGeometry, cubeMaterial);

      //将物体加入到场景

      scene.add(mesh);

    //添加坐标轴辅助器

    const axesHepler = new THREE.AxesHelper(5);

    scene.add(axesHepler);

    //初始化渲染器

    const render = new THREE.WebGLRenderer();

    //设置渲染器的尺寸

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

    //使用渲染器,通过相机将场景渲染进来

    //创建轨道控制器,可以拖动,控制的是摄像头

    const controls = new OrbitControls(camera, render.domElement);

    //设置控制阻尼,让控制器有更真实的效果

    controls.enableDamping = true;

    //将webgl渲染的canvas内容添加到body上

    document.getElementById("three_div").appendChild(render.domElement);

    //渲染下一帧的时候就会调用回调函数

    let renderFun = () => {

      //更新阻尼数据

      controls.update();

      //需要重新绘制canvas画布

      render.render(scene, camera);

      //监听屏幕刷新(60HZ,120HZ),每次刷新触发一次requestAnimationFrame回调函数

      //但是requestAnimationFrame的回调函数注册生命只有一次,因此需要循环注册,才能达到一直调用的效果

      window.requestAnimationFrame(renderFun);

    };

    // window.requestAnimationFrame(renderFun);

    renderFun();

    //画布全屏

    window.addEventListener("dblclick", () => {

      if (document.fullscreenElement) {

        document.exitFullscreen();

      } else {

        //document.documentElement.requestFullscreen();

        render.domElement.requestFullscreen();

      }

    });

    //监听画面变化,更新渲染画面,(自适应的大小)

    window.addEventListener("resize", () => {

      //更新摄像机的宽高比

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

      //更新摄像机的投影矩阵

      camera.updateProjectionMatrix();

      //更新渲染器宽度和高度

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

      //设置渲染器的像素比

      render.setPixelRatio(window.devicePixelRatio);

      console.log("画面变化了");

    });

  },

  methods: {

    paush(animate) {

      animate.pause();

    },

  },

};

</script>

<style scoped lang="scss">

</style>

 效果图:

ThreeJS-纹理旋转、重复(十一)

重复

关键代码:

    //设置横向纹理重复模式

    docColorLoader.wrapS = THREE.RepeatWrapping;

    //设置纵向镜像重复

    //docColorLoader.wrapT = THREE.MirroredRepeatWrapping;

    //普通重复

    docColorLoader.wrapT = THREE.RepeatWrapping;

    //纹理重复 横向方向重复两次,纵向重复3次

    docColorLoader.repeat.set(2,3);

 完整代码:

<template>

  <div id="three_div"></div>

</template>

  <script>

import * as THREE from "three";

import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";

export default {

  name: "HOME",

  components: {

    // vueQr,

    // glHome,

  },

  data() {

    return {};

  },

  mounted() {

    //使用控制器控制3D拖动旋转OrbitControls

    //控制3D物体移动

    //1.创建场景

    const scene = new THREE.Scene();

    console.log(scene);

    //2.创建相机

    const camera = new THREE.PerspectiveCamera(

      75,

      window.innerWidth / window.innerHeight,

      0.1,

      1000

    );

    //设置相机位置

    camera.position.set(0, 0, 10);

    //将相机添加到场景

    scene.add(camera);

    //添加物体

    //创建几何体

    const cubeGeometry = new THREE.BoxBufferGeometry(2, 2, 2);

    //纹理加载器

    const textureLoader = new THREE.TextureLoader();

    //纹理加载器加载图片

    const docColorLoader = textureLoader.load('1.webp');

    //纹理位移

    docColorLoader.offset.x = 0;

    //设置旋转中心,默认左下角

    //docColorLoader.center.set(0.5,0.5);

    //围绕旋转中心逆时针旋转45度

    //docColorLoader.rotation = Math.PI/4;

    //设置横向纹理重复模式

    docColorLoader.wrapS = THREE.RepeatWrapping;

    //设置纵向镜像重复

    //docColorLoader.wrapT = THREE.MirroredRepeatWrapping;

    //普通重复

    docColorLoader.wrapT = THREE.RepeatWrapping;

    //纹理重复 横向方向重复两次,纵向重复3次

    docColorLoader.repeat.set(2,3);

    // let color = new THREE.Color(Math.random(), Math.random(), Math.random());

    const cubeMaterial = new THREE.MeshBasicMaterial({

        color: 0xffff00,

        transparent: true,

        opacity: 0.5,

        map: docColorLoader

      });

      //根据几何体和材质创建物体

      const mesh = new THREE.Mesh(cubeGeometry, cubeMaterial);

      //将物体加入到场景

      scene.add(mesh);

    //添加坐标轴辅助器

    const axesHepler = new THREE.AxesHelper(5);

    scene.add(axesHepler);

    //初始化渲染器

    const render = new THREE.WebGLRenderer();

    //设置渲染器的尺寸

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

    //使用渲染器,通过相机将场景渲染进来

    //创建轨道控制器,可以拖动,控制的是摄像头

    const controls = new OrbitControls(camera, render.domElement);

    //设置控制阻尼,让控制器有更真实的效果

    controls.enableDamping = true;

    //将webgl渲染的canvas内容添加到body上

    document.getElementById("three_div").appendChild(render.domElement);

    //渲染下一帧的时候就会调用回调函数

    let renderFun = () => {

      //更新阻尼数据

      controls.update();

      //需要重新绘制canvas画布

      render.render(scene, camera);

      //监听屏幕刷新(60HZ,120HZ),每次刷新触发一次requestAnimationFrame回调函数

      //但是requestAnimationFrame的回调函数注册生命只有一次,因此需要循环注册,才能达到一直调用的效果

      window.requestAnimationFrame(renderFun);

    };

    // window.requestAnimationFrame(renderFun);

    renderFun();

    //画布全屏

    window.addEventListener("dblclick", () => {

      if (document.fullscreenElement) {

        document.exitFullscreen();

      } else {

        //document.documentElement.requestFullscreen();

        render.domElement.requestFullscreen();

      }

    });

    //监听画面变化,更新渲染画面,(自适应的大小)

    window.addEventListener("resize", () => {

      //更新摄像机的宽高比

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

      //更新摄像机的投影矩阵

      camera.updateProjectionMatrix();

      //更新渲染器宽度和高度

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

      //设置渲染器的像素比

      render.setPixelRatio(window.devicePixelRatio);

      console.log("画面变化了");

    });

  },

  methods: {

    paush(animate) {

      animate.pause();

    },

  },

};

</script>

<style scoped lang="scss">

</style>

 效果图:

ThreeJS-纹理旋转、重复(十一)文章来源地址https://www.toymoban.com/news/detail-402683.html

到了这里,关于ThreeJS-纹理旋转、重复(十一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Three.js之顶点UV坐标、纹理贴图

    创建纹理贴图 … UV动画 注:基于Three.js v0.155.0 纹理贴图加载器:TextureLoader 纹理对象:Texture 颜色贴图属性.map 顶点UV坐标 圆形平面设置纹理贴图:CircleGeometry 设置阵列模式:THREE.RepeatWrapping 网格地面辅助观察:GridHelper 纹理对象.offset属性

    2024年02月08日
    浏览(42)
  • Three.JS教程5 threejs中的材质

    Three.js中的材质(Material)是实现引人注目的3D效果的关键组件之一。本篇博客中,我们将深入探讨Three.js中的材质类型、属性和用法。 在Three.js中,材质是应用于几何体(Geometry)的外观和纹理的规则。它们决定了对象在场景中如何反射光线、显示颜色、反射环境等。 Three.j

    2024年02月21日
    浏览(58)
  • 面向Three.js开发者的3D自动纹理化开发包

    DreamTexture.js 是面向 three.js 开发者的 3D 模型纹理自动生成与设置开发包,可以为 webGL 应用增加 3D 模型的快速自动纹理化能力。 图一为原始模型, 图二图三为贴图后的模型。提示词: city, Realistic , cinematic , Front view ,Game scene graph DreamTexture.js 基于 Three.js 和稳定扩散(stable dif

    2024年02月06日
    浏览(53)
  • 【THREE.JS学习(3)】使用THREEJS加载GeoJSON地图数据

    本文接着系列文章(2)进行介绍,以VUE2为开发框架,该文涉及代码存放在HelloWorld.vue中。 相较于上一篇文章对div命名class等,该文简洁许多。 接着引入核心库 其中,{OrbitControls}为控制器,加载后可以通过鼠标来移动加载数据的方向、放缩等 Three.js中的坐标系是以单位为米(

    2023年04月09日
    浏览(52)
  • threejs点击获取三维坐标(Three.js获取鼠标点击的三维坐标)

    绑定点击事件,通过 THREE.Raycaster 光线投射,用于确定鼠标点击位置上有哪些物体, raycaster.intersectObjects(scene.children) 返回点击位置上所有的物体的数组;我们用 var selected = intersects[0] 取第一个,也就是最前面的那个物体;在通过 selected.point 取点坐标

    2024年02月11日
    浏览(128)
  • 【js&threeJS】入门three,并实现3D汽车展示厅,附带全码

    首先放个最终效果图:   三维(3D)概念: 三维(3D)是一个描述物体在三个空间坐标轴上的位置和形态的概念。相比于二维(2D)只有长度和宽度的平面,三维增加了高度或深度这一维度 在三维空间中,我们使用三个独立的坐标轴来描述物体的位置。通常使用笛卡尔坐标系

    2024年02月11日
    浏览(130)
  • Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

    1 traverse (模型循环遍历方法) 2. THREE.TextureLoader(用于加载和处理图片纹理) 3. THREE.MeshLambertMaterial(用于创建材质) 4. getObjectByProperty(通过材质的属性值获取材质信息) 在上一篇 Three.js加载外部glb,fbx,gltf,obj 模型文件 的文章基础上加入onSetSystemModelMap (设置模型材质方法

    2024年02月13日
    浏览(54)
  • Three.js加载简单纹理贴图并应用到网格(凹凸贴图、法向贴图、移位贴图)

    纹理最基础的用法就是作为贴图被添加到材质上,当用这种方法创建网格时,网格的颜色就来源于纹理 UV贴图实质上就是指定模型上的哪一部分需要被映射到纹理的相应位置 可以用如下方法加载纹理 使用THREE.TextureLoader()从指定位置加载图片,图片格式可以是png,jpg或jpeg 纹理

    2024年02月05日
    浏览(64)
  • Three.js--》前端开发者掌握3d技术不再是梦,初识threejs

            这十年来 web 得到了快速的发展,随着 webgl 的普及,网页的表现能力越来越强大,网页上已经开始可以做出很多复杂的动画和精美的效果,还可以通过 webgl 在网页中绘制高性能的3d图形,别的不说,凡是入门程序员都离不开github这个网站,细心的人都会发现,gi

    2024年02月01日
    浏览(66)
  • three js模型旋转

    如何让立方体模型旋转到指定的面 父页面 效果:

    2024年02月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包