WebGL开发:加载图片配准

简介: WebGL开发:加载图片配准

WebGL可以加载图片纹理,图片可以根据设定的坐标变化,设置图片的尺寸等等。

一般在加载图片的时候,关键的是设置图片的像素位置坐标,如下边的坐标形式,按照顺序排列图片的位置。
image.png
图片的像素位置设置好以后,设置图片的尺寸,默认可以根据图片的长和宽进行加载,当x1和y1是0,0的时候,从左上角进行图片的加载,要想离开一点可以将x1和y1值调大些。
image.png
WebGL的vertex-shader(顶点着色器)中,需要将屏幕坐标,变换成渲染空间的坐标,下边一段是从WebGL基础网站复制下的,直接可以用,上边有英文说明。

attribute vec2 a_position; 

            attribute vec2 a_texCoord; 

            uniform vec2 u_resolution; 

            varying vec2 v_texCoord;  

            void main() { 

        // convert the rectangle from pixels to 0.0 to 1.0  

         vec2 zeroToOne =  a_position / u_resolution;  

        // convert from 0->1 to 0->2 

        vec2 zeroToTwo = zeroToOne * 2.0; 

        // convert from 0->2 to -1->+1 (clipspace) 

        vec2 clipSpace = zeroToTwo - 1.0; 

        gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); 

        // pass the texCoord to the fragment shader 

         // The GPU will interpolate this value between points.

         v_texCoord = a_texCoord;

                 }

WebGL的fragment-shader(片段着色器)中,我们只需要设置图片的颜色即可了,这也是参照webgl基础网站的代码。

precision mediump float; 

    // our texture 

    uniform sampler2D u_image;

    uniform vec2 u_res; 

       //the texCoords passed in from the vertex shader. 

        varying vec2 v_texCoord; 

    void main() 

    {  

             gl_FragColor = texture2D(u_image, v_texCoord);  

     }

当然说了以上这些,加载一张图片还是比较简单的,如果下边的背景是一个地图控件的话,如何让加载的图片和地图进行联动配准。

下边简要说一下思路:

一般地图都是按照web墨卡托进行切片的,第一级的切片尺寸是256*256,对应的经纬度范围是[-180,-90,180,90],根据这些我们就能换算第一级的时候,经纬度在第一级的切片像素位置,具体的算法参照以下的网址。

// -- converts latlon to pixels at zoom level 0 (for 256x256 tile size) , inverts y coord )

// -- source : http://build-failed.blogspot.cz/2013/02/displaying-webgl-data-on-google-maps.html

根据地图的四至范围,使用的是左上角的坐标,就能换算出来对应在第一级切片的像素位置。这样就能构建地图的变换矩阵translateMatrix,再根据地图的缩放级别,构建地图的缩放矩阵scaleMatrix,在地图发生变化的时候,往vertex-shader中传递矩阵,用矩阵和坐标进行相乘,就能使坐标发生变化,从而使图片进行覆盖变化。

gl_Position =u_matrix * a_position;

白色的图片是以半透明加载上去的,在地图移动时进行变化,半透明要改变shader中的颜色透明度。

gl_FragColor = vec4(floor(255.0 color 0.75) / 255.0);
image.png
webgl加载图片的效率也是相当高的,上边图片的大小是6M左右。

相关文章
|
8月前
|
存储 弹性计算 安全
从0到1看懂:阿里云服务器ECS是什么?详解、价格、优势及使用问题解答FAQ
阿里云ECS是基于飞天架构的弹性计算服务,提供高稳定、高性能、安全可靠的云服务器,支持多种计费模式与丰富规格族,适配企业应用、互联网、AI等上百种场景,助力用户实现算力随需所用、成本最优。
|
7月前
|
人工智能 安全 机器人
🔥🔥🔥阿里云无影云电脑一键部署OpenClaw(Clawdbot)图文教程
阿里云无影云电脑一键部署OpenClaw(Clawdbot)教程:3分钟极速启动,内置镜像预装OpenClaw及多款应用,支持钉钉、QQ、飞书等IM平台机器人快速集成,无需开发,配置API Key与通道密钥即可运行。
881 0
|
人工智能 运维 Cloud Native
【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析
在大数据与云原生技术快速发展的时代,开源技术成为推动行业进步的重要力量。本文深入探讨了三个备受瞩目的开源产品组件:DeepSeek、DataSophon 和 DolphinScheduler。DeepSeek 是专注于自然语言处理的大语言模型,具备多模态交互和高效推理功能;DataSophon 是大数据云原生平台的智能管家,提供快速部署和智能化运维;DolphinScheduler 则是分布式任务调度系统,支持复杂工作流的编排与执行。三者分别在大语言模型、大数据管理和任务调度领域展现了强大的技术实力,并通过技术互补共同推动AI与大数据技术的深度融合。
1986 2
【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析
|
C# 开发工具
【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码渐入最源端
【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码渐入最源端
315 0
|
关系型数据库 Java Linux
03_Weblogic之配置简单域:启动和配置域,使用模板创建域,使用控制台
 1 域:概览 是Oracle Weblogic Server的基本管理单元 始终包含一个配置为管理服务器的Oracle WebLogic Server实例 域中可以包括一些称为受管服务器的Oracle Weblogic Server实例(可选) 还可以包含协同工作的服务器实例的集群。
2539 0
|
存储 缓存 分布式计算
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
590 1
|
存储 Ubuntu Linux
Linux下7款最佳的开源视频播放器
Linux下7款最佳的开源视频播放器
6001 0
|
关系型数据库 PHP MySQL
httpd编译安装php
wget http://hk1.php.net/distributions/php-5.6.31.tar.gz yum groupinstall "Development Tools" yum install zlib openssl perl yum install httpd httpd-devel tar -xf php.
1269 0
|
5天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1696 6

热门文章

最新文章