zoukankan      html  css  js  c++  java
  • 读书笔记

    读书笔记 - js高级程序设计 - 第十三章 事件
     
    canvas
    具备绘图能力的2D上下文 及文本API
    很多浏览器对WebGL的3D上下文支持还不够好
     
    有时候即使浏览器支持,操作系统如果缺缺乏必要的绘图驱动程序,则浏览器即使支持了也没用
     
    <canvas>
    var drawing = document.getElementById("drawing");
    if( drawing.getContext ){
        drawing.getContext("2d");
    }
    toDataURL
    可以导出在canvas元素上绘制的图像
    var src = drawing.toDataURL("image/png");
    注意toDataURL是canvas对象的方法,不是上下文对象的方法
    填充色 描边色
    var context = drawing.getContext("2d")
    context.strokeStyle = "red;
    context.fillStyle = "#0000ff";
    绘制矩形
    fillRect( x,y,width,height);
    strokeRect( x,y,width,height);
    clearRect( x,y,width,height);
    lineWidth
    lineGap butt round square
    lineJoin round bevel miter
    绘制路径
    beginPath()
     
    arc() 画弧线
    arcTo 从上一点开始绘制一条弧线
    bezierCurveTo 穿过一个点 ,把两个点用弧线连起来
    lineTo(x,y) 绘制直线
    moveTo() 移动 不绘线
    quadraticCurveTo( cx,cy,x,y ) 从上一点开发绘制一条二次曲线,到x,y为止,并且以cx cy为控制点
    rect() 绘制一条矩形线路
     
    closePath
    fillStyle fill()
    stokeStyle stoke()
    clip()
    isPointInPath 确定画面上的某一点是否位于路径上
    绘制文本
    fillText( str,x ,y ,最大像素宽度 )
    strokeText( str, x, y, 最大像素宽度 )
     
    font "px Arial"
    textAlign  start end left right center 
    textBaseline top hanging middle alphabetic ideographic bottom
    measureText()
    var fontSize = 100 
    context.font = fontSize + "px Arial";
    while( context.measureText("Hello world?").width > 140 ){
       fontSize -- ;
       context.font = fontSize + "px Arial" ;
    }
    context.fillText( "hello world!", 10, 10 ) ;
    context.fillText("font size is" + fontSize + "px", 10, 50 ) ;
    绘制变换
    rotate( angle );
    scale( scaleX, saleY ) 缩放图像 
    translate( x, y ) 更改原点
    transform() 修改变换矩阵
    setTransform() 先变换矩阵重置为默认状态,然后再调用 transform()
    绘制变化和恢复
    save 
    restore
    绘制图像
    var image = document.images[0] ;
    context.drawImage( image, x, y, width, height ) ;
    还可以
    context.drawImage( image, orginalX, originalY, originalWidth, originalHeight, x, y, width, height ) ;
    image这个参数也可以传其它canvas
    阴影
    只在在绘制前为它们设置适当的值,就能自动产生阴影
    var context = drawing.getContext("2d");
    context.shadowOffsetX = 5 ;
    context.shadowOffsetY = 5 ;
    context.shadowBlur = 4 ;
    context.shadowColor = "rgba(0,0,0,0.5 ) ;
    渐变
    由CanvasGradient实例来演示
    var gradient = context.createLinearGradient( 30, 30, 70, 70 );
    gradient.addColorStop( 0, "white" ) ;
    gradient.addColorStop( 1, "black" ) ;
    context.fillStyle = gradient ;
    context.fillRect( 30, 30, 50, 50 ) ;
    注意要确保坐标匹配
      createRadialGradient()方法 放射渐变
    模式
    就是重复的图像
    pattern = context.createPattern( image, "repeat");
    context.fillStyle = pattern ;
    context.fillRect ( 10, 10, 150, 150 ) ;
    注意 模式与渐变一样,都是从原点开始的,并不是要从某个位置开始绘制重复的图像.
    createPattern的第一个元素,也可以是video元素 或另一个canvas元素
    使用图像数据
    var imageData = context.getImageData( 10, 5, 50, 50 ) ;
    这里返回的对象是ImageData的实例,每个实例对象有三个属性 width height data
    data属性是一个数组,保存着图像中每一个像素的数据.
    可以修改它,然后回写图像数据
    imageData.data = data ;
    context.putImageData( imageData, 0, 0 ) ;
     
    用上述方法可以实现灰阶过滤器
    合成
    globalAlpha 全局透明度
    globalCompositionOperation表示后绘制的图形怎样与先绘制的图形结合
     
    这个属性的值是字符串,可能的值如下
    source-over 默认值:
    source-out 
    source-atop 
    destination-over 
    destination-in
    destination-out
    destination-atop
    lighter
    copy
    xor
    WebGL
    针对Canvas的3D 上下文
    www.learningwebgl.com 有非常棒的教程
     
    类型化数组  typed arrays ,类型化数组也是数组.
    ArrayBuffer的类型
    var buffer = new ArrayBuffer( 20 ) ;// 分配20B
    var num = buffer.byteLenght // 10 ;
     
    var view = new DataView( buffer, 可选的字节偏移量,可选的要选择的字节数);
    类型化视图 继承自DataView
    WebGL上下文
    var drawing = document.getElementById("drawing");
    var param = {};
    param.alpha = tue ;
    param.depth = true 16位
    param.stencil = // 可能使用8位模板缓冲区 默认值是false
    param.antialias //表示将使用默认机制执行抗锯齿操作。默认值是true
    param.premultipliedAlpha //值为true, 表示组图缓冲区有预乘Alph
    param.preserveDrawingBuffer //值为true, 表示在组图完成后保留绘图缓冲区
    if( drawing.getContext ){
      var gl = drawing.getContext("experimental-webgl");
      if( gl ){
          //使用WebGL 
       }
    }
    WebGL常量 gl.COLOR_BUFFER_BIT
    方法命名
    类似
    gl.uniform4f() 接收4个浮点数
    gl.uniform3i() 接收3个整数
    gl.uniform3iv()  接收包含3个整数的数组
    准备绘图
    gl.clearColor(0,0,0,1);
    gl.clear( gl.COLOR_BUFFER_BIT ) ;
    先清理缓冲区,然后再执行其它绘图操作
    视口与坐标
    gl.viewport( x, y, width, height );
    坐标原点在左下角
      在视口内部 坐标原点是视口的中心
    缓冲区
    gl.createBuffer();
    bindBuffer
    bufferData
    gl.getError()
    着色器 shader 顶点着色器 和 片段着色器
    编写着色器  
    编写着色器程序  
    为着色器传入值  
    绘图 只能绘制点 线 三角
    纹理 gl.createTexture() 然后再将一幅图像绑定到该纹理
    读取像素
    readPixels()
    像素信息是从帧缓冲区读取的 
    支持
    Firefox4+ chrome Safari 5.1 都实现了WebGL API
    但Safari里默认是禁用的
     
    在使用WebGL之前,最好检测其是否得到了机算机驱动的支持,而不只是检测监测特定的浏览器版本。
     
    WebGL是一个正在制定的发展中的规范,函数名 签名 数据类型 都有可能改变
    可以说 WebGL目前只适合实验性地学习,不适合真正开发和应用.d
     
     
  • 相关阅读:
    Codeforces_462_B
    Codeforces_460_B
    Codeforces_456_A
    2016.11.27
    Buy the Ticket{HDU1133}
    高精度模板
    盐水的故事[HDU1408]
    测试你是否和LTC水平一样高[HDU1407]
    完数[HDU1406]
    Air Raid[HDU1151]
  • 原文地址:https://www.cnblogs.com/jason-beijing/p/7261362.html
Copyright © 2011-2022 走看看