OpenGL 坐标系不在 -1 到 1

2023-12-14

我正在用 OpenGl 和 C++ 创建一个基本游戏,并希望当玩家到达屏幕边缘时他们无法再移动。我无法确定屏幕边缘在哪里。我知道Windows通常有一个介于1和-1之间的系统,但我的似乎更像是0.63到-0.63。玩家在屏幕上显示为一个方框,具有 x、y 和 z 位置,但它只能在 2D 空间中移动。

我想更改边界,使它们介于 -1 和 1 之间,而不是奇数。

我怎样才能做到这一点?

代码已上传至http://pastebin.com/jxd5YhHa.


如果您不打算动态更改投影矩阵,最简单的方法是调用

glScalef(.63f,.63f,1);

在你的投影矩阵上。

然后,您可以根据这些值限制移动。

要随时计算世界空间坐标,您应该使用 gluUnProject。 假设“x”和“y”分别是窗口的宽度和高度(您传递给 gluPerspective 的值),您可以像这样找到世界空间坐标:

double world_llx,world_lly,world_llz;
//world coordinates of lower left corner of window
gluUnProject(0, 0, 0, view_mat, proj_mat, viewport,&world_llx,&world_lly,&world_llz);
//world coordinate of upper right corner of window
double world_urx,world_ury,world_urz;
gluUnProject(x,y,0,view_mat,proj_mat,viewport,&world_urx,&world_ury,&world_urz);

view_mat 是你的视图矩阵。 proj_mat 是您的投影矩阵。您可以使用 glGetDouble* 和 GL_MODELVIEW_MATRIX 和 GL_PROJECTION_MATRIX 来获取这两个值。

视口参数可能与您的窗口具有相同的尺寸。无论如何,这就是您使用 glViewport 设置的内容。

假设您的 XZ 平面位于 z == 0。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL 坐标系不在 -1 到 1 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 用正态曲线绘制直方图并在seaborn中命名垃圾箱

    大家好 我正在尝试使用具有不同数据集的 seaborn 绘制以下类型的图 问题是 当使用直方图类型时 我无法命名箱 如 2 2 5 2 5 3 等 即使它提供了内核曲线 条形图没有绘制如图所示的正态曲线的功能 该图像似乎使用了SPSS统计包
  • 采用 HMACSHA512 加密的 AS3 Air 应用程序

    您好 我正在开发一个 Air 应用程序 需要使用 HMACSHA512 加密标准通过 http api 对消息进行身份验证和签名 我找到了一个 AS3 库 它可以查看商品https github com rubo flame但它已经为 Fl
  • 过滤掉 Pandas DataFrame 中的“空数组”值

    假设我有一个数据框 d其中有一列包含 Python 数组作为值 gt gt gt d pd DataFrame foo bar biz columns a b gt gt gt print d a b 0 foo bar 1 biz 现在
  • Getpivotdata 基于另一个单元格中的值的透视位置。

    GETPIVOTDATA Data 对另一张工作表的动态引用 Field Item 我正在努力让我的公式变得超级动态 我有 5 10 个不同的工作表 上面有数据透视表 我设置了其余的公式 以便从可以更改的小数据表中获取 FIELD 和 IT
  • Android 移动应用:室内地图、步行路线

    我想编辑一个自定义的 Google 地图 因为我需要添加步行的人行道 及其大学校园的所有原始功能 并创建包含具有多个楼层检测功能的教室的建筑物内部 以便我可以将其实现到移动应用程序中 这可以做到吗 那么用 JavaScript 呢 我认为
  • 在 iOS 中使用 Oauth 从 Fitbit 获取授权

    我想为 Fitbit 实施 OAuth 身份验证 以便从我的 iOS 应用程序中的 FitBit Api 读取数据 我注册了我的应用程序 并获得了 clientId 和客户端密钥 过去两天我一直在搜索教程 库 我对此一无所知 请建议我 No
  • :abc 上的属性查找 class_name 失败' aria-label='无法 pickle :abc 上的属性查找 class_name 失败'> 无法 pickle :abc 上的属性查找 class_name 失败

    当我尝试根据字典 cmdList 中定义的依赖关系创建依赖关系 子任务 时 出现上述错误 例如 BDX010 是 BDX020 的依赖项 我使用的是 Python 3 7 请参阅底部的堆栈跟踪以获取确切的错误消息 import luigi
  • 在更新语句中使用强制转换时mysql错误1292

    以下语句返回 错误代码 1292 截断不正确的整数值 95 00 1 132 秒 update new2006 set new2006 emp cast emp as unsigned where IsNum emp 0 但如果我使用下面的
  • jQuery 延迟不起作用

    transparent removeClass transparent delay 2000 addClass not transparent delay 4000 我有一个半透明的 div 然后想将其切换为不透明 但是 jQuery de
  • 尝试在 Ubuntu 上安装 OAuth 但出现错误

    我尝试在 Ubuntu Server 12 04 上安装 OAuth 但出现错误 我正在遵循本教程 但有些东西没有排列好 http sergiopvilar wordpress com 2013 05 18 how to install p
  • 具有Python投资组合优化方法的Finance Lib [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找 python 中的金融库 它提供了类似于 MATLAB 的方法门户锁 它用于优化投资组合 如果您了解线性代数 那么有一个任何库都应该支持
  • Python 中的 scipy.sparse dot 速度极慢

    以下代码在我的系统上甚至无法完成 import numpy as np from scipy import sparse p 100 n 50 X np random randn p n L sparse eye p p format cs
  • gcc 会跳过此检查有符号整数溢出吗?

    例如 给出以下代码 int f int n if n lt 0 return 0 n n 100 if n lt 0 return 0 return n 假设您传入一个非常接近整数溢出的数字 小于 100 编译器会生成给您负返回的代码吗 以
  • 模拟 WifiManager 以进行 Android 单元测试

    我正在尝试为几个依赖 WifiManager 和返回的 ScanResults 的类实现一些单元测试 我想做的是能够控制我收到的 ScanResults 以便测试各种不同的条件 不幸的是 成功模拟 WifiManager 对我来说相当困难
  • 从 pandas 数据帧写入 .csv 文件,并使用连续空格作为分隔符

    我想编写一个由四个空格而不是一个制表符分隔的文本文件 df to csv file sep s s s s 代替 df to csv file sep t 我尝试了正则表达式 df to csv file sep r s 4 哪个也不起作用
  • 检测 NSNumber 是否为零、nil 或 0

    我的核心数据中有一个变量 我想检测为零 空或其他没有好的值 例如 222 或 333 的情况 这应该是微不足道的 但我正在陷入 Objective C 的语法 以下代码是not在职的 if item id nil item id 0 do
  • Flot 条形图将条形与 X 轴标签对齐

    您好 我正在尝试绘制包含 31 天数据的条形图 然而 当我绘制它时 当我将条形图设置为时 每个数据的标签并不直接位于其条形图下方的中心 align center 第一个小节和最后一个小节被切成两半 这是jsfiddle http jsfid
  • 是否可以通过编辑 CSS 文件在 Bootstrap 4 中设置自定义断点?

    在我在这里完全被火焰击落之前 除了我的做法如下之外 我想不出任何其他方式来措辞或表达这个问题 我想在 Bootstrap 4 中为 1366px 和 1920px 设置 2 个额外的断点 因为 Bootstrap 的 xl 非常有限 只有
  • 在滚动条上覆盖 div

    我不想向下滚动页面来查看一堆 div 而是希望它们在滚动时叠加在同一个位置 一个叠在下一个上面 因此 您会向下滚动 但页面不会向下滚动 相反 下一个 div 将覆盖第一个 div 依此类推 不知道该怎么做 这是我所拥有的 UPDATE 这是
  • OpenGL 坐标系不在 -1 到 1

    我正在用 OpenGl 和 C 创建一个基本游戏 并希望当玩家到达屏幕边缘时他们无法再移动 我无法确定屏幕边缘在哪里 我知道Windows通常有一个介于1和 1之间的系统 但我的似乎更像是0 63到 0 63 玩家在屏幕上显示为一个方框 具