当前位置: 首页 > news >正文

网站后台编码vs做网站怎样加数据库

网站后台编码,vs做网站怎样加数据库,吉林省建设信息网官网入口,小米网站 用什么做的目录 1 前言2 思考题3 纹理映射介绍4 怎么映射#xff1f;5 开始绘制5.1 声明顶点着色器和片元着色器5.2 修改顶点的颜色为纹理坐标5.3 指定顶点位置和纹理坐标的值5.4 获取图片成功后进行绘制5.5 效果5.6 完整代码 6 总结 1 前言 上一讲我们讲了如何使用索引绘制彩色立方体5 开始绘制5.1 声明顶点着色器和片元着色器5.2 修改顶点的颜色为纹理坐标5.3 指定顶点位置和纹理坐标的值5.4 获取图片成功后进行绘制5.5 效果5.6 完整代码 6 总结 1 前言 上一讲我们讲了如何使用索引绘制彩色立方体还留了一个思考题怎么让立方体的每个面都保持一个颜色?这一讲我们就来解决这个问题并引出纹理映射和立方体贴图。 2 思考题 怎么让立方体的每个面都保持一个颜色?那当然是让每个面的两个三角形都保持一个颜色就行了那怎么让每个三角形都保持一个颜色呢因为三角形的颜色是通过顶点的颜色插值出来的自然是让三角形的每个顶点都保持一个颜色就可以了。   但是这样又产生了新问题因为顶点是公用的难道给每个顶点多个颜色吗答是的。   比如v0这个顶点它被三个面公用分别是前面、上面、右面。那么也就意味着它会有三个颜色因为我们要让立方体每个表面都是一个颜色。回顾一下上一讲我们是怎么给顶点颜色的 //顶点和颜色 let verticesColors new Float32Array([1.0, 1.0, 1.0, 1.0,1.0,1.0,//v0 近平面 右上 颜色-1.0, 1.0, 1.0, 1.0,0.0,1.0,//v1 近平面 左上 颜色-1.0,-1.0, 1.0, 1.0,0.0,1.0,//v2 近平面 左下 颜色1.0,-1.0, 1.0, 1.0,1.0,0.0,//v3 近平面 右下 颜色1.0,-1.0,-1.0, 1.0,0.0,1.0,//v4 远平面 右下 颜色-1.0,-1.0,-1.0, 1.0,1.0,1.0,//v5 远平面 左下 颜色-1.0, 1.0,-1.0, 0.0,0.0,1.0,//v6 远平面 左上 颜色1.0, 1.0,-1.0, 0.0,1.0,1.0 //v7 远平面 右上 颜色 ]); //顶点索引 let indices new Uint8Array([0,1,2, 0,2,3,//近平面4,5,6, 4,6,7,//远平面1,2,5, 1,5,6,//左平面0,3,4, 0,4,7,//右平面3,4,2, 3,5,2,//下平面0,7,6, 0,1,6 //上平面 ]);现在一个顶点三个颜色那岂不是说顶点不够用了是的所以每个顶点我们要写三次。也就是说这次顶点不能公用了。我们对上述代码进行修改 const verticesColors new Float32Array([// 前面-1.0, -1.0, 1.0, 1.0, 0.0,1.0,//v2 红色1.0, -1.0, 1.0, 1.0, 0.0,1.0,//v3 红色1.0, 1.0, 1.0, 1.0, 0.0,1.0,//v0 红色-1.0, 1.0, 1.0, 1.0, 0.0,1.0,//v1 红色// 后面-1.0, -1.0, -1.0, 0.0, 1.0, 0.0,//v5 绿色1.0, -1.0, -1.0, 0.0, 1.0, 0.0,//v4 绿色1.0, 1.0, -1.0, 0.0, 1.0, 0.0,//v7 绿色-1.0, 1.0, -1.0, 0.0, 1.0, 0.0,//v6 绿色// 上面-1.0, 1.0, 1.0, 0.0, 0.0,1.0,//v1 蓝色1.0, 1.0, 1.0, 0.0, 0.0,1.0,//v0 蓝色1.0, 1.0, -1.0, 0.0, 0.0,1.0,//v7 蓝色-1.0, 1.0, -1.0, 0.0, 0.0,1.0,//v6 蓝色// 下面-1.0, -1.0, 1.0, 0.0, 0.0,0.0,//v2 黑色1.0, -1.0, 1.0, 0.0, 0.0,0.0,//v3 黑色1.0, -1.0, -1.0, 0.0, 0.0,0.0,//v4 黑色-1.0, -1.0, -1.0, 0.0, 0.0,0.0,//v5 黑色// 左面-1.0, -1.0, -1.0, 0.0, 1.0,1.0,//v5 青色-1.0, -1.0, 1.0, 0.0, 1.0,1.0,//v2 青色-1.0, 1.0, 1.0, 0.0, 1.0,1.0,//v1 青色-1.0, 1.0, -1.0, 0.0, 1.0,1.0,//v6 青色// 右面1.0, -1.0, 1.0, 1.0, 1.0,1.0,//v3 白色1.0, -1.0, -1.0, 1.0, 1.0,1.0,//v4 白色1.0, 1.0, -1.0, 1.0, 1.0,1.0,//v7 白色1.0, 1.0, 1.0, 1.0, 1.0,1.0,//v0 白色 ]); //顶点索引 let indices new Uint8Array([0, 1, 2, 0, 2, 3, // 前面4, 5, 6, 4, 6, 7, // 后面8, 9, 10, 8, 10, 11, // 上面12, 13, 14, 12, 14, 15, // 下面16, 17, 18, 16, 18, 19, // 左面20, 21, 22, 20, 22, 23 // 右面 ]);看下效果prefect 3 纹理映射介绍 其实这个词语还是比较好理解。见名知意大概意思就是把纹理映射到某个地方纹理是什么现在你可以简单的认为纹理就是一张图片。把一张二维的图片映射到一个三维物体的表面就叫纹理映射。 4 怎么映射 很简单你只需要将立方体的的和图片的位置对应起来告诉WebGL就可以了。比如立方体的左上角对应图片的左上角立方体右上角对应图片右上角左下角、右下角类似。那么中间的怎么办中间的WebGL会自动帮我们去映射。纹理坐标我们用uv来表示相当于xy。不论图片是什么尺寸的图片的左下角uv始终是【00】右上角始终是【11】这一点也是WebGL帮我们实现的。 5 开始绘制 5.1 声明顶点着色器和片元着色器 script idvertex-shader typex-shader/x-vertex//顶点位置attribute vec4 a_Position;//纹理坐标attribute vec2 a_TexCoord;//传递纹理坐标varying vec2 v_TexCoord;void main(){gl_Position a_Position;//直接将纹理坐标赋值给传递变量v_TexCoord a_TexCoord;} /script script idfragment-shader typex-shader/x-fragmentprecision highp float;//采样器固定写法uniform sampler2D u_Sampler;//接收顶点着色器传过来的值varying vec2 v_TexCoord;void main(){//到某个纹理坐标去采样也是固定写法gl_FragColor texture2D(u_Sampler,v_TexCoord);} /script5.2 修改顶点的颜色为纹理坐标 前面我们给立方体的表面赋值的是颜色现在我们把它变为纹理坐标 const verticesColors new Float32Array([// 前面-1.0, -1.0, 1.0, 0.0, 0.0,//v2 图片左下角纹理坐标1.0, -1.0, 1.0, 1.0, 0.0,//v3 图片左下角纹理坐标1.0, 1.0, 1.0, 1.0, 1.0,//v0 图片右下角纹理坐标-1.0, 1.0, 1.0, 0.0, 1.0,//v1 图片左上角纹理坐标// 后面-1.0, -1.0, -1.0, 0.0, 0.0,//v5 同上1.0, -1.0, -1.0, 1.0, 0.0,//v4 同上1.0, 1.0, -1.0, 1.0, 1.0,//v7 同上-1.0, 1.0, -1.0, 0.0, 1.0,//v6 同上// 上面-1.0, 1.0, 1.0, 0.0, 0.0,//v1 同上1.0, 1.0, 1.0, 1.0, 0.0,//v0 同上1.0, 1.0, -1.0, 1.0, 1.0,//v7 同上-1.0, 1.0, -1.0, 0.0, 1.0,//v6 同上// 下面-1.0, -1.0, 1.0, 0.0, 0.0,//v2 同上1.0, -1.0, 1.0, 1.0, 0.0,//v3 同上1.0, -1.0,-1.0, 1.0, 1.0,//v4 同上-1.0, -1.0,-1.0, 0.0, 1.0,//v5 同上// 左面-1.0, -1.0, -1.0, 0.0, 0.0,//v5 同上-1.0, -1.0, 1.0, 1.0, 0.0,//v2 同上-1.0, 1.0, 1.0, 1.0, 1.0,//v1 同上-1.0, 1.0, -1.0, 0.0, 1.0,//v6 同上// 右面1.0, -1.0, 1.0, 0.0, 0.0,//v3 同上1.0, -1.0, -1.0, 1.0, 0.0,//v4 同上1.0, 1.0, -1.0, 1.0, 1.0,//v7 同上1.0, 1.0, 1.0, 0.0, 1.0,//v0 同上 ]);const indices new Uint8Array([0, 1, 2, 0, 2, 3, // 前面4, 5, 6, 4, 6, 7, // 后面8, 9, 10, 8, 10, 11, // 上面12, 13, 14, 12, 14, 15, // 下面16, 17, 18, 16, 18, 19, // 左面20, 21, 22, 20, 22, 23 // 右面 ]);5.3 指定顶点位置和纹理坐标的值 //顶点let vertexColorBuffer gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexColorBuffer);gl.bufferData(gl.ARRAY_BUFFER,verticesColors,gl.STATIC_DRAW);let FSIZE verticesColors.BYTES_PER_ELEMENT;let a_Position gl.getAttribLocation(program,a_Position);gl.vertexAttribPointer(a_Position,3,gl.FLOAT,false,FSIZE*5,0);gl.enableVertexAttribArray(a_Position);//指定纹理坐标值let a_TexCoord gl.getAttribLocation(program,a_TexCoord);gl.vertexAttribPointer(a_TexCoord,2,gl.FLOAT,false,5*FSIZE,3*FSIZE);gl.enableVertexAttribArray(a_TexCoord);5.4 获取图片成功后进行绘制 let image new Image(); image.src static/sky.jpg; image.onload function(){console.log(image ok);//创建纹理对象let texture gl.createTexture();//获取采样器let u_Sampler gl.getUniformLocation(program,u_Sampler);//反转Y轴canvas的Y轴和WebGL的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);//设置对象使用的图片mipmap层级图像的格式纹理的格式纹理数据类型图片gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,gl.RGB,gl.UNSIGNED_BYTE,image);//将0号纹理赋值给采样器gl.uniform1i(u_Sampler,0);//绑定索引缓冲let indexBuffer gl.createBuffer();gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW);//清空颜色缓冲和深度缓冲gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);//绘制//顶点索引数组如果是Uint8Array就是UNSIGNED_BYTE表示数组里的值在0-2^8-1(255)//................Uint16Array,就是UNSIGNED_SHORT表示数组里的值在0-2^16-1(65535)//................Uint32Array,就是UNSIGNED_INT表示数组里的值在0-2^32-1(4294967295)gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_BYTE, 0); };5.5 效果 为了能看到明显的效果我将立方体进行了旋转具体如何旋转我们后面的文章会进行介绍。 5.6 完整代码 // Create a cube // v6----- v7 // /| /| // v1------v0| // | | | | // | |v5---|-|v4 // |/ |/ // v2------v3 const verticesColors new Float32Array([// 前面-1.0, -1.0, 1.0, 0.0, 0.0,//v2 图片左下角纹理坐标1.0, -1.0, 1.0, 1.0, 0.0,//v3 图片左下角纹理坐标1.0, 1.0, 1.0, 1.0, 1.0,//v0 图片右下角纹理坐标-1.0, 1.0, 1.0, 0.0, 1.0,//v1 图片左上角纹理坐标// 后面-1.0, -1.0, -1.0, 0.0, 0.0,//v5 同上1.0, -1.0, -1.0, 1.0, 0.0,//v4 同上1.0, 1.0, -1.0, 1.0, 1.0,//v7 同上-1.0, 1.0, -1.0, 0.0, 1.0,//v6 同上// 上面-1.0, 1.0, 1.0, 0.0, 0.0,//v1 同上1.0, 1.0, 1.0, 1.0, 0.0,//v0 同上1.0, 1.0, -1.0, 1.0, 1.0,//v7 同上-1.0, 1.0, -1.0, 0.0, 1.0,//v6 同上// 下面-1.0, -1.0, 1.0, 0.0, 0.0,//v2 同上1.0, -1.0, 1.0, 1.0, 0.0,//v3 同上1.0, -1.0,-1.0, 1.0, 1.0,//v4 同上-1.0, -1.0,-1.0, 0.0, 1.0,//v5 同上// 左面-1.0, -1.0, -1.0, 0.0, 0.0,//v5 同上-1.0, -1.0, 1.0, 1.0, 0.0,//v2 同上-1.0, 1.0, 1.0, 1.0, 1.0,//v1 同上-1.0, 1.0, -1.0, 0.0, 1.0,//v6 同上// 右面1.0, -1.0, 1.0, 0.0, 0.0,//v3 同上1.0, -1.0, -1.0, 1.0, 0.0,//v4 同上1.0, 1.0, -1.0, 1.0, 1.0,//v7 同上1.0, 1.0, 1.0, 0.0, 1.0,//v0 同上 ]);const indices new Uint8Array([0, 1, 2, 0, 2, 3, // 前面4, 5, 6, 4, 6, 7, // 后面8, 9, 10, 8, 10, 11, // 上面12, 13, 14, 12, 14, 15, // 下面16, 17, 18, 16, 18, 19, // 左面20, 21, 22, 20, 22, 23 // 右面 ]); gl.viewport(0, 0, canvas.width, canvas.height); gl.enable(gl.DEPTH_TEST); //顶点 let vertexColorBuffer gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER,vertexColorBuffer); gl.bufferData(gl.ARRAY_BUFFER,verticesColors,gl.STATIC_DRAW); let FSIZE verticesColors.BYTES_PER_ELEMENT; let a_Position gl.getAttribLocation(program,a_Position); gl.vertexAttribPointer(a_Position,3,gl.FLOAT,false,FSIZE*5,0); gl.enableVertexAttribArray(a_Position); //指定纹理坐标值 let a_TexCoord gl.getAttribLocation(program,a_TexCoord); gl.vertexAttribPointer(a_TexCoord,2,gl.FLOAT,false,5*FSIZE,3*FSIZE); gl.enableVertexAttribArray(a_TexCoord); let image new Image(); image.src static/sky.jpg; image.onload function(){console.log(image ok);//创建纹理对象let texture gl.createTexture();//获取采样器let u_Sampler gl.getUniformLocation(program,u_Sampler);//反转Y轴canvas的Y轴和WebGL的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);//设置对象使用的图片mipmap层级图像的格式纹理的格式纹理数据类型图片gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,gl.RGB,gl.UNSIGNED_BYTE,image);//将0号纹理赋值给采样器gl.uniform1i(u_Sampler,0);//绑定索引缓冲let indexBuffer gl.createBuffer();gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,indexBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW);//清空颜色缓冲和深度缓冲gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);//绘制//顶点索引数组如果是Uint8Array就是UNSIGNED_BYTE表示数组里的值在0-2^8-1(255)//................Uint16Array,就是UNSIGNED_SHORT表示数组里的值在0-2^16-1(65535)//................Uint32Array,就是UNSIGNED_INT表示数组里的值在0-2^32-1(4294967295)gl.drawElements(gl.TRIANGLES, 36, gl.UNSIGNED_BYTE, 0); };6 总结 本节我们从如何将立方体每个面的颜色改为相同的颜色开始介绍到了如何将图片贴到立方体的表面系统的分析了为什么不能再共用顶点并将代码进行了修改以及讲解了纹理坐标的使用。这一节的内容相对较多但理解起来并不难希望读者认真体会回见~
http://www.dnsts.com.cn/news/27096.html

相关文章:

  • seo针对网站做策划动态表白网站制作
  • 成都单位网站设计建设工程招标信息网
  • 网站程序代码优化优化搜索关键词
  • 新闻门户网站建设方案wordpress author 1
  • 泰国做彩票网站南昌购物网站制作
  • 什么是企业网站源码西青区个人网页设计制作软件
  • 松原网站制作西安网站建设报价方案
  • 网站后台登录界面网站建设服务费税率多少
  • 网站建设艾金手指六六12聊城手机网站建设价格
  • 软件资源网站推荐wordpress栏目分类
  • 如何做自己的博客网站wordpress好看的下载页面
  • 河北高阳做网站的抄袭的网站
  • 整站优化seonginx wordpress.conf
  • 团购网站网站维护提示
  • 没有服务器如何做网站上海营销网站建设公司
  • 找个网站你知道的长沙商城网站建设
  • 帝国网站的互动专栏怎么做怎样用ps做网站首页图片
  • 自己网站页面设计软件互联网推广销售好做吗
  • 好看的做地图分析图的网站关于做外汇现货的网站
  • 网站建设柒金手指花总14windows服务器网站权限
  • 做历史课件用哪个网站比较好天水 网站建设 招聘
  • 宠物交易网站模板厦门网站建设建设公司
  • 营销网站设计公司招聘python人网站开发案例
  • 网站 搜索 关键字 description徐州网站建设与推广
  • 用python做的大型网站wordpress新闻编辑器
  • 烟台网站优化西安网站建设总部
  • 域名对网站有什么影响重庆网站制作有哪些
  • 怎么弄百度网站网站模块怎么恢复
  • 做个支付网站多少钱网站怎么建设
  • 个人网站风格设计wordpress 模版标签