向量叉乘

OpenGL学习笔记《七》摄像机

♀尐吖头ヾ 提交于 2019-12-01 10:09:40
  在上一篇写opengl坐标系统的文章中,有提到视图空间(View Space),也可以称之为摄像机空间,即从摄像机角度去观察对象。MVP转换矩阵中,上篇文章给了一个简单的视图矩阵(View Matrix)将世界空间坐标转换到视图空间坐标,即相对于摄像机的坐标。   opengl中实际上并没有直接提供摄像机对象,我们是根据一系列的向量运算在游戏空间中创建了一个摄像机对象,并生成对应的视图矩阵(View Matrix)。   创建一个摄像机对象,我们需要构建对应的坐标体系。首先,我们需要知道我们是从哪里观察/用摄像机拍摄,所以需要确定一个摄像机的坐标。在opengl的右手坐标系下,我们先假定摄像机坐标是cameraPos=(0,0,3),即z轴正方向3个单位的位置;确定了摄像机的位置之后,利用 向量减法 ,我们可以从原点出发得到摄像机的方向,cameraDir = vp - vo,不过我们在这里得到的方向其实是摄像机拍摄方向的反反向;   得到了摄像机方向,再利用一个世界空间内相对于原点的单位向量up=(0,1,0),使用 向量叉乘 ,我们可以得到右轴向量,cameraRight = up x cameraDir;   最后,根据摄像机方向,右轴,再使用 向量叉乘 ,我们可以得到上轴向量,cameraUp = cameraDir x cameraRight;   利用上述得到的方向

向量点乘叉乘推导公式

情到浓时终转凉″ 提交于 2019-11-29 14:33:43
点乘 推导公式1: a•b = ax*bx + ay*by = (|a|*sinθ1) * (|b| * sinθ2) + (|a| * cosθ1) * (|b| * cosθ2) = |a||b|(sinθ1*sinθ2 + cosθ1*cosθ2) =|a||b|(cos(θ1-θ2)) = |a||b|cosθ 推导公式2: 几何意义是:是一条边向另一条边的投影乘以另一条边的长度 叉乘: 来源: https://www.cnblogs.com/honghong87/p/11517634.html

几何的简单操作

点点圈 提交于 2019-11-29 08:30:34
点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影,有公式: a·b>0 方向基本相同,夹角在0°到90°之间 a·b=0 正交,相互垂直 a·b<0 方向基本相反,夹角在90°到180°之间 //矩阵乘法 #include <bits/stdc++.h> using namespace std; #define N 100 int a[N][N],b[N][N],c[N][N]; int main() { int m,s,n; scanf("%d%d%d",&m,&s,&n); for(int i =1;i<=n;i++){ for(int j =1;j<=s;j++){ scanf("%d",&a[i][j]); } } for(int i =1;i<=s;i++){ for(int j =1;j<=n;j++){ scanf("%d",&b[i][j]); } } for(int i=1;i<=m;i++){ for(int j =1;j<=n;j++){ for(int k =1;k<=s;k++){ c[i][j]+=a[i][k]*b[k][j]; } } } for(int i =1;i<=m;i++){ for(int j=1;j<=n;j++){ printf("%d ",c[i][j]); } printf("\n"); }

Unity 求两个物体的夹角

左心房为你撑大大i 提交于 2019-11-28 13:20:24
1.点乘公式:a·b=|a|·|b|cos<a,b> ,其中|a|和|b|表示向量的模,<a,b>表示两个向量的夹角。Unity中用Vector3.Dot()求点乘。 点乘结果=0,两向量垂直;点乘结果>0,两向量夹角小于90°;点乘结果<0,两向量夹角大于90°。 2.叉乘公式:c =a x b 其中a,b,c均为向量,结果向量c垂直于a,b向量所在的平面。Unity中用Vector3.Cross()求叉乘。 简单说,点乘判断角度,叉乘判断方向。 public class CalculateAngle : MonoBehaviour { public GameObject Cylinder1; public GameObject Cylinder2; // Use this for initialization void Start () { } // Update is called once per frame void Update () { GetAngle(); } public void GetAngle() { //点乘 float dot = Vector3.Dot(Cylinder1.transform.right, Cylinder2.transform.up); //弧度转角度 float angle = Mathf.Acos(dot) * Mathf

摄像机+LookAt矩阵+视角移动+欧拉角

牧云@^-^@ 提交于 2019-11-27 00:30:03
一: 摄像机 OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。 要定义一个摄像机,我们需要它在世界空间中的位置、观察的方向、一个指向它右测的向量以及一个指向它上方的向量。 实际上创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系。 摄像机位置:摄像机位置简单来说就是世界空间中一个指向摄像机位置的向量。 glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f); ** 摄像机方向 :这里指的是 摄像机指向哪个方向。 现在我们让摄像机指向场景原点:(0, 0, 0)。 2.1 用场景原点向量减去摄像机位置向量的结果就是摄像机的指向向量。 2.2 由于我们知道摄像机指向z轴负方向,但我们希望方向向量(Direction Vector)指向摄像机的z轴正方向。如果我们交换相减的顺序,我们就会获得一个指向摄像机正z轴方向的向量: glm::vec3 cameraTarget = glm::vec3(0.0f, 0.0f, 0.0f);//表示摄像机指向的地方,即原点 glm::vec3