IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> three.js文字模糊问题 -> 正文阅读

[JavaScript知识库]three.js文字模糊问题

https://github.com/jsmask/JumpGame/

今天看到这个jsmask大神写的跳一跳网页,基于three.js写的。
编译直接就能运行,着实兴奋了一下,但是也遇到一个问题。
就是源代码中的GAME OVER场景上面的字和图片十分的模糊
网上找了一圈,先是找到了整体优化的方法,但是整体优化后文字和图片的画面还不是很理想。

renderer.setSize(sizes.width, sizes.height)
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))

后来发现了CANVAS的图像优化方法,可以用来在这优化:
可以查看https://www.geeksforgeeks.org/how-to-sharpen-blurry-text-in-html5-canvas/
左边是优化后,右边是优化前。
在这里插入图片描述
基本原理是,通过canvas.content的scale方法把画布放大,在上面画放大过后的图片,然后再通过thress进行缩放,提高图片的分辨率。也就是画了个两倍大的图,然后再缩小回来。

优化后代码如下:

this.context = canvas.getContext('2d');

//核心
this.context.scale(scale, scale)
this.context.fillStyle = 'rgba(0,0,0,.7)';
this.context.fillRect(((width - 400) / 2) /scale, ((height - 400 ) / 2)/scale, 400 /scale, 400/scale);
this.context.fillStyle = '#eee';
this.context.font = '11px Georgia';

this.context.fillText('Game Over', ((width - 200) / 2 - 15) /scale, ((height - 200) / 2 + 55)/scale);
this.replay_btn = new Image();
this.replay_btn.onload = () => {
this.context.drawImage(this.replay_btn, ((width / 2 - 60) /2) /scale , ((height - 200) / 2 + 125)/scale, 240 /scale, 94/ scale);
}
this.replay_btn.src = img_replay;

//核心
this.geometry = new THREE.PlaneGeometry(30, 30 * aspect);

源代码如下:

 this.context = canvas.getContext('2d');
 this.context.fillStyle = 'rgba(0,0,0,.7)';
 this.context.fillRect((width - 200) / 2, (height - 200) / 2, 200, 200);
 this.context.fillStyle = '#eee';
 this.context.font = '22px Georgia';
 this.context.fillText('Game Over', (width - 200) / 2 + 45, (height - 200) / 2 + 55);
 this.replay_btn = new Image();
 this.replay_btn.onload = () => {
 this.context.drawImage(this.replay_btn, width / 2 - 60, (height - 200) / 2 + 125, 120, 47);
 }
 this.replay_btn.src = img_replay;
 
 this.geometry = new THREE.PlaneGeometry(60, 60 * aspect);

写完以后突然想起来以前有一次前端生成二维码图片的清晰度不够也是通过先生成放大图,然后再缩小显示的形式来完成的。这个和那个原理上是一样的。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:20:29  更:2022-04-24 09:23:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:29:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码