- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试让 FPS 风格的相机工作,同时遵循 openGL SuperBible 书中的示例。
一切都进行得很顺利,直到我遇到了最终发生翻滚的问题,而您实际上只想要俯仰和偏航。
这个问题基本上是在问同样的事情,但我希望有人能够更详细地说明实现,最好是有 SuperBible GLTools 框架经验的人。
我已经尝试实现 GluLookAt code我必须对其进行编译,但要么是我在复制所需函数时犯了错误,要么是我在使用它时传递了错误的参数。
我想我发现它有点令人困惑,因为 SuperBible 代码抽象了一些相机的工作原理,所以我发现很难正确实现它。在测试我当前的版本时,我正在传递这样的参数
M3DMatrix44f mCamera;
cameraFrame.GetCameraMatrix(mCamera); //returns the matrix of the CameraFrame.
M3DVector3f up = { 0.0f, 1.0f, 0.0f };
M3DVector3f look = { xHeading,yHeading,0.0f };
//xHeading & yHeading ranges from -1 to 1 based on mouse movement, is this correct?
我应该如何管理和传递外观变量?目前看起来外观值停留在同一个地方,所以如果我向后移动,我最终会围绕场景旋转。
glhLookAtf2(mCamera, mCamera, look, up);
我觉得我必须更好地管理我的视线方向,可能还有我的相机位置。看起来位置似乎没有改变,这似乎很奇怪。
任何人都可以提供帮助,或为我指明可靠的教程路径吗?我试图避免做任何不赞成的事情,但在这一点上,我真的很高兴能得到一些工作。
最佳答案
这很容易。你只需要 3 个 vector 来处理相机:位置、相对 LookAt 和相对 Up vector
设置这 3 个后,您可以像这样将它们提供给 gluLookAt:
gluLookAt(camera.eye.x,camera.eye.y,camera.eye.z,
camera.lookAt.x,camera.lookAt.y,camera.lookAt.z,
camera.up.x,camera.up.y,camera.up.z);
不要混淆,camera.lookAt 是添加了眼睛 vector 的真实 LookAt:
camera.lookAt = camera.eye + camera.rLookAt;
所以这基本上应该包括设置相机。相机的下一个基本任务是移动。这要归功于相对简单的 LookAt 任务,因为您只更新眼 vector 。您可能还想更新绝对 LookAt,但那是我上面显示的同一段代码。
最后,您需要旋转 View 。棘手的是您可以使用 3 种解释 - 矩阵、3 个角度或四元数。因为角度很容易理解(另一方面,它们的性能最差并且会受到万向节锁定的影响)我将向您展示如何做到这一点。我不会描述万向节锁是什么,你可以谷歌这个,但为了避免它,我们需要限制旋转。我们将使用完整的 360° 进行水平旋转,但仅使用 180° 进行垂直旋转。如果你查看 openGl 坐标系,我们可以定义围绕 Y 轴的水平旋转和围绕 X 轴的垂直旋转。为了在应用程序中旋转 vector ,我们使用以下 2 个代码:
vector3f vector3f::rotateX(const float &radians)
{
float t_y = y;
y = t_y*cos(radians) + z*sin(radians);
z = t_y*-sin(radians) + z*cos(radians);
return *this;
}
vector3f vector3f::rotateY(const float &radians)
{
float t_x = x;
x = t_x*cos(radians) + z*-sin(radians);
z = t_x*sin(radians) + z*cos(radians);
return *this;
}
你可以看到我从我的代码中复制了这个。 vector3f 只是一个包含 3D vector 所有内容的类。 x、y 和 z 是定义 vector 的公共(public)成员。
因此,如果您想要俯仰,基本上是 rotateX 和偏航 rotateY。要更新相机,您需要同时旋转相对 LookAt 和 Up vector ,计算绝对 LookAt 并将其提供给 gluLookAt。就这样..
PS:少数人在 OSX 上编写 opengl 程序并非如此。我从未运行过 OSX,但作为跨平台的 openGl 肯定仍然很受欢迎。
PSS:我忘了说,永远不要添加轮换。最好添加角度,每次旋转设置 vector 到默认位置并以该绝对角度旋转:
rLookAt.set(0,0,-1);
rLookAt.rotateX(rotations.x);
rLookAt.rotateY(rotations.y);
lookAt = eye + rLookAt;
up.set(0,1,0);
up.rotateX(rotations.x);
up.rotateY(rotations.y);
关于c++ - 如何在 OSX(或跨平台)c++ 上实现没有 GLU 的 FPS 相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5545867/
我带着为 OSX 编写 PAM 模块的永无休止的传奇再次回来了。我已经写好了模块。它在使用 ssh 或启动新的终端窗口或 su 时有效。我真正真正想要的只是 ssh 和登录窗口。 我的 PAM 模块在
我们有一个类似于Soundflower的虚拟音频设备驱动程序。该虚拟设备将在声音系统首选项中列出。每当我们的设备在系统偏好设置中被选择时,它就会阻止空闲 sleep 。如果我们将选择切换为默认输出设备
我带着为 OSX 编写 PAM 模块的永无止境的传奇又回来了。我已经编写了模块。它在使用 ssh 或启动新的终端窗口或 su 时有效。我真的、真的、真的想要的只是 ssh 和登录窗口。 我的 PAM
我想在 osx lion 上安装 pyaudio,但我无法做到。每次我尝试使用 pkg 时,它都不会安装任何东西。当我尝试使用 pip 安装它时,出现以下错误(以及许多其他行): lipo: can'
我使用 Java 进行开发已有很长时间了,但直到最近才从 Windows 切换到 OSX。在 Windows 中,我发现一切都足够简单易懂。我可以将 JDK 安装到一个选择的位置,其中还包括一个 JR
运行 Mac OSX 10.7.5 我想在 USB3 外部硬盘上启用 NTFS 并需要 UUID 来执行此操作( http://ntfsonmac.com ),但 diskutil 拒绝给我 UUID
我正在尝试为 Finder 创建服务,但我的应用程序不需要有 UI。好吧,我只需要一个 UI 来请求用户提供更多信息,我的应用程序有时可能需要这些信息。 但是应用程序应该在没有任何 UI 且 Dock
我正在尝试在我的 mac 上使用本地服务器,但它似乎忽略了/etc/hosts 文件中的 localhost 设置。找到了几个页面,其中解决方案是重新安装,并将 localhost 放在/etc/ho
这是一个 OSX 链接器问题。我不认为 OSX(BSD 或 Mach 层)在乎零页有多大,或者它是否真的存在。我认为这是一个工具的事情。但这是我的意见,这就是我问的原因。 -pagezero_size
我正在构建一个将在 iOS/OSX 应用中使用的模块。 客户坚持认为该模块可以在 iOS 和 OSX 上运行。 我需要检查我在 iOS 和 OSX 上使用 UIDevice 时使用的系统版本 FTWD
我尝试在 OSX 10.8.2 中使用 gnuplot,并看到 x11 是不明确或未知的终端类型。一些研究表明 x11 不受支持,我下载了 XQartz,但我仍然收到相同的错误消息。 我使用 expo
我从官方网站下载了 PostgreSQL 并运行了 .dmg 安装程序。之后我下载了 pgadmin3,我确实能够连接到数据库。 当我运行“psql”时,出现以下错误: psql: could not
自从升级到 OSX Catalina 以来,我一直遇到 UnsatisfiedLinkErrors 问题,尝试在 java 下运行 JNI 包装的库,其中包含多个 native 库引用,这些引用在早期
在 OSX 10.6 上使用 make 构建 C++ 项目时,我确定预处理器定义 __LP64__ 似乎始终自动由编译器(即,它没有在任何头文件中定义)(参见 Where is __LP64__ de
我正在尝试将我的 iOS 应用程序移植到 Mac OS X SDK,并且发现我收到以下错误消息:'Collection' redeclared as a different kind of symbo
我一直在 OSX 10.14 中成功使用我的代码生成 Metal 纹理: let textureLoaderOptions = [MTKTextureLoader.Option.origin : MT
我对编码有些陌生,想用 MySQL 后端启动我的第一个 Django 应用程序。我已经在我的 Windows 机器上使用这个设置将近一年了,但它是一个继承的代码库——不幸的是,我从未尝试过从头开始构建
我正在迁移到一台新计算机,同时从雪豹迁移到狮子。 phpunit 似乎没有进行迁移,所以我重新安装了它。然而,pear 的标准安装似乎不适用于我的 php 家庭brew 安装。这是错误: phpuni
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 已关闭 7 年前。 Improve
我在 OSX10.9 上为我的应用程序构建了一个 Java 7 bundle ,一切看起来都很好,但是当我在 OSX 10.7 上尝试它时,它在启动时崩溃,它已经在 10.7.3 和 10.7.5 上
我是一名优秀的程序员,十分优秀!