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 );
}

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

旋转后可以看到背面

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【考研数学】如何打牢基础?刷1800/1000/880/660还是教材?

如果想要用课后题来复习的话,可以从网上找一份复习题单来对照着做,这样可以把一些非重点内容忽略过去,提高我们复习的效率。 如果备考考研数学的话,专门的练习册更好一些。因为课后习题同类型的题目比较少,对于总结能…

持续领跑!腾讯云NDR再获Gartner®认可

近日,国际研究机构Gartner发布《Competitive Landscape:Network Detection and Response》(以下简称“报告”),腾讯被列为NDR案例厂商(NDR for SaaS and Cloud Identity Applications)。 腾讯云…

需求:JSON数据显示null值或者不显示null值

使用hutool的工具类 import cn.hutool.json.JSON; import cn.hutool.json.JSONConfig; import cn.hutool.json.JSONUtil;public class Main {public static void main(String[] args) {String sss "{\"1\":\"a\",\"2\":null}";// 不…

【vue-小知识】var、let 和 const之间的区别

文章目录 结论1、重复定义变量名var:允许重复定义变量名let和const:不可以重复定义变量名 2、修改值var:允许修改值let:允许修改值const:不允许修改值,会报错 3、变量提升var : 支持变量提升let和const&…

程序猿成长之路之番外篇——矩阵算法

今天在复习线性代数知识的过程中,用java语言简单实现了一下矩阵算法。 数学知识回顾 1.什么是矩阵 在数学领域,矩阵就像一个表格,将数据排放进去,形成一个矩形。我们习惯用一个大括号把矩阵内的数据包括进来。 1.矩阵 在数学领域…

Linux系统部署DolphinScheduler任务调度系统并实现无公网IP远程访问

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问,结合内…

黑马现有java课程框架及其功能梳理

目录 高并发相关提高通信效率Netty作用:哪些框架使用它: ChannelChannelHandler 和 ChannelPipelineEventLoop 和 EventLoopGroup**涉及的名词解释:**NIOSocketNginx 高并发相关 主要用来解决IO密集型程序(大量文件读写&#xff…

python矢量算法-三角形变化寻找对应点

1.算法需求描述 现有随机生成的两个三角形A与B,在三角形A中存在Pa,使用算法计算出三角形B中对应的点Pb 2.python代码 import numpy as np # 计算三角形A的面积 def area_triangle(vertices): return 0.5 * np.abs(np.dot(vertices[0] - vertices[…

大数据架构设计

本博客地址:https://security.blog.csdn.net/article/details/136657478 一. 基本概念 1、解决传统数据架构无法及时响应用户请求的常用解决方法: ● 增加异步处理队列,通过工作处理层批量处理异步处理队列中的数据修改请求。 ● 建立数据库…

策略分析是什么?一文说清策略分析的方方面面!附10款策略分析必备模板!

在日益激烈的商业竞争环境中,有效的策略分析不仅能帮助企业全面了解自身的优势与劣势,同时也能提供决策制定的关键依据。一个优质的策略分析报告能帮助企业从宏观与微观两个层面洞察市场动态,掌握竞争对手信息,以及制定未来的战略…

C语言复杂度(个人笔记)

时间复杂度主要衡量一个算法的运行快慢. 空间复杂度主要衡量一个算法运行所需要的额外空间. 时间复杂度 算法中的基本操作的执行次数,为算法的时间复杂度. 只需要大概执行次数,我们使用大O的渐进表示法。(看谁对数学表达式的影响最大) 空间复杂度 是…

2.Redis有五种主要的数据类型

Redis有五种主要的数据类型 String(字符串):String类型是最简单的数据类型,可以存储任意类型的数据,例如整数、浮点数、字符串等。String类型支持一些基本的操作,如设置值、获取值、增减值等。 Hash&#…

杂记8---多线激光雷达与相机外参标定

背景:本人开源的标定程序,提供大家参考学习 基于棋盘格的多线激光雷达和鱼眼/针孔模型相机外参标定的程序 前言 标定数据,只需要一个棋盘格标定板。把标定板放置lidar 与camera 共视区域,拜拍几个pose进行采集。 基于简谐原则…

webpack5零基础入门-12搭建开发服务器

1.目的 每次写完代码都需要手动输入指令才能编译代码,太麻烦了,我们希望一切自动化 2.安装相关包 npm install --save-dev webpack-dev-server 3.添加配置 在webpack.config.js中添加devServer相关配置 /**开发服务器 */devServer: {host: localhos…

布隆过滤器原理介绍和典型应用案例

整理自己过去使用布隆过滤器的应用案例和理解 基本介绍 1970年由布隆提出的一种空间效率很高的概率型数据结构,它可以用于检索一个元素是否在一个集合中,由只存0或1的位数组和多个hash算法, 进行判断数据 【一定不存在或者可能存在的算法】 如果这些…

内容检索(2024.03.22)

随着创作数量的增加,博客文章所涉及的内容越来越庞杂,为了更为方便地阅读,后续更新发布的文章将陆续在此汇总并附上原文链接,感兴趣的小伙伴们可持续关注文章发布动态! 本期更新内容: 1. 真实案例分享--E…

C#,人工智能,机器学习,聚类算法,训练数据集生成算法、软件与源代码

摘要:本文简述了人工智能的重要分支——机器学习的核心算法之一——聚类算法,并用C#实现了一套完全交互式的、可由用户自由发挥的,适用于聚类算法的训练数据集生成软件——Clustering。用户使用鼠标左键(拖动)即可生成任意形状,任意维度,任意簇数及各种数据范围的训练数…

【python】flask请求钩子,主动抛出异常与异常捕获

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

综合实验---Web---进阶版

目录 实验配置: 1.PHP调整主配置文件时,修改文件内容 1.原内容调整(在编译安装的情况下) 2.调整如下 3.没有调整的,根据之前配置就行 2.配置Nginx支持PHP解析 1.原内容如下 2.调整如下 3.验证PHP测试页 1.原内容如下 2.调整如下 4…

Vant4:自动导入样式无效问题

今天前端小伙伴使用了Vant4,发现了一个奇怪的问题:按照Vant官方文档,按需引入组件样式(Vite 的项目): 安装插件 # 通过 npm 安装 npm i vant/auto-import-resolver unplugin-vue-components unplugin-aut…