<html><head><title>纹理贴图</title><script type="text/javascript" src="./lib/webgl-debug.js"></script><script type="text/javascript" src="./lib/webgl-utils.js"></script><script type="text/javascript" src="./lib/cuon-utils.js"></script><script type="text/javascript" src="./lib/cuon-matrix.js"></script>
</head><body onload="main()"><canvas id='canvas' width="1920" height="1080"></canvas><script type="text/javascript">//定义变量存储位置//attribute:存储顶点位置,经常变的,无精度限定//uniform:存储不变的值,有精度限定var VShader ="attribute vec4 a_position;\n" +"attribute vec2 a_texurecoord;\n"+"varying vec2 v_textureCoord;\n"+"void main(){\n" +"gl_Position=a_position;" +"gl_PointSize=10.0;\n" +"v_textureCoord=a_texurecoord;\n"+"}"var FShader ="precision mediump float;\n" +"uniform sampler2D u_sampler;\n"+"varying vec2 v_textureCoord\n;"+"void main(){\n" +"gl_FragColor=texture2D(u_sampler,v_textureCoord);\n" +"}"function main() {var canvas = document.getElementById("canvas");var gl = getWebGLContext(canvas);if (!gl) {console.log("获取webgl上下文失败")return;}if (!initShaders(gl, VShader, FShader)) {console.log("初始化着色器失败");return;}//获取着色器中的变量的地址var a_position = gl.getAttribLocation(gl.program, 'a_position')if (a_position < 0) {console.log("获取a_position变量地址失败")return;}var a_texurecoord = gl.getAttribLocation(gl.program, 'a_texurecoord')if (a_texurecoord < 0) {console.log("获取a_texurecoord变量地址失败")return;}initVertexBuffer(gl, a_position,a_texurecoord);initTexture()//初始化纹理贴图function initTexture() {//创建纹理var texture=gl.createTexture();//获取纹理坐标的存储地址var u_Sampler=gl.getUniformLocation(gl.program,"u_sampler");console.log(u_Sampler)var image=new Image();image.onload=function(){loadTexture(gl,texture,image,u_Sampler);}image.src="./img/ff.png"}}function loadTexture(gl,texture,image,u_Sampler){//进行y轴翻转gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,1);//开启0号纹理单元gl.activeTexture(gl.TEXTURE0);//向纹理单元绑定纹理对象gl.bindTexture(gl.TEXTURE_2D,texture);//设置纹理参数gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR)//配置纹理图像gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,gl.RGB,gl.UNSIGNED_BYTE,image);//将0号纹理传递给着色器gl.uniform1i(u_Sampler,0)gl.clearColor(0, 0, 0, 1)gl.clear(gl.COLOR_BUFFER_BIT)gl.drawArrays(gl.TRIANGLES, 0, 6)}//初始化颜色缓冲区function initVertexBuffer(gl, a_position,a_texurecoord) {var vertexs = new Float32Array([1.0, 1.0, 0.0,1,1,-1.0, 1.0, 0.0,0,1, -1.0, -1.0, 0.0,0,0, -1.0, -1.0, 0.0,0,0, 1.0, -1.0, 0.0,1,0, 1.0, 1.0, 0.0,1,1])//计算所占字节数var fsize = vertexs.BYTES_PER_ELEMENT;//创建缓冲区var vextexBuffer = gl.createBuffer();if (!vextexBuffer) {console.log("创建缓冲区失败")return;}//绑定到顶点缓冲区gl.bindBuffer(gl.ARRAY_BUFFER, vextexBuffer);//给顶点缓冲区传值,GL_STATIC_DRAW表示数据变得很少gl.bufferData(gl.ARRAY_BUFFER, vertexs, gl.STATIC_DRAW);//将顶点缓冲区的值给a_position变量gl.vertexAttribPointer(a_position, 3, gl.FLOAT, false, fsize * 5, 0);gl.enableVertexAttribArray(a_position)gl.vertexAttribPointer(a_texurecoord, 2, gl.FLOAT, false, fsize * 5, fsize * 3);//开启顶点缓冲区中的Attribute类型变量a_positiongl.enableVertexAttribArray(a_texurecoord)}</script>
</body></html>

效果:

图片.png


http://www.taodudu.cc/news/show-4958842.html

相关文章:

  • three.js 环境贴图
  • 类型多样的石膏PBR多通道贴图素材,速来收藏!
  • 超全金属PBR多通道贴图素材网站整理
  • esp01s+blinker WOL远程开机
  • 外语学习强烈推荐Rosetta Stone
  • Rosetta Stone (罗赛塔石碑) for Mac 美式英语1-5级语言包下载
  • Rosetta Stone罗塞塔:Fatal Application Error #1141
  • openstack 云_OpenStack中的人道主义应用程序,云的Rosetta Stone等
  • Rosetta Stone快照活动总结
  • 如师通语言学习软件(罗赛塔石碑)/Rosetta Stone 安装方法
  • 精品软件推荐-罗塞达石碑(Rosetta Stone)V5.037 语言学习Mac中文版
  • 日语再学习的开始以及Rosetta Stone的介绍
  • Rosetta Stone的第二遍学习总结
  • 第二次Rosetta stone学习总结
  • Rosetta Stone 4.1.15 下载破解和语言包
  • 第一次Rosetta Stone总结
  • Rosetta stone
  • 编写PHP代码
  • EclipsePHP Studio(EPP4)详细安装图文详解
  • 修改EclipsePHP编码格式
  • PHP的集成开发环境 -- Eclipse PHP Integrated Development Environment
  • eclipse for PHP运行项目PHP版本过高无法启动服务问题解决
  • 使用Eclipse开发PHP项目
  • 泛微OA 注册自定义接口格式
  • java实现物理仿真平台介绍,物理仿真实验室
  • 用计算机做初中模拟物理实验,利用虚拟实验室提高初中生物理实验的兴趣.docx...
  • matlab半物理仿真,一种基于Matlab的半物理仿真方法与流程
  • 科大奥锐干涉法测微小量实验的数据_基于组件的虚拟物理仿真实验软件V4.0
  • 仿真物理实验室
  • P2614 计算机弹琴

webgl学习六 纹理贴图相关推荐

  1. WebGL学习之纹理盒

    原文地址:WebGL学习之纹理盒 我们之前已经学习过二维纹理 gl.TEXTURE_2D,而且还使用它实现了各种效果.但还有一种立方体纹理 gl.TEXTURE_CUBE_MAP,它包含了6个纹理代表 ...

  2. WebGL three.js学习笔记 纹理贴图模拟太阳系运转

    纹理贴图的应用以及实现一个太阳系的自转公转 点击查看demo演示 demo地址:https://nsytsqdtn.github.io/demo/solar/solar three.js中的纹理 纹理 ...

  3. dx12 龙书第九章学习笔记 -- 纹理贴图

    1.纹理与资源的回顾 我们其实很早就接触过纹理了,之前的深度缓冲区与后台缓冲区,它们都是通过ID3D12Resource接口表示,并以D3D12_RESOURCE_DESC::Dimension成员中 ...

  4. OpenGL学习笔记——纹理贴图

    简单地说,纹理就是矩形的数据数组.例如,颜色数据.亮度数据.颜色和alpha数据.纹理数组中的单个值常常称为纹理单元(texel).纹理贴图之所以复杂,是因为矩形的纹理可以映射到非矩形的区域,并且必须 ...

  5. 基于WebGL的球体纹理贴图实现全景展示

    1 绘制球体 1.1 将球面映射到二维平面 三维球面坐标与二维坐标系之间的映射关系如下: 归一化表示为: 1.2 离散化 将坐标系沿两轴划分多份,横轴每份宽度为δu,纵轴每份宽度为δv,下图便可以确定 ...

  6. Windows 8 Directx 开发学习笔记(十一)地形纹理贴图

    前一篇实现木箱贴图时,木箱的六个面都正好用一整张纹理图,即六个面的纹理坐标均在[0,1]内.然而在为比较大的模型贴图时,像山峰河谷模型,如果只用一张纹理图,那么每个三角形只得到几个纹理元素,无法为提供 ...

  7. WebGL/ThreeJS几何体、材质、纹理贴图,给几何体披上好看的外衣

    1.ThreeJS的常见几何体 BufferGeometry和Geometry有什么不同? 如果你想简单理解BufferGeometry和Geometry有什么不同,就是两者的数据结构不同,缓冲类型几 ...

  8. 计算机图形学与opengl C++版 学习笔记 第5章 纹理贴图

    目录 5.1 加载纹理图像文件 5.2 纹理坐标 5.3 创建纹理对象 5.4 构建纹理坐标 5.5 将纹理坐标载入缓冲区 5.6 在着色器中使用纹理:采样器变量和纹理单元 5.7 纹理贴图:示例程序 ...

  9. 20 WebGL使用纹理贴图

    案例查看地址:点击这里 WebGL中纹理的限制 WebGL中的纹理需要注意一点,所使用的图片数据的大小必须是2的阶乘,横竖的像素长度大小必须是32x32,128x128等2的阶乘的形式. 当然,做一些 ...

最新文章

  1. 2542513 - AS Java fails to start - Initialization of destination UMEBackendConnection failed
  2. LeetCode 673. Number of Longest Increasing Subsequence--O(N log N )--Java,C++,Python解法
  3. excel2007无法加载mysql_Excel2007中进行无法安装加载项的解决方法
  4. fmincon函数求解过程中出现无解的情况
  5. python生成迭代的用法
  6. 本地搭建Dubbo监控中心的安装步骤
  7. 作者:吕红胤,女,电子科技大学副研究员。
  8. 29岁年薪百万,晋升阿里最年轻P8之一,我想分享8点成长经验
  9. 菜鸟CEO万霖:双11包裹量将继续增长 已建立更高效的物流枢纽
  10. 中国 人民大学计算机考研分数线,中国人民大学2010年计算机考研复试分数线
  11. “校园知网”5月8日冲刺计划书
  12. 构建一个简单的Keras +深度学习REST API
  13. 汉字unicode编码范围
  14. 第三届长安杯检材一复盘
  15. 高中计算机教师学期论文,高中信息技术教学论文范文
  16. 关于onselect与onchange的介绍
  17. excel中看着是空单元格,使用Ctrl+G定位空值却定位不到
  18. com.netflix.discovery.DiscoveryClient : Completed shut down of DiscoveryClient
  19. 408计算机考研后期规划-10月起
  20. 家里蹲太孤单?来用python画一只单身狗吧

热门文章

  1. Brave浏览器的数据
  2. 网络怎么改变计算机,怎么更改电脑上网IP地址
  3. 百度地图获取河流_华为AR地图: 导航功能确实不错,还有更多AR新场景也值得关注...
  4. vue中图片和视频加载不出
  5. 书摘: Security Power Tools
  6. excel两个表格数据对比_如何让两个Excel表格分别独立显示?
  7. HDU - 1248 寒冰王座 (完全背包
  8. java毕业生设计忻府区饭中有豆粮油销售系统计算机源码+系统+mysql+调试部署+lw
  9. 订单管理系统设计思路
  10. 关于市场上面各式各样的固码