- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
简单地说 - 我想使用透视投影从近裁剪平面绘制一条射线/线到远裁剪平面。我有我认为是使用各种 OpenGL/图形编程指南中描述的方法通过单击鼠标生成的正确标准化的世界坐标。
我遇到的问题是我的光线似乎是从近裁剪平面外绘制的。
背景:这是我在 Qt 中构建的一个简单的模型查看器,它需要一个拾取功能。我需要绘制光线以计算与场景中物体的交点。但是,我的基本问题是我似乎可以正确绘制射线。
我的透视投影定义为:
gluPerspective(_fov, aspect, 0.1, 100.0);
其中 _fov 为 45.0 度,纵横比为窗口宽度/高度的比率。
使用我的选择代码,我生成了我认为基于鼠标点击的正确标准化的世界坐标。这些坐标的示例:
-0.385753,-0.019608,-0.100000
但是,当我尝试从该点开始绘制射线时,看起来它是从裁剪平面外部绘制的:
也许我期待一些不同的东西,但在上面的例子中,我点击了飞机的机头,生成了上面的世界坐标,我错误地绘制了射线(或者我相信)。我希望看到从鼠标点击到飞机模型的位置绘制的线。
当我绘制射线时,我首先加载单位矩阵,然后从近裁剪平面坐标到远平面绘制一条线。然后我在光线的末端画了一个球体(在这个截图中它在平面后面)。
glPushMatrix();
glLoadIdentity();
glColor3f(0,0,1);
glBegin(GL_LINES);
glVertex3f(_near_ray.x(), _near_ray.y(), _near_ray.z());
glVertex3f(_far_ray.x(), _far_ray.y(), _far_ray.z());
glEnd();
glTranslatef(_far_ray.x(), _far_ray.y(), _far_ray.z());
glColor3f(1,0,0);
glutWireSphere(1, 10, 10);
glPopMatrix();
关于我做错了什么的任何提示? _far_ray
坐标与 _near_ray
相同,但 Z 场除外。我希望光线直接进入场景。
In The End... 我只想知道如何绘制射线本身。我知道生成坐标的代码中可能存在错误,但是如果我只想从近裁剪平面直接绘制任意光线到场景中怎么办。这是我想回答的问题。
1 Câu trả lời
在透视投影中,当且仅当一条线穿过眼睛位置时,它看起来像屏幕上的一个点。
由于您将模型 View 矩阵恢复为身份,因此眼睛位于原点(根据 this question )。将 (0, 0, 0) 作为顶点之一传递,希望您会看到该线退化为一个点。通常,用作顶点的两个 3d vector 必须共线。
如果不还原模型 View 矩阵,则可以从 (eye) 到 (eye + dir) 画一条线,其中 eye 是传递给 gluLookAt 的第一个 vector ,而 giám đốc 是任何足够大的 vector 寻找正确的方向。
关于c++ - 如何从带有透视投影的近裁剪平面绘制射线/线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31520197/
我想使用 li 和 ul 制作一个多级下拉列表,以便显示我博客中按年和月排序的所有文章。我希望我的下拉菜单看起来像 Google Blogspot 下拉菜单: 这是我的 CSS 和 HTML 代码 u
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我
我正在尝试让我的 PC 成为 Android 2.3.4 设备的 USB 主机,以便能够在不需要实际“附件”的情况下开发 API。为此,我需要将 PC 设置为 USB 主机和“设备”(在我的例子中是运
Thật khó để biết nên hỏi gì ở đây. Câu hỏi này mơ hồ, không đầy đủ, quá rộng hoặc mang tính tu từ và không thể trả lời hợp lý theo hình thức hiện tại. Để được trợ giúp làm rõ vấn đề này để có thể mở lại, hãy truy cập trung tâm trợ giúp. Đóng 9
我在设置服务器方面几乎是个新手,但遇到了一个问题。我有一个 Ubuntu 16.04 VPS 并安装了 Apache2 和 Tomcat7。我正在为 SSL 使用 LetsEncrypt 和 Cert
我在一个基于谷歌地图的项目上工作了超过 6 个月。我使用的是 Google Maps API V1 及其开发人员 API key 。当我尝试发布应用程序时,我了解到 Google API V1 已被弃
我是 Python 的新手,所以如果我对一些简单的事情感到困惑,请原谅。 我有一个这样的对象: class myObject(object): def __init__(self):
这个问题已经有答案了: How can I access object properties containing special characters? (2 个回答) 已关闭 9 年前。 我正在尝
我有下面的 CSS。我想要的是一种流体/液体(因为缺乏正确的术语)css。我正在为移动设备开发,当我改变模式时 从纵向 View 到陆地 View ,我希望它流畅。现在的图像 在陆地 View 中效
我正在尝试使用可以接受参数的缓存属性装饰器。 我查看了这个实现:http://www.daniweb.com/software-development/python/code/217241/a-cac
这个问题在这里已经有了答案: Understanding slicing (36 个答案) 关闭 6 年前。 以a = [1,2,3,4,5]为例。根据我的直觉,我认为 a[::-1] 与 a[0:
mysqldump -t -u root -p mytestdb mytable --where=datetime LIKE '2014-09%' 这就是我正在做的事情,它会返回: mysqldum
我正在制作销售税计算器,除了总支付金额部分外,其他一切都正常。在我的程序中,我希望能够输入一个数字并获得该项目的税额我还希望能够获得支付的总金额,包括交易中的税金。到目前为止,我编写的代码完成了所有这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是否必须进行任何额外的设置才能让 apache-airflow 在任务失败时向我发送电子邮件。我的配置文件中有以下内容(与默认值保持不变): [email] email_backend = airf
这个问题在这里已经有了答案: What does the $ symbol do in VBA? (5 个回答) 3年前关闭。 使用返回字符串(如 Left)的内置函数有什么区别吗?或使用与 $ 相同
我有一个用VB6编写的应用程序,我需要使用一个用.NET编写的库。有什么方法可以在我的应用程序上使用该库吗? 谢谢 最佳答案 这取决于。您可以控制.NET库吗? 如果是这样,则可以修改您的库,以便可以
当我创建一个以 ^ 开头的类方法时,我尝试调用它,它给了我一个错误。 class C { method ^test () { "Hi" } } dd C.new.test; Too m
我已经使用 bower 安装了 angularjs 和 materialjs。 凉亭安装 Angular Material 并将“ngMaterial”注入(inject)我的应用程序,但出现此错误。
Tôi là một lập trình viên xuất sắc, rất giỏi!