首页 > 其他分享 >WebGL的剪裁空间

WebGL的剪裁空间

时间:2023-08-19 17:35:28浏览次数:33  
标签:变换 WebGL 裁剪 投影 空间 剪裁

推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景

什么是WebGL的剪裁空间

WebGL的剪裁空间(Clipping Space)是在图形渲染过程中处理视图体积裁剪的一种特定空间。它是指定义在3D世界坐标系和屏幕窗口之间的虚拟空间,用于确定哪些图元将被渲染到屏幕上。

WebGL使用了透视投影或正交投影将3D场景转换为2D图像进行渲染,在这个过程中,可见性和裁剪是非常重要的步骤。剪裁空间定义了实际渲染到屏幕的区域,并决定了对象是否可见。

WebGL的剪裁空间是一个规范化的坐标空间,从-1到+1,其中x轴,y轴和z轴分别代表了屏幕的宽度、高度和深度范围。正视看,剪裁空间以屏幕中心为原点,向右为正x轴方向,向上为正y轴方向,向外为正z轴方向。所有位于剪裁空间范围外的几何图元都会被裁剪掉。

WebGL使用透视投影矩阵或正交投影矩阵将3D物体的坐标变换到剪裁空间。透视投影更常用,它在视锥体内将3D坐标投影到裁剪空间。透视投影矩阵创建了一个视锥体,其中靠近相机的物体更大,远离相机的物体变小。这种变换模拟了现实世界中的透视效果,使得远处的物体看起来较小。

要创建透视投影矩阵,需要指定视锥体的各个参数,如视场角、宽高比、近平面和远平面的距离。通过将3D物体的顶点坐标与透视投影矩阵相乘,可以获得在裁剪空间中的坐标。

例如,对于一个视场角为45度、宽高比为1:1、近平面距离为0.1、远平面距离为100的透视投影设置,可以使用以下 WebGL 代码:

// 创建透视投影矩阵
var fov = 45 * Math.PI / 180; // 视场角
var aspectRatio = canvas.width / canvas.height; // 宽高比
var near = 0.1; // 近平面距离
var far = 100; // 远平面距离

var projectionMatrix = mat4.create();
mat4.perspective(projectionMatrix, fov, aspectRatio, near, far);

// 将顶点坐标与透视投影矩阵相乘
var transformedVertex = vec4.create(); // 原始顶点坐标
var clipSpaceVertex = vec4.create(); // 裁剪空间中的顶点坐标

vec4.transformMat4(transformedVertex, originalVertex, projectionMatrix);
vec4.scale(clipSpaceVertex, transformedVertex, 1 / transformedVertex[3]); // 齐次除法

通过上述代码,可以将3D物体的顶点坐标转换成裁剪空间中的坐标。这样,在后续的渲染管线阶段中,裁剪掉位于裁剪空间之外的部分,并通过视口变换将其映射到屏幕上可见的区域,从而实现正确的渲染效果。

剪裁空间的原理

WebGL中的裁剪空间实现原理是基于透视投影和视口变换来完成的。

在OpenGL/WebGL中,场景中的三维物体首先通过模型矩阵进行变换,将其转换到世界坐标系中。接着,通过视图矩阵将这些物体从世界坐标系变换到相机/观察者坐标系。然后,使用投影矩阵将这些物体从观察者坐标系变换到裁剪空间。

裁剪空间是一个以相机为原点,范围在-1到1的立方体空间。经过投影矩阵变换后,物体在裁剪空间内被裁剪或者保留下来。位于裁剪空间之外的物体将被裁剪掉,只有位于裁剪空间内的部分才会被映射到屏幕上的可视区域内。

最后,通过视口变换将裁剪空间的内容映射到屏幕坐标系中。视口变换可以将裁剪空间的坐标映射到屏幕坐标系的像素位置,从而在屏幕上渲染出物体的可视投影。

总结起来,WebGL中的裁剪空间实现原理基于模型变换、观察者变换、投影变换和视口变换。这些变换的连续应用可以将三维场景中的物体正确地渲染到屏幕上。

原文链接:WebGL的剪裁空间 (mvrlink.com)

标签:变换,WebGL,裁剪,投影,空间,剪裁
From: https://www.cnblogs.com/mvrlink/p/17642759.html

相关文章

  • WebGL和OpenGL之间的差异
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景WebGL和OpenGL是与图形处理有关的技术标准,它们在计算机图形中扮演着重要的角色。本文将介绍WebGL和OpenGL的区别,并重点介绍"WebGL"和"OpenGL"的特点。一、WebGL简介WebGL(WebGraphicsLibrary)是一种用于在Web浏览器中......
  • 2D应用开发是选择WebGL 还是选择Canvas?
    推荐:使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景在介绍WebGL和Canvas的区别和联系之前,需要先了解它们各自的定义和特点。WebGL是一种基于标准HTML5的技术,用于在Web浏览器中实时渲染3D图形。它是由KhronosGroup开发的一套API(ApplicationProgrammingInterface),允许开......
  • 平面或空间中任意点的旋转
    平面或空间中任意点的旋转自己琢磨出来的。若有错误请指出。谢谢!1.旋转2D假设平面上有一个点\(P(x,y)\),旋转任意角度\(\beta\),求旋转后的点\(P'(x',y')\)。设平面坐标系上有一个半径为\(r\)的圆,圆心位于原点\(O\)。圆与\(x\)轴正坐标的交点为\(P_0(x_0,y_0)\)。\[P_0=......
  • EinScan-S软件构建物体的空间三维模型:编码结构光
      本文介绍基于EinScan-S软件,实现编码结构光方法的空间三维模型重建的具体操作。(基于EinScan-S的编码结构光方法空间三维模型重建)  上一篇文章3DSOM软件基于物体的照片构建空间三维模型的方法详细介绍了基于3DSOM的侧影轮廓方法物体空间三维模型重建;接下来,本文我们将在一款......
  • UWB精确定位问题(TOA定位(三维空间四点定位)matlab实现)
    一、原理方法四点定位(Four-AnchorPositioning)是一种基于距离测量的定位方法,通常采用TOA方法来计算目标物体到每个基站的距离。通过测量目标物体到至少四个基站的距离,并利用三角定位等算法计算出目标物体的位置。因此,四点定位属于TOA定位方法的一种。在UWB精确定位中,四点定位(Four-A......
  • 了解WebGL:在浏览器中实现高性能3D图形渲染的基础知识
    WebGL是一种基于OpenGLES2.0标准的3D图形渲染技术,它可以在浏览器中实现高性能的3D图形渲染。本文将介绍WebGL的基础知识,包括其应用场景、工作原理和常见的编程工具。应用场景WebGL可以用于创建各种类型的3D图形应用程序,例如游戏、可视化效果、建筑模型等。WebGL还可以与其他W......
  • centos7 centos-home 磁盘空间转移至centos-root下(磁盘空间不足,磁盘不足)
    在安装centos系统的时候,如果在安装时没有分配磁盘空间,选择的是默认分配的,根分区默认为50G大小,在安装完成后,可以发现大容量磁盘往往分配在了home下面。如果要把home下面的磁盘空间分配到root磁盘下面。可以进行如下操作1.查看CentOS的系统版本2.查看分区df-h(centos-home和c......
  • 【已解决】docker overlay2占用大量磁盘空间处理方法
    在使用docker容器的时候遇到了容量上的问题,做一个记录处理方式1:在使用docker时,往往会出现磁盘空间不足,导致该问题的通常原因是因为docker中部署的系统输出了大量的日志内容。此时,可通过手动或定时任务进行清除。针对/var/lib/docker/overlay2空间占用很大网上提供了很多解决方......
  • 3、掩膜剪裁 —— Extract by Mask
    下载了全球气候数据,需要裁剪出中国区域的气候数据裁剪前:SpatialAnalystTools->ExtractbyMask 裁剪后:  ......
  • K8S集群管理:用名字空间分隔系统资源
    Kubernetes的名字空间并不是一个实体对象,只是一个逻辑上的概念。它可以把集群切分成一个个彼此独立的区域,然后我们把对象放到这些区域里,就实现了类似容器技术里namespace的隔离效果,应用只能在自己的名字空间里分配资源和运行,不会干扰到其他名字空间里的应用。 Kubernetes面对大......