WebGL编程指南-15 摄像机视角、视线、上方向概念

2023-10-18 11:20

本文主要是介绍WebGL编程指南-15 摄像机视角、视线、上方向概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.demo效果

在这里插入图片描述
如上图,三个不同的三角形展示在三维坐标系中

2.视点,视线,观察点,上方向

视点 指的是摄像机所处位置
视线 指的是摄像机观察的方向
观察点 指的是被观察目标所在的点
上方向 由于在视点与视线确定的情况下,摄像机还是可以沿着视线旋转的,所以还缺少一种信息描述摄像机的状态,那就是像上的方向(上方向)
在这里插入图片描述

3.视图矩阵

我们可以用视点、观察点、上方向者三个矢量创建一个 视图矩阵 ,这个视图矩阵会影响显示在屏幕上的视图,也就是会影响观察者观察到的场景,接下来我们看一下cuon-matrix.js 提供的 Matrix4.setLookAt() 函数

函数功能:根据视点(eyeX, eyeY, eyeZ)、观察点(atX, atY, atZ)、上方向(upX, upY, upZ)
创建视图矩阵,视图矩阵的类型是Matrix4,观察点映射到<canvas>的中心点
-----------------------------------------------------------------------------------
调用示例:Matrix4.setLookAt(eyeX, eyeY, eyeZ, atX, atY, atZ, upX, upY, upZ)
-----------------------------------------------------------------------------------
参数		eyeX, eyeY, eyeZ	指定视点atX, atY, atZ		指定观察点upX, upY, upZ		指定上方向,如果上方向是Y轴正方向,那么(upX,upY,upZ)就是(0,1,0)
-----------------------------------------------------------------------------------			
返回值		无
————————————————

4.demo代码

const VSHADER_SOURCE =`
attribute vec4 a_Position;
attribute vec4 a_Color;uniform mat4 u_ViewMatrix;
varying vec4 v_Color;void main() {gl_Position = u_ViewMatrix * a_Position;v_Color = a_Color;
}
`const FSHADER_SOURCE =`precision mediump float;varying vec4 v_Color;
void main() {gl_FragColor = v_Color;
}
`const main = () => {
debugger//获取绘制domconst canvas = document.getElementById('webgl');//获取canvas上下文const gl = canvas.getContext('webgl');//初始化着色器if (!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)) {return console.log('Failed to initialize shaders.')}const initVertexBuffers = (gl) => {const u_ViewMatrix = gl.getUniformLocation(gl.program, 'u_ViewMatrix');const viewMatrix = new Matrix4();viewMatrix.setLookAt(0.20, 0.25, 0.25, 0, 0, 0, 0, 1, 0);//类型化数组设置顶点坐标const vertices = new Float32Array([0.0, 0.5, -0.4, 0.4, 1.0, 0.4,-0.5, -0.5, -0.4, 0.4, 1.0, 0.4,0.5, -0.5, -0.4, 1.0, 0.4, 0.4,0.0, 0.5, -0.2, 1.0, 0.4, 0.4,-0.5, -0.5, -0.2, 1.0, 1.0, 0.4,0.5, -0.5, -0.2, 1.0, 1.0, 0.4,0.0, 0.5, 0.0, 0.4, 0.4, 1.0,-0.5, -0.5, 0.0, 0.4, 0.4, 1.0,0.5, -0.5, 0.0, 1.0, 0.4, 0.4]);const n = 9;//点的个数//创建缓冲区对象const vertexBuffer = gl.createBuffer();if (!vertexBuffer) {console.log('Failed to create the buffer object');return -1}//将缓冲区对象绑定到目标gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);//向缓冲区对象中写入数据gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);const a_Position = gl.getAttribLocation(gl.program, 'a_Position');const a_Color = gl.getAttribLocation(gl.program, 'a_Color');gl.uniformMatrix4fv(u_ViewMatrix, false, viewMatrix.elements)//将缓冲区对象分配给a_Position变量gl.vertexAttribPointer(a_Position, 3, gl.FLOAT, false, 4 * 6, 0);//链接a_Position变量与分配给它的缓冲区对象gl.enableVertexAttribArray(a_Position);gl.vertexAttribPointer(a_Color, 3, gl.FLOAT, false, 4 * 6,  4*3);gl.enableVertexAttribArray(a_Color);return n}const n = initVertexBuffers(gl);if (n < 0) {console.error('n<0')return}gl.clearColor(0.0, 0.0, 0.0, 1.0);//清空canvasgl.clear(gl.COLOR_BUFFER_BIT);//绘制一个点gl.drawArrays(gl.TRIANGLES, 0, n);}
main()

这篇关于WebGL编程指南-15 摄像机视角、视线、上方向概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/232220

相关文章

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

JavaScript错误处理避坑指南

《JavaScript错误处理避坑指南》JavaScript错误处理是编程过程中不可避免的部分,它涉及到识别、捕获和响应代码运行时可能出现的问题,本文将详细给大家介绍一下JavaScript错误处理的... 目录一、错误类型:三大“杀手”与应对策略1. 语法错误(SyntaxError)2. 运行时错误(R

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详