vue3+threejs新手从零开发卡牌游戏(三):尝试在场景中绘制一张卡牌

首先我们思考下,一张最简单的卡牌有哪些东西构成:卡牌样式卡牌数据。一张卡牌有正面和背面,有名称、属性、种族、攻击力等数据,我们先不考虑数据,先尝试在场景中绘制一张卡牌出来。

一、寻找卡牌素材

为了简单我直接去游戏王决斗链接官网上面找的卡牌素材,然后百度图片游戏王卡背,拿到卡背的素材(注:所有threejs相关的素材建议全放在public目录下,目录结构如下所示:

卡面:(无敌的)青眼白龙

卡背:

back目录下存放的是卡背图片,card目录下存放的是卡牌的正面

二、在场景中绘制几何体

这里我选择的是Box几何体,方便处理正面和背面不同的素材

根据threejs官方代码示例,我们在initScene方法中添加renderCard方法:

// 初始化场景
const initScene = () => {
  ...

  renderCard()
}
// 创建卡牌
const renderCard = () => {
  const geometry = new THREE.BoxGeometry( 1, 0.02, 1.4 ); 
  const material = new THREE.MeshBasicMaterial( {color: 0x00ff00} ); 
  const cube = new THREE.Mesh( geometry, material ); 
  scene.add( cube );
}

刷新页面展示如下:

一个绿色的几何体就出现在了场景里

三、使用TextureLoader加载素材图片

在threejs文档中找到TextureLoader的使用示例:

由于我们使用的是Box几何体,他本身有6个面,所以我们可以通过分别设置六个面的材质来渲染不同的图案(注:3和4两个面对应的是我们卡牌的正面和背面,其他几个面可以随便设置个颜色即可)我们修改下renderCard代码:

// 创建卡牌
const renderCard = () => {
  const geometry = new THREE.BoxGeometry( 1, 0.02, 1.4 ); 
  // const material = new THREE.MeshBasicMaterial( {color: 0x00ff00} ); 
  let materials = []
  // 卡牌正面
  const frontTexture = new THREE.TextureLoader().load("textures/card/YZ-01.png");
  // 卡牌背面
  const backTexture = new THREE.TextureLoader().load("textures/back/01.jpeg");

  const m1 = new THREE.MeshBasicMaterial({
    color: new THREE.Color("gray")
  });
  materials.push(m1)

  const m2 = new THREE.MeshBasicMaterial({
    color: new THREE.Color("gray")
  });
  materials.push(m2)

  const m3 = new THREE.MeshBasicMaterial({
    map: frontTexture
  });
  materials.push(m3)

  const m4 = new THREE.MeshBasicMaterial({
    map: backTexture
  });
  materials.push(m4)

  const m5 = new THREE.MeshBasicMaterial({
    color: new THREE.Color("gray")
  });
  materials.push(m5)

  const m6 = new THREE.MeshBasicMaterial({
    color: new THREE.Color("gray")
  });
  materials.push(m6)

  const cube = new THREE.Mesh( geometry, materials ); 
  scene.add( cube );
}

四、刷新页面后效果如下:

旋转后可以看到背面

至此,我们成功在场景中绘制了一张卡牌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478463.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024第二届经济管理、贸易与信息技术创新国际会议(ICEMITI2024)

2024第二届经济管理、贸易与信息技术创新国际会议(ICEMITI2024) 会议简介 2024第二届经济管理、贸易与信息技术创新国际会议(ICEMITI2024)将在中国郑州举行。这是一个重要的学术会议,旨在讨论当前经济管理、贸易和信…

python中类的导入与使用

1、类的介绍 与C中面向对象思想类似,有时候为了方便,需要专门创建一个类,将相关的函数全部写入到该类中,方便后续创建对象,再使用类中函数。那么如何创建完类,在其他文件中使用类中函数,这是这篇…

Design Script 官方案例解析3:函数

在本练习中,我们将创建一个通用定义,该定义将通过输入的点列表创建球体。这些球体的半径由每个点的 Z 特性驱动。 首先从 0 到 100 的十个值范围开始。将这些值插入 Point.ByCoordinates 节点,以创建对角线。 创建代码块,然后使用一行代码引入定义:def sphereByZ(inputPt)…

“找不到msvcr100.dll”或“msvcr100.dll丢失”的多种解决方法分享

当计算机系统中msvcr100.dll文件发生丢失时,导致某些应用程序无法正常运行。msvcr100.dll是Microsoft Visual C Redistributable Package的一部分,对于许多基于Windows操作系统的应用程序正常运行至关重要。小编将介绍5种解决msvcr100.dll丢失问题的方法…

LeetCode-热题100:17.电话号码的字母组合

题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入: digits “23” 输出&a…

云打印和无线打印有什么区别?

近段时间,云打印的概念越来越火热,而与此同时,无线打印也逐渐被大家所接受。那么云打印和无线打印有什么区别?今天带大家来了解一下。 云打印和无线打印有什么区别? 想要了解云打印和无线打印的区别,首先我…

org.springframework.boot:type=Admin,name=SpringApplication异常

javax.management.InstanceNotFoundException: org.springframework.boot:typeAdmin,nameSpringApplication 问题描述: IDEA 新建 SpringBoot 项目,启动时后台报错: javax.management.InstanceNotFoundException: org.springframework.boot…

图论必备:Dijkstra、Floyd与Bellman-Ford算法在最短路径问题中的应用

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:アンビバレント—Uru 0:24━━━━━━️💟──────── 4:02 🔄 ◀️ ⏸ ▶️ ☰ …

电脑文件msvcp100.dll丢失原因,如何快速修复msvcp100.dll

电脑文件msvcp100.dll丢失原因,最近有朋友在问这个,显然会问这个的人,一般都是遇到了msvcp100.dll丢失的问题了,今天我们就来详细的给大家说说msvcp100.dll这个文件吧,我们只有了解了msvcp100.dll这个文件,…

uniapp 云开发省钱之调整函数执行内存大小

我这个5块钱一个月的服务空间配置: 现在还只有少量的用户和自己测试之用,目前消耗的情况: 云函数的使用量还是挺高的,目前还是正好能覆盖一个月的使用量,等用户量上来肯定是不行的,所以得想想办法压榨一下云…

Docker 笔记(七)--打包软件生成镜像

目录 1. 背景2. 参考3. 文档3.1 使用docker container commit命令构建镜像3.1.1 [Docker官方文档-docker container commit](https://docs.docker.com/reference/cli/docker/container/commit/)Description(概述)Options(选项)Exa…

软考 网络工程师 每日学习打卡 2024/3/21

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论,在此基础上深入理解网络安全协议的工作原理,并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

一触即发,全栈联动:使用Docker Compose部署Spring Boot应用+MySQL+Redis实战指南

在云原生时代的快车道上,Docker Compose无疑是那辆助您疾驰的豪华跑车,它凭借其简洁高效的YAML配置文件,让您能够轻松部署和管理包含Spring Boot应用、MySQL数据库以及Redis缓存服务在内的完整堆栈。本文将深入浅出地引导您通过一个docker-co…

蓝桥杯:Python基础学习一

目录 一、遍历列表 1.使用for 循环和 enumerate()函数实现 2.案例代码 二、对列表进行统计和计算 1.统计数值列表的元素和 2.案例代码 三、对列表进行排序 1.使用列表对象的sort()方法 2.使用内置的 sorted()函数实现 四、列表推导式 1.从列表中选择符合条件的元素组…

WMI接口设计实现

WMI是Windows操作系统管理数据和操作的基础设施,系统管理员可以使用VB Script、PowerShell及Windows API(C、C#等)管理本地或远程计算机。 使用WMI框架应用程序可以直接访问EC RAM、 I/O端口、Memory地址、寄存器、Setup NV设定值&#xff0c…

unicloud 云函数 介绍及使用

普通云函数 callFunction方式云函数,也称之为普通云函数。 uni-app的前端代码,不再执行uni.request联网,而是通过uniCloud.callFunction调用云函数。 callFunction方式避免了服务器提供域名,不暴露固定ip,减少被攻击…

京东商品详情页数据抓取:探索背后的技术与合法途径

京东的商品详情页面数据通常是通过其API进行获取的,但是京东的API并不是公开的,需要注册京东开放平台并获取相应的API密钥。此外,直接爬取京东网站的数据可能违反了京东的服务条款,并且可能涉及到法律问题。 如果你确实有合法的需…

提升商品销量必备!淘宝商品评论电商API接口全解析

评论是电商销售中至关重要的一环,它能直接影响到商品销量。淘宝商品评论电商API接口的全面了解和合理的应用,将成为提升销量的利器。联讯数据将从不同角度详细解析淘宝商品评论电商API接口,为您揭示成功提升商品销量的关键。 淘宝商品评论电…

手写简易操作系统(十四)--内存管理系统

前情提要 前面我们实现了一个简单的C库,现在我们将实现一个内存池。 之前我们的内存都是自己规划的,我们需要 0xc0001500 这个地址,就将程序放在哪儿。但是程序多了怎么办?还需要我们自己去一个一个安排位置吗,有一块…

四、分布式锁之自定义分布式锁

1、基本原理和实现方式对比 分布式锁:满足分布式系统或集群模式下多个进程可见并且互斥的锁。分布式锁的核心思想就是多线程都使用同一把锁,实现程序串行执行。 分布式锁需要具备的条件: 特性含义可见性多个线程都能感知到变化互斥性分布…