WebGL简易教程(十一):纹理

基于《WebGL简易教程(九):综合实例:地形的绘制》中的JS代码进行改进:

// 顶点着色器程序507383170 var VSHADER_SOURCE = ‘attribute vec4 a_Position;\n‘ + //位置 ‘attribute vec4 a_Color;\n‘ + //颜色 ‘uniform mat4 u_MvpMatrix;\n‘ + ‘varying vec4 v_Color;\n‘ + ‘varying vec4 v_position;\n‘ + ‘void main() {\n‘ + ‘ v_position = a_Position;\n‘ + ‘ gl_Position = u_MvpMatrix * a_Position;\n‘ + // 设置顶点坐标 ‘ v_Color = a_Color;\n‘ + ‘}\n‘; // 片元着色器程序 var FSHADER_SOURCE = ‘precision mediump float;\n‘ + ‘uniform vec2 u_RangeX;\n‘ + //X方向范围 ‘uniform vec2 u_RangeY;\n‘ + //Y方向范围 ‘uniform sampler2D u_Sampler;\n‘ + ‘varying vec4 v_Color;\n‘ + ‘varying vec4 v_position;\n‘ + ‘void main() {\n‘ + ‘ vec2 v_TexCoord = vec2((v_position.x-u_RangeX[0]) / (u_RangeX[1]-u_RangeX[0]),1.0-(v_position.y-u_RangeY[0]) / (u_RangeY[1]-u_RangeY[0]));\n‘ + ‘ gl_FragColor = texture2D(u_Sampler,v_TexCoord);\n‘ + ‘}\n‘; //定义一个矩形体:混合构造函数原型模式 function Cuboid(minX,maxX,minY,maxY,minZ,maxZ) { this.minX = minX; this.maxX = maxX; this.minY = minY; this.maxY = maxY; this.minZ = minZ; this.maxZ = maxZ; } Cuboid.prototype = { constructor: Cuboid,CenterX: function () { return (this.minX + this.maxX) / 2.0; },CenterY: function () { return (this.minY + this.maxY) / 2.0; },CenterZ: function () { return (this.minZ + this.maxZ) / 2.0; },LengthX: function () { return (this.maxX - this.minX); },LengthY: function () { return (this.maxY - this.minY); } } //定义DEM function Terrain() { } Terrain.prototype = { constructor: Terrain,setWH: function (col,row) { this.col = col; this.row = row; } } var currentAngle = [0.0,0.0]; // 绕X轴Y轴的旋转角度 ([x-axis,y-axis]) var curScale = 1.0; //当前的缩放比例 var initTexSuccess = false; //纹理图像是否加载完成 function main() { var demFile = document.getElementById(‘demFile‘); if (!demFile) { console.log("Failed to get demFile element!"); return; } //加载文件后的事件 demFile.addEventListener("change",function (event) { //判断浏览器是否支持FileReader接口 if (typeof FileReader == ‘undefined‘) { console.log("你的浏览器不支持FileReader接口!"); return; } //读取文件后的事件 var reader = new FileReader(); reader.onload = function () { if (reader.result) { var terrain = new Terrain(); if (!readDEMFile(reader.result,terrain)) { console.log("文件格式有误,不能读取该文件!"); } //绘制函数 onDraw(gl,canvas,terrain); } } var input = event.target; reader.readAsText(input.files[0]); }); // 获取 <canvas> 元素 var canvas = document.getElementById(‘webgl‘); // 获取WebGL渲染上下文 var gl = getWebGLContext(canvas); if (!gl) { console.log(‘Failed to get the rendering context for WebGL‘); return; } // 初始化着色器 if (!initShaders(gl,VSHADER_SOURCE,FSHADER_SOURCE)) { console.log(‘Failed to intialize shaders.‘); return; } // 指定清空<canvas>的颜色 gl.clearColor(0.0,0.0,1.0); // 开启深度测试 gl.enable(gl.DEPTH_TEST); //清空颜色和深度缓冲区 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); } //绘制函数 function onDraw(gl,terrain) { // 设置顶点位置 //var cuboid = new Cuboid(399589.072,400469.072,3995118.062,3997558.062,732,1268); var n = initVertexBuffers(gl,terrain); if (n < 0) { console.log(‘Failed to set the positions of the vertices‘); return; } //设置纹理 if (!initTextures(gl,terrain)) { console.log(‘Failed to intialize the texture.‘); return; } //注册鼠标事件 initEventHandlers(canvas); //绘制函数 var tick = function () { if (initTexSuccess) { //设置MVP矩阵 setMVPMatrix(gl,terrain.cuboid); //清空颜色和深度缓冲区 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); //绘制矩形体 gl.drawElements(gl.TRIANGLES,n,gl.UNSIGNED_SHORT,0); //gl.drawArrays(gl.Points,n); } //请求浏览器调用tick requestAnimationFrame(tick); }; //开始绘制 tick(); } function initTextures(gl,terrain) { // 传递X方向和Y方向上的范围到着色器 var u_RangeX = gl.getUniformLocation(gl.program,‘u_RangeX‘); var u_RangeY = gl.getUniformLocation(gl.program,‘u_RangeY‘); if (!u_RangeX || !u_RangeY) { console.log(‘Failed to get the storage location of u_RangeX or u_RangeY‘); return; } gl.uniform2f(u_RangeX,terrain.cuboid.minX,terrain.cuboid.maxX); gl.uniform2f(u_RangeY,terrain.cuboid.minY,terrain.cuboid.maxY); //创建一个image对象 var image = new Image(); if (!image) { console.log(‘Failed to create the image object‘); return false; } //图像加载的响应函数 image.onload = function () { if (loadTexture(gl,image)) { initTexSuccess = true; } }; //浏览器开始加载图像 image.src = ‘tex.jpg‘; return true; } function loadTexture(gl,image) { // 创建纹理对象 var texture = gl.createTexture(); if (!texture) { console.log(‘Failed to create the texture object‘); return false; } // 开启0号纹理单元 gl.activeTexture(gl.TEXTURE0); // 绑定纹理对象 gl.bindTexture(gl.TEXTURE_2D,texture); // 设置纹理参数 gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE); // 配置纹理图像 gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,gl.UNSIGNED_BYTE,image); // 将0号单元纹理传递给着色器中的取样器变量 var u_Sampler = gl.getUniformLocation(gl.program,‘u_Sampler‘); if (!u_Sampler) { console.log(‘Failed to get the storage location of u_Sampler‘); return false; } gl.uniform1i(u_Sampler,0); 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


HTML代码中要想改变字体颜色,常常需要使用CSS样式表。CSS是一门用来描述网页上样式的语言,通过编写CSS代码可以实现网页中各元素的大小、颜色、字体等各种样式的控制。那么如何在HTML代码中应用CSS样式来改变字体颜色呢?这里为大家介绍一下。 首先,在HTML代码...
HTML代码如何让字体盖住图片呢?需要使用CSS的position属性及z-index属性。 img { position: relative; z-index: -1; } p { position: absolute; to...
HTML代码字体设置 在HTML中,我们可以使用标签来设置网页中的文字字体。常用的字体标签是font和style,下面我们来学习如何使用这些标签。 1. font标签 使用font标签可以改变文字的字体、颜色和大小。它有三个属性font-family、color和...
在网页设计中,HTML代码的字体和字号选择是非常重要的一个环节,因为它们直接关系到页面的可读性和视觉效果。 要指定文本的字体和字号,可以使用HTML中的样式属性。使用样式属性设置字体和字号,如下所示: <p style="font-family: Aria...
HTML(Hypertext Markup Language,超文本标记语言)是一种用于创建网页的标准语言。它由许多标签(一对尖括号包围的关键字)组成,这些标签告诉浏览器如何显示内容。使用HTML代码,我们可以轻松地创建各种类型的图像和图形,如太极图。 在HTM...
外链是指在一个网页中添加一个指向其他网站的链接,用户可以通过这个链接直接跳转到其他网站。在HTML中,实现外链的方法很简单,只需要使用标签就可以了。 <a href="http://www.example.com">这是一个外链,点击跳转到www.ex...
HTML代码是实现网页界面的基础,而网页中的各种表单则是用户和网站进行交互的重要方式之一。下面我们来介绍如何使用HTML代码实现一个简单的报名表格。 <form action="submit.php" method="post"> &lt...
HTML是一种标记语言,用于开发网站和其他互联网内容。字体是网站设计中的关键元素之一,它可以决定网站的整体风格和呈现效果。HTML提供了字体编辑器,使网站设计变得更加容易。 <font face="Arial"> 这里是Arial字体 &...
HTML代码中,字体样式是开发者们必备的一部分。在HTML中,我们可以通过特定的标签和属性设置字体的样式、颜色和大小,以达到更好的排版效果。 <p style="font-size: 14px; color: #333; font-family:...
HTML中的字体可以设为粗体,以强调文本信息。我们可以通过使用一些标签来实现这一功能。其中,常用的标签包括: 1. 标签:该标签会把文本加粗显示,语法如下: 这是一段加粗的文本 2. 标签:与标签作用相同,但语义更强,表示该文本内容的重要性。语法如下:...
HTML代码可以实现文件的上传和下载,在网页开发中相当常见。通过使用<input>标签和<form>标签,我们可以轻松创建一个文件上传表单。 <form action="upload.php" method="post" enct...
HTML代码非常常见于网页设计中。在一些需要处理时间相关数据的场景下,可能需要将时间戳转换为实际时间,这时候就需要使用一些特定的HTML代码。 function timeStamp2Time(time){ var date = new Date(time...
HTML是一种用于创建网页的标记语言。在HTML中,我们可以使用超链接标签实现下载文件到本地的功能。 具体实现步骤如下: <a href="文件的URL" download="文件名">下载文件</a> 其中,href属性是文件...
在HTML代码中,对于字体靠左对齐有各种方法。其中最简单的方式之一是使用pre标签。 使用pre标签可以保留一段文本中的空格和换行符,从而使代码排版更加整齐。下面是一个例子: <p>这是一个段落。</p> &lt...
HTML代码字典是一本解释HTML标记和属性的参考文献。这本字典中包含了最常用的HTML代码以及它们的属性和值的详细描述。 例如,以下是HTML代码字典中的一部分内容: <a href="url">link text</a> 在...
在网页开发过程中,遇到一些需要用户复制的内容,我们通常都会提供复制按钮,让用户更方便地复制所需内容。下面我们来介绍如何使用html代码实现一键复制的功能。 var copyBtn = document.querySelector('#copy-bt...
用户登录 欢迎来到公司登录界面,请输入用户名和密码登录 用户名: 密码: 代码解释: 第1行:定义了一个 HTML 文档 第2行:开始了 HTML 头部 第3行:定义了...
HTML 代码是用来创建网页的语言,它包含了许多不同的元素和属性,让我们可以在网页中添加各种不同的元素和内容,如文字、图片、链接等等。在编写 HTML 代码时,我们可以使用各种不同的样式来美化我们的网页,例如更改字体、颜色、大小等等。 font-family:...
HTML代码中的字体转移 在编写HTML代码时,我们经常会使用各种字体来增强页面的可读性和视觉效果。但是,有些字符或特殊符号可能会在HTML中具有不同的含义,这就需要使用字体转义转换成HTML可以正常显示的字符。 在HTML中,使用"&"符号表示一个特殊字符将要被转...
HTML 编程语言中,你可以使用字体属性来更改文本的字体大小、颜色和样式。其中,字体颜色是最常用的样式更改。在 HTML 中,你可以使用 "color" 属性来更改文本的颜色。下面是一个使用 "pre" 标签的代码示例,演示如何使用 "color" 属性来更改字体颜色...