three.js学习:纹理Texture之平面纹理
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
<script src="js/three.min.js"></script>
<script src="js/stats.min.js"></script>
<script src="js/tweenjs.min.js"></script>
<style>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<canvas></canvas>
</body>
<script src="js/chapter/chapter6.1.js"></script>
</html>
chapter6.1.js
var scene, camera, renderer;
function init() {
//init scene
scene = new THREE.Scene();
//init renderer
var canvas = document.body.querySelector("canvas");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
renderer = new THREE.WebGLRenderer({
canvas: canvas,
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x000000, 1);
//init camera
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(0, 0, 100);
camera.up.set(0, 1, 0);
camera.lookAt(0, 0, 0);
//init light
var light = new THREE.PointLight(0xffffff);
light.position.set(0, 0, 100);
scene.add(light);
var geometry = new THREE.PlaneGeometry(60, 30);
var texture = new THREE.TextureLoader().load("images/a.jpg");
var material = new THREE.MeshLambertMaterial({
map: texture,
side: THREE.DoubleSide
});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
}
function animate() { //不是很明白为什么设置纹理需要用requestAnimationFrame
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
init();
animate();
单个平面的纹理贴图会覆盖整个Geometry的平面,如果要做出商标那样覆盖局部区域的贴图,便满足不了需求。对于这种情况,初步设想是新增一个小的平面作为商标贴图的区域,然后使该平面与原平面紧贴。如下图:紫色区域的正方体的一个面,左上角是另一个平面贴图。

代码实现:
var box = new THREE.BoxGeometry(25, 25, 25);
var boxMaterial = new THREE.MeshLambertMaterial({color: 0xDDA0DD});
var boxMesh = new THREE.Mesh(box, boxMaterial);
scene.add(boxMesh);
var plane = new THREE.PlaneGeometry(6, 4);
var texture = new THREE.TextureLoader().load("images/a.jpg");
var planeMaterial = new THREE.MeshLambertMaterial({
map: texture
});
var planeMesh = new THREE.Mesh(plane, planeMaterial);
planeMesh.translateX(-9);
planeMesh.translateY(10);
planeMesh.translateZ(15.6);//平移纹理贴图网格模型
scene.add(planeMesh);
three.js学习:纹理Texture之平面纹理的更多相关文章
- WebGL three.js学习笔记 6种类型的纹理介绍及应用
WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...
- OpenGL ES学习笔记(三)——纹理
首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...
- Directx11学习笔记【十七】纹理贴图
本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5596180.html 在之前的例子中,我们实现了光照和材质使得场景 ...
- LearnOpenGL学习笔记(二)纹理
开始学习OpenGL,参考的是著名的LearnOpenGL这个网站,在这里做一些总结性的记录,只是方便自己日后查找或者记录自己的一些拓展思考,关于OpenGL的具体内容请移步: https://lea ...
- Unity 用户手册用户指南二维纹理 (Texture 2D)
http://www.58player.com/blog-2327-953.html 二维纹理 (Texture 2D) 纹理 (Textures) 使您的 网格 (Meshes).粒子 (Parti ...
- LearnOpenGL学习笔记(五)——纹理
在设计物体表面时,很多时候我们不满足于一种颜色或者几种简单颜色,我们希望是丰富多彩的图案,或者说我们提供给它的图片.这样一个顶点一个顶点的去指定那是行不通了,我们不可能把所有顶点用数字去表达出来,必须 ...
- LearnOpenGL学习笔记(六)——纹理单元
#version 330 core out vec4 FragColor; in vec3 ourColor; in vec2 TexCoord; uniform sampler2D ourTextu ...
- 二维纹理 Texture 2D
Textures bring your Meshes, Particles, and interfaces to life! They are image or movie files that yo ...
- unity texture贴图纹理
文章内一些内容引用自作者:Aimar_Johnny http://blog.csdn.net/lzhq1982/article/details/75045358 导入png图片,默认显示如下 Text ...
随机推荐
- DP-动态规划算法实例:拿糖果问题
拿糖果问题 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数.这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走 ...
- C语言中基本的数据类型
一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码.为了用户的方便,C99标准的C语言硬件为我 ...
- 持续集成之Jenkins+Gitlab实现持续集成 [二]
持续集成之Jenkins+Gitlab实现持续集成 [二] 项目:使用git+jenkins实现持续集成 开始构建 General 源码管理 我们安装的是Git插件,还可以安装svn插件 我们将 ...
- XE5开发Android程序调用电话相关功能(短信息和电话) [转]
其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍. 1.短信息.很简单 方法a.不使用Intent ...
- Action<T> Delegate
来源:https://docs.microsoft.com/zh-cn/dotnet/api/system.action-1?view=netframework-4.7.2 Action<T&g ...
- C# 生成时间戳
编写网络程序中难免用到一些时间戳. 早前不知道哪里复制过一个代码,如下: public static string GetTimeStamp() { TimeSpan ts = DateTime.Ut ...
- 关于mybatis map foreach遍历
map 数据如下 Map<String,List<Long>>. 测试代码如下: public void getByMap(){ Map<String,List<L ...
- windows下怎么生成github的ssh公钥
windows下如何生成github的ssh公钥: 1.首先你要安装Git工具 2.在C:\Documents and Settings\Administrator\目录下,运行Git Bash he ...
- Java自定义数据验证注解Annotation
本文转载自:https://www.jianshu.com/p/616924cd07e6 Java注解Annotation用起来很方便,也越来越流行,由于其简单.简练且易于使用等特点,很多开发工具都提 ...
- 机器学习-Python中训练模型的保存和再使用
模型保存 BP:model.save(save_dir) SVM: from sklearn.externals import joblib joblib.dump(clf, save_dir) 模型 ...