Articles of 转化

采用旋转视图matrix的挑选问题

如果我的视图matrix没有旋转(只有翻译),我select的代码工作。 现在,如果我旋转我的相机,采摘会下地狱。 我不能find什么是错的 我的代码: /*———————————————————– Function: GetViewportSystem Returns: viewportCoordSystem Get viewport coordinate system (only for reading) Forward ray goes through origin d = distance |camera, projection plane| cameraPos = position of camera in World Space lookAt = camera target in World Space ————————————————————-*/ ViewportCoordSystem Camera::GetViewportSystem() const { ViewportCoordSystem viewportCoord; viewportCoord.w = this->cameraPos; viewportCoord.w = this->cameraPos […]

固定两个Vector3位置之间的距离增量

我有两个Vector3职位: Vector3 start = new Vector3(1f, 1f, 1f); Vector3 target = new Vector3(5f, 5f, 5f); 如何将gameobjects从开始到目标转换为固定的数量,例如.1f? 这很容易用百分比来完成,因为你可以这样做: var dist = target – start; var d = 5f; // 5 increments var step = dist / d; while (start != target) { start += step; } 你如何做到这一点固定,而不是百分比的步骤。 假设我想在某个方向增加。 var dist = target – start; var step […]

在本地空间旋转/翻译对象

我只是想为游戏实体创建一个运动控制器类。 这些类将转换受鼠标和键盘input影响的实体。 我能够计算改变的旋转和新的globalPosition。 然后我乘以: newGlobalMatrix = changedRotationMatrix * oldGlobalMatrix; newGlobalMatrix = MatrixSetPosition(newPosition); 问题是对象围绕全局轴旋转而不是围绕本地轴旋转。 我使用XNAMath进行matrix计算。

无法弄清投影变换

我正在努力解决所有的空间转换问题,目前有一些我不能理解的不一致。 我正在开发2D游戏(所以我们假设Z现在总是为0),分辨率为960×544。 所以,就我所知,我的World Space是左上(0, 0)到右下(959, 543) , Y轴倒转(下移)。 令w = 960 , h = 544 。 为了将其转换为Eye Space我们需要将(0, 0)移动到屏幕的中心,所以这将是简单的翻译, viewT : 1, 0, 0, -w/2 0, 1, 0, -h/2 0, 0, 1, 0 0, 0, 0, 1 下一步是Clip Space 。 我想要渲染所有的世界空间,所以它只是缩放。 但是我们也需要反转Y轴,这是我不确定的部分。 我的假设是,我们只是为Y尺度添加减号,因此projT : 2/w, 0, 0, 0 0, -2/h, 0, 0 0, 0, 1, […]

在两点之间缩放精灵

我需要在scale1位置40( yPos1 )以一个比例.6( scale1 )开始一个精灵。 知道结束y位置560( yPos2 )和结束比例1( scale2 ): 如何计算yPos1和yPos2之间不同y位置的yPos2 ?

将偏斜转换为旋转+比例

我正在为Unity提供一个插件,从2Danimation软件中提取数据并将其转换为Unity Animator。 我被“skew”属性阻止。 当我在Y轴上倾斜对象时,以下是我在animation软件中获得的数据。 这是一个自定义(非常艺术)的绘图: 在Unity中进行一些手动testing之后,我知道可以用3D旋转和2D比例来获得相同的结果。 然而,我无法理解input和输出背后的math逻辑(我的math知识是有限的)。 你知道我怎么可以将歪斜转换成3d转换(旋转+缩放)? 任何帮助将不胜感激。

SDL和改变的运动方向之间的平滑过渡

我在位置(x,x)有一个对象。 每当用户按下其中一个箭头键时,使用SDL键盘事件将通过一个常数因子(例如:10)来转换对象(通过调用x和y轴的glTranslatef() )。 注:我将SDL窗口的左上角作为我的(0,0)位置 单击左键 – 将对象的X减less10 单击右箭头键 – 将对象的X增加10 单击向上箭头键 – 将对象的Y减less10 单击向下箭头键 – 将对象的Y减less10 为了允许对角线移动,我添加了四个布尔标志(每个箭头键一个),当检测到相应键的SDL_KEYDOWN事件时,这些标志被设置为真。 之后,我做了以下(宽度和高度是代表我的对象在屏幕上的纹理的大小): if(keyLeft) { if(x >= 10+width/2) x -= 10; // Check if the object doesn't go outside the window and translate else x = width/2; } if(keyRight) { if(x < 640-width/2) x += 10; else x = 640-width/2; […]

如何计算单个四元数的向前,向上和向右的向量?

给定一个四元数 float x, y, z, w; 一个四元数的向前,向上和向右的向量如何? vec3 up; vec3 forward; vec3 right; quat_get_all_axis(&quat, &up, &forward, &right); 这似乎有助于完成诸如向前/向后移动,扫射和跳跃之类的事情。

从QR码检测中检测变换?

我想计算我需要在我的世界中渲染3D对象的变换。 我如何看待我的想法: 你打开一个摄像头 你把它指向QR码 该应用程序检测QR码,并返回4个角落和正确的方向 应用程序计算此QR码当前处于的转换状态(我需要此步骤的帮助) 该应用程序使用该变换来呈现在QR码上的固定位置的3D对象 我想要像Vuforia这样的东西,但是需要QR码(经常使用)。 我真的不知道如何从检测到的QR码中提取变换(我将得到4个角的位置)

如何直接从四元数和位置vector创建视图matrix?

给定一个四元相机,以便: typedef struct { vector3 upReference; vector3 rightReference; vector3 forwardReference; vector3 position; quaternion orientation; float pov; } camera_t; 哪里: upReference,rightReference,forwardReference分别总是(0,1,0,1,0,0,0,0,-1) pov是可视角度 而四元数是: typedef struct { float x, y, z, w; } quaternion; 有没有办法直接创建一个视图matrix,并跳过gluLookAt?