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

做网站一般做几个尺寸点击进入官方网站

做网站一般做几个尺寸,点击进入官方网站,网上推广平台可靠吗,衡阳疫情v案例查看地址:点击这里 首先需要说一下需求,通过需求进行代码的书写。 需要绘制两个立柱,然后两个立柱是连接在一起的具有,模仿两节胳膊,运行程序,用户可以使用左右方向键控制arm1(同时带动整条…

案例查看地址:点击这里

首先需要说一下需求,通过需求进行代码的书写。

需要绘制两个立柱,然后两个立柱是连接在一起的具有,模仿两节胳膊,运行程序,用户可以使用左右方向键控制arm1(同时带动整条手臂)水平转动,使用上下方向键控制爱人m绕joint1关节垂直转动。


下面是制作出来的案例,左右键,整个沿y轴旋转,上下键,沿joint1进行z轴旋转


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Title</title><style>body {margin: 0;text-align: center;}#canvas {margin: 0;}</style>
</head>
<body οnlοad="main()">
<canvas id="canvas" height="800" width="1200"></canvas>
</body>
<script src="lib/webgl-utils.js"></script>
<script src="lib/webgl-debug.js"></script>
<script src="lib/cuon-utils.js"></script>
<script src="lib/cuon-matrix.js"></script>
<script>// 顶点着色器var VSHADER_SOURCE ="" +"attribute vec4 a_Position;\n" + //顶点位置变量"attribute vec4 a_Normal;\n" + //顶点法向量变量"uniform mat4 u_MvpMatrix;\n" + //视图模板射影矩阵"uniform mat4 u_NormalMatrix;\n" + //逆转置矩阵"varying vec4 v_Color;\n" + //顶点颜色"void main(){\n" +"   gl_Position = u_MvpMatrix * a_Position;\n" +"   vec3 lightDirection = normalize(vec3(0.0,0.5,0.7));\n" +"   vec4 color = vec4(1.0,0.4,0.0,1.0);\n" +"   vec3 normal = normalize((u_NormalMatrix * a_Normal).xyz);\n" +"   float nDotL = max(dot(normal, lightDirection), 0.0);\n" +"   v_Color = vec4(color.rgb * nDotL + vec3(0.1), color.a);\n" +"}";// 片元着色器var FSHADER_SOURCE ="" +"#ifdef GL_ES\n" +"precision mediump float;\n" +"#endif\n" +"varying vec4 v_Color;\n" +"void main () {" +"   gl_FragColor = v_Color;\n" +"}\n";//主函数,页面加载完成触发function main() {//获取canvas对象var canvas = document.getElementById("canvas");//获取WebGL上下文var gl = getWebGLContext(canvas);if (!gl) {console("您的浏览器不支持WebGL");return;}//初始化着色器if(!initShaders(gl,VSHADER_SOURCE,FSHADER_SOURCE)){console.log("无法初始化着色器");return;}//通过创建缓冲区并赋值数据给attribute变量 并返回绘制次数var n = initVertexBuffers(gl);if(n < 0){console.log("无法设置缓冲区的相关信息");return;}//初始化底色和开启隐藏面消除gl.clearColor(0.0,0.0,0.0,1.0);gl.enable(gl.DEPTH_TEST);//获取相关的uniform变量的存储位置var u_MvpMatrix = gl.getUniformLocation(gl.program, "u_MvpMatrix");var u_NormalMatrix = gl.getUniformLocation(gl.program, "u_NormalMatrix");if(!u_NormalMatrix || !u_MvpMatrix){console.log("无法获取到相关的存储位置");return;}//创建一个视点(view) 射影(projection) 矩阵(matrix)var viewProjMatrix = new Matrix4();viewProjMatrix.setPerspective(50.0,canvas.width/canvas.height, 1.0, 100.0);viewProjMatrix.lookAt(20.0, 10.0, 30.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//添加键盘按键交互事件document.onkeydown = function (e) {keydown(e, gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix);};//绘制两节胳膊draw(gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix);}//声明全局变量var angle_step = 3.0;   //每一次点击触发事件旋转角度(度)的增量var g_arm1Angle = -90.0;//arm1的旋转角度(度)var g_joint1Angle = 0.0;//joint1的旋转角度(度)function keydown(event, gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix) {switch (event.keyCode){case 38: // 上键 -> 以joint1为中心沿着z轴旋转(增量)if (g_joint1Angle < 135.0) g_joint1Angle += angle_step;break;case 40: // 下键 -> 以joint1为中心沿着z轴旋转(减量)if (g_joint1Angle > -135.0) g_joint1Angle -= angle_step;break;case 39: // 右键 -> 以y轴进行水平旋转(增量)g_arm1Angle = (g_arm1Angle + angle_step) % 360;break;case 37: // 左键 -> 以y轴进行水平旋转(减量)g_arm1Angle = (g_arm1Angle - angle_step) % 360;break;default:return; // 其他按键没作用}draw(gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix);}function initVertexBuffers(gl) {// Vertex coordinates(长方体3宽度,高度10,长度3,其原点在其底部)var vertices = new Float32Array([1.5, 10.0, 1.5, -1.5, 10.0, 1.5, -1.5, 0.0, 1.5, 1.5, 0.0, 1.5, // v0-v1-v2-v3 front1.5, 10.0, 1.5, 1.5, 0.0, 1.5, 1.5, 0.0, -1.5, 1.5, 10.0, -1.5, // v0-v3-v4-v5 right1.5, 10.0, 1.5, 1.5, 10.0, -1.5, -1.5, 10.0, -1.5, -1.5, 10.0, 1.5, // v0-v5-v6-v1 up-1.5, 10.0, 1.5, -1.5, 10.0, -1.5, -1.5, 0.0, -1.5, -1.5, 0.0, 1.5, // v1-v6-v7-v2 left-1.5, 0.0, -1.5, 1.5, 0.0, -1.5, 1.5, 0.0, 1.5, -1.5, 0.0, 1.5, // v7-v4-v3-v2 down1.5, 0.0, -1.5, -1.5, 0.0, -1.5, -1.5, 10.0, -1.5, 1.5, 10.0, -1.5  // v4-v7-v6-v5 back]);// Normalvar normals = new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, // v0-v1-v2-v3 front1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, // v0-v3-v4-v5 right0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, // v0-v5-v6-v1 up-1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, // v1-v6-v7-v2 left0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, // v7-v4-v3-v2 down0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0  // v4-v7-v6-v5 back]);// Indices of the verticesvar indices = new Uint8Array([0, 1, 2, 0, 2, 3,    // front4, 5, 6, 4, 6, 7,    // right8, 9, 10, 8, 10, 11,    // up12, 13, 14, 12, 14, 15,    // left16, 17, 18, 16, 18, 19,    // down20, 21, 22, 20, 22, 23     // back]);//创建缓冲区并赋值attributeif(!initArrayBuffer(gl, "a_Position", vertices, gl.FLOAT, 3)) return -1;if(!initArrayBuffer(gl, "a_Normal", normals, gl.FLOAT, 3)) return -1;//取消缓冲区buffer绑定gl.bindBuffer(gl.ARRAY_BUFFER, null);//创建一个缓冲区对象,并将索引绑定到缓冲区var indexBuffer = gl.createBuffer();if(!indexBuffer){console.log("无法创建索引缓冲区");return -1;}gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);return indices.length;}function initArrayBuffer(gl, attribute, data, type, num) {//创建缓冲区var buffer = gl.createBuffer();if(!buffer){console.log("无法创建缓冲区");return false;}//将数据写入缓冲区gl.bindBuffer(gl.ARRAY_BUFFER, buffer);gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);//获取到attribute变量的存储位置,并将变量绑定缓冲区var a_attribute = gl.getAttribLocation(gl.program, attribute);if(a_attribute < 0){console.log("无法获取到变量的"+ attribute +"存储位置");return false;}gl.vertexAttribPointer(a_attribute, num, type, false, 0, 0);//开启缓冲区gl.enableVertexAttribArray(a_attribute);return true;}//声明两个全局的变换矩阵(模型变换矩阵和模型视图射影矩阵)var g_modelMatrix = new Matrix4(), g_mvpMatrix = new Matrix4();//绘制图形function draw(gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix) {//绘制底色gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);//第一节胳膊var arm1Length = 10.0; //第一节胳膊的长度g_modelMatrix.setTranslate(0.0,-12.0, 0.0);g_modelMatrix.rotate(g_arm1Angle, 0.0, 1.0, 0.0);drawBox(gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix);//第二节胳膊g_modelMatrix.translate(0.0, arm1Length, 0.0); //将图形移动到joint1的位置g_modelMatrix.rotate(g_joint1Angle, 0.0, 0.0, 1.0); //围绕z轴旋转g_modelMatrix.scale(1.3, 1.0, 1.3); //缩放drawBox(gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix);}var g_normalMatrix = new Matrix4(); //法线坐标变换矩阵//绘制立方体function drawBox(gl, n, viewProjMatrix, u_MvpMatrix, u_NormalMatrix) {//计算出计算模型视图矩阵,并赋值给u_MvpMatrixg_mvpMatrix.set(viewProjMatrix);g_mvpMatrix.multiply(g_modelMatrix);gl.uniformMatrix4fv(u_MvpMatrix, false, g_mvpMatrix.elements);//获取模型矩阵的逆转置矩阵,并赋值u_NormalMatrixg_normalMatrix.setInverseOf(g_modelMatrix);g_normalMatrix.transpose();gl.uniformMatrix4fv(u_NormalMatrix, false, g_normalMatrix.elements);//绘制gl.drawElements(gl.TRIANGLES, n, gl.UNSIGNED_BYTE, 0);}</script>
</html>

我们来看一下代码:

在main()函数中,基本上和以前一样,设置了一个视图模型摄影矩阵,注册了一个鼠标按键事件keydown()。

在keydown()前面,声明了三个变量,keydown()事件就是专门处理和使用这三个变量的,等处理完成后,又调用了一个绘制的方法draw()。

在draw()方法中,绘制了两个相同坐标的点的立方体,但是,由于使用的矩阵不同,绘制出来的立方体的位置,大小也不同。而且键盘按键触发事件后,也影响着这些模型,一直重绘而已。



http://www.lbrq.cn/news/2406943.html

相关文章:

  • 深圳网站建设引流获客工具
  • 温州设计集团网站建设热点时事新闻
  • 杭州网站建设哪个好爱站网挖掘关键词
  • 国外网站设计公司河南整站百度快照优化
  • 网站建设找美橙互联整合营销传播的明显特征是
  • 工信部网站备案查询百度网站链接提交入口
  • 自己做简单网站价格互联网销售
  • wordpress app登陆seo排名公司
  • 网站定制开发流程google play应用商店
  • 深圳网站设计我选刻seo实战密码第三版
  • 北京门户网站制作查询网址域名ip地址
  • 展厅设计方案100例宁波seo外包服务
  • 桂林做网站的公司有哪些长沙seo优化哪家好
  • 重庆高端网站建设价格站长工具关键词
  • 山东省建设厅官方网站百度站长提交
  • vs2012解决方案做网站直播:英格兰vs法国
  • 石家庄微网站建设公司哪家好常用的关键词挖掘工具有哪些
  • 做的好的企业网站百度指数的使用方法
  • 什么网站做产品销售做的好福州短视频seo服务
  • 北京公司网站建设费用长沙seo优化报价
  • 网站建设宣传单页电脑优化软件推荐
  • 如何把学校网站建设好做一个企业网站需要多少钱
  • 专做美容师招聘网站搜索引擎下载安装
  • 郑州富士康公司简介seo优化有哪些
  • 温江网站制作站长工具站长
  • 长春作网站建设的公司运营推广渠道有哪些
  • 台州网站建设网站推广表白网页制作免费网站制作
  • 外贸单在哪些网站做上海网站关键词排名优化报价
  • 泰州专业网站建设制作广告投放是做什么的
  • 业务型网站做seo长沙网站优化推广方案
  • 测试学习之——Pytest Day4
  • 从零开始的云计算生活——番外5,使用ELK实现对应用日志的监控
  • LLM大模型微调技术与最佳实践
  • K8s与Helm实战:从入门到精通
  • 【Linux】基本指令详解(三) 指令本质、三个查找指令、打包压缩、重要热键、linux体系结构、命令行解释器
  • MyBatis-Flex代码生成