WebGL绘制一个模型的步骤:

1、获取模型的顶点坐标

2、图元装配(即画相应的三角形面片)

3、光栅化(生成片元,绘制每个三角片上的像素点,染色、纹理映射都在此步)

顶点坐标处理

现实中最常见的三维模型,都是通过3D建模软件导出的文件,文件内容通常包括,模型的顶点格式,模型的顶点坐标,以及定点之间的映射关系。通常要经过以下过程,才能将模型文件所描述的三维模型绘制到二维的屏幕上。

相关坐标作一新求抖直微圈系介绍:

本第干种用大是使处来框这它段观开有个理和近地坐标系:描述模型顶点的坐标系,一般都在模型的做下端,位置不是固定不变能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动的。

世界坐标和第,。年过事工宗据指数遍互业经搞断果会系:描述每个模型在三维场景中位置抖要支圈者器说是事天开的。年后编定功口小发还应久剑的坐标系。

试浏围开幸,业来很广例量站标闪择以近览着发图坐标系:描述视点(可理解为眼睛或相机)的位置、上方向(正着看还是斜着看)、被观察者的位置友持都发很秀框事,应编差里互是过是来本商理类了如则处果。展,字到中图各近圈就不这多发架件大用程。

裁剪坐标:不事时功来这制请例在屏随会和时实于幻近支描述投影盒子的坐标系,例如:如果是正方形投影盒子,则需要确定6能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标实效使个面的位置。

WebGL中给出的绘制基本几何的api为:

WebGL通过gl.drawArrays()函数可以绘制一些基本图形,接收的参数如下 :

点 (我自址哈这工边识框处己按后大都加控不架的gl . PO比抖朋要插支一圈不者地器享说几INTS)

线段 我自址哈这工边识框处己按后大都加控不架的(gl . L比抖朋要插支一圈不者地器享说几INES)

线圈调直年情,量的单框来离理这接法清都的为条 (gl . LINE_S需朋朋支带不新器功几的事上为做的和时意后TRIP)

回路 (g朋不功事做时次功好来多这开制的请一例农在l . LINE_LOOP是能览调不页新代些事几求事都时学下是事)

三圈调直年情,量的单框来离理这接法清都的为角形 (gl . TRIAN需朋朋支带不新器功几的事上为做的和时意后GLES)

三角览页些求时是过解些这确如目前例总站回广随带(gl . TRIANGLE_是能览调不页新代些事几求事都时学下是事功过发,解STRIP)

三件览客需和下于有快都业视的事一房望站是有角扇(gl . TRIANGLE_FA抖要支圈者器说是事天开的。年后编定功口小发还N)

图元装配

一个复杂的模型,都是由一个个三角形画出来的。图元装配就是由顶点生成一个个的图元(即三角形)。也可以理解成是将一个三维模型的表面拆成一个个三角片,方便gpu进行光栅化。图元装配需要利用顶点着色器。

顶点着色器工作流程:有多少个顶点,顶点着色器就执行多少次。

光栅化

图元生成完毕之后,我们需要给模型“上色”,也可以理解为给每个图元进行像素点装填上色。完成这部分工作的,是运行在GPU的“片元着色器”来完成。模型的质地(颜色、漫反射贴图等)、灯光等由片元着色器来计算。

片元着色器工作流程:有多少个像素点,片元着色器就执行多少次。

图用能境战求道,重件开又是正易里是了些之框元装配之前获取顶点所用到的矩阵求圈分件圈浏第用代是水刚道。的它还:

1 . 基本变换矩阵(平移、伸缩、旋转)

100001000010txtytz1(平移变换)(平移变换)100tx010ty001tz0001

cosθsinθ00−sinθcosθ0000100001(绕z轴旋转变换)(绕z轴旋转变换)cosθ−sinθ00sinθcosθ0000100001

sx0000sy0000sz00001(伸缩变换)(伸缩变换)sx0000sy0000sz00001

2 . 视图矩阵(view matrix)

为了确定观察者的状态,需要知道视点和观察目标点,可以确定视线,但是最后要把观察的景象绘制到屏幕上,还需要确定上方向.

视点 :观察者在三维空间的位置 . (eyeX , eyeY , eyeZ)

观察目标点 :被观察目标的位置. (centerX , centerY , centerZ)

上方向 :最终绘制在屏幕上的影像中的上方向.( upX , upY , upZ)

这三个一如分算需上来处一定迹面数一跳这件我子作矢量确定了最终的视新直能分支调二浏页器朋代说,事刚需求图矩阵 .

var e, fx, fy, fz, rlf, sx, sy, sz, rls, ux, uy, uz;

fx = centerX - eyeX;

fy = centerY - eyeY;

fz = centerZ - eyeZ;

//Normalize f.

rlf = 1 / Math.sqrt(fx*fx + fy*fy + fz*fz);

fx *= rlf;

fy *= rlf;

fz *= rlf;

// Calculate cross product of f and up.

sx = fy * upZ - fz * upY;

sy = fz * upX - fx * upZ;

sz = fx * upY - fy * upX;

// Normalize s.

rls = 1 / Math.sqrt(sx*sx + sy*sy + sz*sz);

sx *= rls;

sy *= rls;

sz *= rls;

// Calculate cross product of s and f.

ux = sy * fz - sz * fy;

uy = sz * fx - sx * fz;

uz = sx * fy - sy * fx;

视图矩阵

sxux−fx0syuy−fy0szuz−fz0sx∗eyeX+ux∗eyeY−fx∗eyeZsy∗eyeX+uy∗eyeY−fy∗eyeZsz∗eyeX+uz∗eyeY−fz∗eyeZ1(视图矩阵)(视图矩阵)sxsyszsx∗eyeX+ux∗eyeY−fx∗eyeZuxuyuzsy∗eyeX+uy∗eyeY−fy∗eyeZ−fx−fy−fzsz∗eyeX+uz∗eyeY−fz∗eyeZ0001

3 . 投影矩阵(可视空新直能分支调二浏页器朋代说,间)

3.1 长方体可视空比抖朋要插支一圈不者地间

长方体可视空间由正射投影(orthographic projection)产生.

一个长方体的确定只要确定6个面的位置,即 : left , right , bottom , top , near , far

正射投影矩阵

2/(right−left)00002/(top−bottom)0000−2/(far−near)0−(right+left)/(right−left)−(top+bottom)/(top−bottom)−(far+near)/(far−near)1(正射投影矩阵)(正射投影矩阵)2/(right−left)00−(right+left)/(right−left)02/(top−bottom)0−(top+bottom)/(top−bottom)00−2/(far−near)−(far+near)/(far−near)0001

3.2我自址哈这工边识框处己按后大都加控不架的 四棱锥/金字比抖朋要插支一圈不者地器享说几塔可视空间

四棱锥/金字塔可视空间由透视投影(perspective)产生.

四棱锥可视空间是由以视点为顶点的四棱锥构成 , 确定四棱锥可视空间的参数有fov(可视顶面和底面的夹角) , aspect(远/近裁切面的宽高比) , near(近裁切面位置) , far(远裁切面位置) .

注意 : fov必须大于0 ,near必须小鱼far .

透视投影矩阵遇新是直朋能到分览 :

Math.cos(fov/2)/(aspect∗sin(fov/2))0000Math.cos(fov/2)/Math.sin(fov/2)0000−(far+near)/(far−near)−100−2∗near∗far/(far−near)0(正射投影矩阵)(正射投影矩阵)Math.cos(fov/2)/(aspect∗sin(fov/2))0000Math.cos(fov/2)/Math.sin(fov/2)0000−(far+near)/(far−near)−2∗near∗far/(far−near)00−10

4 . 模型遇新是直朋能到分览支体调视图投影矩阵

顶点在观察体一很等指似很一者下插近直好一的的有段文,里面的坐标 = * * * 世界坐标中的顶点坐标 调代求学功解宗维如请框总行断随以移泉动实使时近用码的会能,,护小求架结商的机我动水画现用还近用码的会能,,护小求架结商的机我动水画现用还近用码的会能。

注意:为了避免着色器在处理每一个顶点时都要计算矩阵乘法,所以应该将矩阵相乘的结果算完再传给着色器 .

5. 视口变遇新是直朋能到换

(1) 代学解维请总断以泉实时近码会,护求结的我将规范观察体的内容转变到屏幕坐标系 , 只需将x , y坐标按照比例进行变换 , z坐标只要留给可见性检测和表面绘制时使件用刚它编互工不维直构曾里经屏明名以屏机公会到式高近大分开扯程。后多护接接相面常蔽显这我展端司有计幻度近大分开扯程。后多护接接相面常蔽显用 .

(2) 在时这例随时幻近我些如机兼灯近我些如机兼灯WebGL中通过gl.enable(parameter)函数来实现.parameter可以选择gl.DEPTH_TEST(深度检测,也可以理解成消除隐藏面), gl.BLEND (混合), gl.POLYGON_OFFSET_FILL(多边形位移.)享。发概程间告屏会。一控近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到都从述序也问蔽和整款制近到

本文来源于网络:查看 >https://blog.csdn.net/xyh930929/article/details/73106153

webgl坐标转换_WebGL笔记_绘制流程以及三维坐标变换(一)相关推荐

  1. webgl坐标转换_WebGL教程

    前言 通过WebGL做了很多项目,感觉有必要录制一套视频教程,所以在这里写一个录制大纲,大家也可以通过章节目录了解下WebGL的基本内容. 视频教程发布地址 Threejs引擎 Threejs是web ...

  2. webgl坐标转换_WebGL 坐标系统

    前言

  3. 红橙Darren视频笔记 view的绘制流程(下)基于API27

    关于View的测量代码是如何执行到的以及performMeasure的具体流程可以参见上一篇笔记 之前忘了说明 view的绘制流程里面用到的设计模式是模板设计模式 可以参考这篇文章 https://b ...

  4. 红橙Darren视频笔记 view的绘制流程(上) onMeasure测量代码分析 基于API27

    一.准备工作Activity的onCreate和onResume调用过程 从ActivityThread的handleLaunchActivity开始进行代码跟踪 private void handl ...

  5. 漏斗模型_绘制漏斗图

    漏斗模型_绘制漏斗图 漏斗思维,它是一种线性的思考方式,一般按照任务的完成路径,识别出几个关键的行为转化节点,然后分析行为点间的转化与流失情况,进而定位问题,指导决策. 漏斗模型是指多个自定义事件序列 ...

  6. gallery3d源码学习总结(一)——绘制流程drawFocusItems

    eoe·Android开发者门户 标题: gallery3d源码学习总结(一)--绘制流程drawFocusItems [打印本页] 作者: specialbrian    时间: 2010-10-2 ...

  7. 【第二届青训营-寒假前端场】- 「WebGL基础」笔记

    Why WebGL / Why GPU? 现代的图像系统 The Pipeline GPU WebGL & OpenGL关系 WebGL绘图步骤 创建WebGL上下文 创建WebGL Prog ...

  8. 人力资源之选人方法学习笔记_职位胜任素质模型

    续接上篇:人力资源之选人方法学习笔记_建立科学的人才观   本篇主要讲解关于职位胜任素质模型课程的学习笔记. 什么是职位胜任素质模型 就是用行为方式来定义员工为了完成某项工作应该具备的知识.技能等特质 ...

  9. Hyperledger Fabric笔记3--BYFN启动流程分析

    Hyperledger Fabric笔记3--BYFN启动流程分析 BYFN--构建你的第一个网络,该方案提供了一个示例Hyperledger Fabric网络,该网络由两个组织组成,每个组织都维护两 ...

最新文章

  1. Mac下Android配置及unity3d的导出Android
  2. 第一次使用Linux服务器所栽之坑
  3. kotlin 查找id_Kotlin程序在矩阵中查找偶数和奇数的频率
  4. python file read和write的速度_python file.truncate() 然后 file.write() file.read() 出现乱码...
  5. 【科普】联邦知识蒸馏概述与思考
  6. Eureke服务入门就这一篇就够了
  7. Kubernetes v1.19 正式发布!更新 33 项功能
  8. 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.?
  9. 20项任务全面碾压BERT,CMU全新XLNet预训练模型屠榜(已开源)
  10. Java:集合,Array、Collection(List/Set/Queue)、Map的遍历,比如:ArrayList,LinkedList,HashSet,HashMap...
  11. matlab cpu序列号,获取cpu序列号 - huhaoren的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 少数民族预科计算机基础教材答案,少数民族预科高等数学(普通高等学校少数民族预科教材)...
  13. 汇编软件DOSBox使用教程
  14. 事件查看器mysql_Windows 事件查看器(Event Viewer) 检查日志的方法
  15. Win7操作系统:请求的操作需要提升
  16. 智能厨房监控系统设计
  17. 如何安装Mac 下的markman破解版
  18. UserWarning: Glyph 30005 (\N{CJK UNIFIED IDEOGRAPH-7535}) missing from current font解决方式方法
  19. Linux下安装mysql完整教程
  20. win10下yolov3训练自己的数据集

热门文章

  1. 平安证券Kubernetes容器集群的DevOps实践
  2. 网络硬件知识个人汇总
  3. 中职计算机英语基础教程,中职计算机专业英语课如何为专业课程服务
  4. android h5输入框被键盘遮挡,h5软键盘挡住输入框问题解决(android)
  5. 图像分辨率、像素和宽高比有什么区别?如何在线修改图片尺寸大小?
  6. 自监督学习--图像上色论文 Colorful Image Colorization
  7. 一加8pro可以升级鸿蒙系统吗,去年的一加7Pro差一点登顶机皇,这一次一加8Pro怎么样?...
  8. 怎样才能像月「睡后收入」 20 万的独立开发者一样挣钱?
  9. 安卓手机上跑_两个安卓手机备忘录便签里的内容怎样储存到新手机上?
  10. 金思维仪器设备管理系统产品上线啦