美文网首页
OpenGL 向量

OpenGL 向量

作者: Joker_King | 来源:发表于2020-07-16 21:10 被阅读0次

单位向量

在3D笛卡尔坐标系中,基本上一个顶点就是XYZ坐标空间上的一个位置,而在空间中给定的一个位置,恰恰是由一个单独的XYZ定义的,而这样的XYZ就是向量。

image
在X轴上的向量(1,0,0)。向量长度为1,我们称之为单位向量。
向量长度(向量的模)的计算公式。

单位化向量

如果向量不是单位向量,而我们把它缩放到1,那么这个过程就叫做标准化,将一个向量进行标准化就是把它的模缩为1,也叫单位化向量。

OpenGL如何定义向量

math3d库,有2个数据类型,能够表示一个三维和四维向量。

  • M3DVector3f可以表示一个三维向量(x,y,z)。
  • M3DVector4f则可以表示一个四维向向量(x,y,z,w)。

在典型情况下,w坐标设为1.0。x,y,z的值通过除以w,来进行缩放。而除以1.0则本质上不改变x,y,z的值。

代码参考

//三维向量/四维向量的声明
typedef float M3DVector3f[3]; 
typedef float M3DVector4f[4];
//声明⼀个三维向量 M3DVector3f:类型 vVector:变量名 M3DVector3f vVector;
//声明一个四维向量并初始化一个四维向量 
M3DVector4f vVertex = {0,0,1,1};
//声明⼀个三分量顶点数组,例如生成一个三角形 
M3DVector3f vVerts[] = {
-0.5f,0.0f,0.0f, 0.5f,0.0f,0.0f, 0.0f,0.5f,0.0f
};

向量、点乘

向量可以进行加法,减法计算。但是向量里有一个在开发中使用价值非常高的操作,叫做“点乘(dot product)”。点乘只能发生在2个向量之间进行;

2个(三维向量)单元向量之间进行点乘运算将得到一个标量(不是三维向量,是一个标量)。它表示两个向量之间的夹角。

前提条件:

  • 2个向量必须为单位向量。
  • 动作:2个三维向量之间进行点乘。
  • 结构:返回一个「-1,1]范围的值,这个值其实就是夹角的cos值(余弦值)

如何单位化向量?

(x/|xyz|, y/|xyz|, z/|xyz|);

使用一个非零相量除以它的模(向量的长度),就可以得到方向相同的单位向量。


image

math3d库中提供了关于点乘的API。

//1.m3dDotProduct3函数获得2个向量之间的点乘结果;
float m3dDotProduct3(const M3DVector3f u,const M3DVector3f v);
//2.m3dGetAngleBetweenVector3可获得2个向量之间夹角的弧度值;
float m3dGetAngleBetweenVector3(const M3DVector3f u,const
M3DVector3f v);

向量、叉乘

向量之间的叉乘(cross product)也是在业务开发里非常有用的一个计算方式;2个向量之间叉乘就可以得到另外一个向量,新的向量会与原来2个向量定义的平面垂直,同时进行叉乘,不必为单位向量。

  • 前提:2个普通向量;
  • 动作:向量与向量叉乘;
  • 向量(垂直于原来2个向量定义的平面的向量);
image

math3d库中提供了关于叉乘的API。

//1.m3dCrossProduct3函数获得2个向量之间的叉乘结果,得到一个新的向量。
void m3dCrossProduct3(M3DVector3f result,const M3DVector3f  u ,const M3DVector3f v);

相关文章

  • OpenGL 向量

    单位向量 在3D笛卡尔坐标系中,基本上一个顶点就是XYZ坐标空间上的一个位置,而在空间中给定的一个位置,恰恰是由一...

  • OpenGL--向量和矩阵

    在我们OpenGL中涉及到图形变换的时候经常会运用到向量/矩阵的运算。今天我们就来了解下OpenGL中的向量、矩阵...

  • 006---OpenGL基础变化

    [toc] OpenGL 矩阵向量 向量 一个顶点同时也是一个向量. 方向 数量 长度或模为1的 当前这个顶点为 ...

  • OpenGL笔记九:3D数学小记

    前言 期待您移步上篇:OpenGL笔记八:2D纹理坐标解析 向量大小计算: ||V|| : 为向量V的模。 向量与...

  • OpenGL 向量、矩阵

    向量 在坐标系上,一个顶点就是X,Y,Z坐标空间的一个位置。由一个单独的XYZ定义的这样就是向量。 单位向量 向量...

  • OpenGL向量、矩阵

    向量 在 3D 笛卡尔坐标系, 基本上一个顶点就是XYZ 坐标空间上的⼀个位置。而在空间中给定的一个位置恰是由一个...

  • OpenGL 向量/矩阵

    向量 什么是向量 在3D笛卡坐标系中,基本上,一个顶点就是XYZ坐标空间上的一个位置。而在空间中给定的一个位置,恰...

  • OpenGL-向量/矩阵变换/投影

    基本概念 向量 从坐标原点指向这个位置点的一个向量(带箭头的线段) 向量在OpenGL里对应的数据类型M3DVec...

  • 3d开发之opengl着色语言

    opengl着色语言基于c++,又完美的支持向量和矩阵的各种操作,拥有大量的内置函数来提供丰富的功能,opengl...

  • OpenGL 矩阵基础变化

    OpenGL⾥的矩阵/向量 向量:3个值(x、y、z)组合起来表示2个重要的值,⽅向和数量. 矩阵: 在OPenG...

网友评论

      本文标题:OpenGL 向量

      本文链接:https://www.haomeiwen.com/subject/lmgmhktx.html