当前位置: 首页 > article >正文

Three.js 顶点着色学习

Three.js 顶点着色学习
https://threehub.cn/#/codeMirror?navigation=ThreeJS&classify=basic&id=gradientTriangle

在这里插入图片描述

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

const box = document.getElementById('box')

const scene = new THREE.Scene()

const camera = new THREE.PerspectiveCamera(75, box.clientWidth / box.clientHeight, 0.1, 1000)

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

const renderer = new THREE.WebGLRenderer()

renderer.setSize(box.clientWidth, box.clientHeight)

new OrbitControls(camera, renderer.domElement)

window.onresize = () => {

  renderer.setSize(box.clientWidth, box.clientHeight)

  camera.aspect = box.clientWidth / box.clientHeight

  camera.updateProjectionMatrix()

}

box.appendChild(renderer.domElement)

initObject();
function initObject() {
  let geometry = new THREE.BufferGeometry(); // 使用BufferGeometry

  let vertices = new Float32Array([
    0, 0, 0, // 顶点p1
    0, 200, 0, // 顶点p2
    200, 0, 0 // 顶点p3
  ]);

  geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 3));

  let colors = [
    1.0, 0.0, 0.0, // 颜色1 (红色)
    0.0, 1.0, 0.0, // 颜色2 (绿色)
    0.0, 0.0, 1.0  // 颜色3 (蓝色)
  ];

  // 创建顶点颜色属性
  let colorAttribute = new THREE.BufferAttribute(new Float32Array(colors), 3);
  geometry.setAttribute('color', colorAttribute);

  // 定义索引,创建三角形面
  let indices = [
    0, 1, 2 // 索引0, 1, 2 表示顶点数组中的p1, p2, p3
  ];
  let indexAttribute = new THREE.BufferAttribute(new Uint16Array(indices), 1);
  geometry.setIndex(indexAttribute);

  let material = new THREE.MeshBasicMaterial({
    vertexColors: true,
    side: THREE.DoubleSide,
    wireframe: false
  });

  let obj = new THREE.Mesh(geometry, material);
  scene.add(obj);
}
function animate() {

  requestAnimationFrame(animate)
  renderer.render(scene, camera)

}

animate()

/**
 * 名称: 渐变三角形
 * 作者: giser2017 https://gitee.com/giser2017
*/


http://www.kler.cn/a/451582.html

相关文章:

  • 优化 invite_codes 表的 SQL 创建语句
  • mysql 查询优化之字段建立全文索引
  • mysql数据库面试核心概念
  • 109.【C语言】数据结构之求二叉树的高度
  • 【YashanDB知识库】jdbc查询st_geometry类型的数据时抛出YAS-00101错误
  • SpringBoot核心:自动配置
  • 自动化测试工具Ranorex Studio(七十一)-一般故障排除
  • Vue 3.5 编写 ref 时,自动插入.Value
  • 第五篇:前后端如何“扯皮”——HTTP 在开发中的应用
  • 【Java数据结构】ArrayList类
  • 攻破 kioptix level 2靶机
  • Java:基于SSM框架的在线电影评价系统
  • o1 Pro模型架构揭秘与 Scaling Law 深度解析 | Claude 3.5 Opus、草莓训练、推理成本剖析
  • 功率器件的热设计基础(二)——热阻的串联和并联
  • java Redis 操作工具类封装(备忘)
  • CentOS设置静态IP教程(2024年12月20日)
  • 软件测试 | 招聘严峻期从面试无力感,到一天2个offer的一些经验分享(内附美团、字节、快手等面试题)
  • Python进程与线程:分布式进程
  • uniapp .gitignore
  • C语言:指针4(常量指针和指针常量及动态内存分配)
  • 创建学员信息修改页面
  • leetcode 3285 找到稳定山的下标
  • uni-app使用组件button遇到的问题
  • centos制作离线安装包
  • 阅读C语言代码的方法
  • 搜索系统常见指标和评估方式