相关疑难解决方法(0)

透视投影 - 帮助一个菜鸟

我希望确定3D空间(x,y,z)中点的2D屏幕坐标(x,y).

我希望投射的点是由GPS坐标和海拔高度表示的真实世界点.

例如:Point(Lat:49.291882,Long:-123.131676,Height:14m)

摄像机位置和高度也可以确定为ax,y,z点.我还有相机的标题(罗盘度),它的倾斜度(地平线上方/下方)和滚动(绕z轴).

我没有3D编程的经验,因此,我已经阅读了透视投影的主题,并了解到它需要矩阵,变换等知识 - 所有这些都使我目前感到困惑.

有人告诉我,OpenGL可能用于构建真实世界点的3D模型,设置相机方向并检索3D点的2D坐标.

但是,我不确定使用OpenGL是否是解决此问题的最佳解决方案,即使它是我不知道如何创建模型,设置相机等

有人可以提出解决问题的最佳方法吗?如果OpenGL是一个可行的解决方案,我必须使用OpenGL ES,如果这有任何区别.哦,无论我选择哪种解决方案,都必须快速执行.

谢谢你的帮助

java opengl projection

14
推荐指数
2
解决办法
1万
查看次数

如何从3D点获取屏幕坐标?OpenGL的

我已经看到很多屏幕坐标到世界坐标帖,但没有看到相反的情况.有一种简单的方法可以从三维点获取屏幕坐标,从我查看的任何角度来看?我正在使用C++和opengl

c++ opengl

11
推荐指数
2
解决办法
2万
查看次数

gluProject将3D坐标转换为2D坐标不会正确转换2D Y坐标

经过两个小时的谷歌搜索(这里,这里,这里,这里,这里,以及其他一些我不想找到的东西),我以为我终于学会了将3D坐标转换为2D坐标的理论.但它没有用.我们的想法是将船舶的3D坐标转换为屏幕上的2D坐标,以呈现控制该船舶的玩家的用户名.

但是,文本呈现在错误的位置: 在此输入图像描述

文本是"Test || 2DXCoordinate || 2DZCoordinate".

这是我的getScreenCoords()- 将3D坐标转换为2D.

public static int[] getScreenCoords(double x, double y, double z) {
    FloatBuffer screenCoords = BufferUtils.createFloatBuffer(4);
    IntBuffer viewport = BufferUtils.createIntBuffer(16);
    FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
    FloatBuffer projection = BufferUtils.createFloatBuffer(16);
    GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelView);
    GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection);
    GL11.glGetInteger(GL11.GL_VIEWPORT, viewport);
    boolean result = GLU.gluProject((float) x, (float) y, (float) z, modelView, projection, viewport, screenCoords);
    if (result) {
        return new int[] { (int) screenCoords.get(0), (int) screenCoords.get(1) };
    }
    return …
Run Code Online (Sandbox Code Playgroud)

java opengl lwjgl glu

8
推荐指数
1
解决办法
1503
查看次数

3D透视投影的剪辑矩阵

我正在尝试创建一个简单的3D图形引擎,并找到并使用我在这里找到的方程式:http://en.wikipedia.org/wiki/3D_projection#cite_note-0.(我有Dx,Dy,Dz和Bx的计算,By)

我工作,但当我旋转相机时,足够的线条开始飞到整个地方,最终你看到屏幕上的多边形开始回到屏幕的另一侧(你可以去这里:http:// mobile. sheridanc.on.ca/~claassen/3d.html并使用W,A,S和D键旋转相机以查看我在说什么

我读到了这个讨论:如何将3D点转换为2D透视投影?他谈到使用剪辑矩阵,但我仍然有点混淆如何使用一个.此外,我不确定我是否正在使用讨论中所述的"齐次坐标".

3d graphics projection matrix clip

5
推荐指数
1
解决办法
6828
查看次数

Bezier Patches如何在犹他州茶壶中工作?

我过早地发布了一个代码高尔夫挑战来使用这个数据集(只是茶壶)绘制犹他茶壶.(经过修订和发布的茶壶挑战)但是当我深入研究数据以便掀起一个小例子时,我意识到我不知道这些数据是怎么回事.我对2D中的Bezier曲线有很好的理解,实现了deCasteljau.但对于3D它的工作原理是否相同?

是! 它确实!

数据包含每个包含16个顶点的补丁.这些是如何布局的标准顺序?如果它们对应于2D曲线,则四个角点实际接触表面,其余12个是控制,对吧?

是!

我的"原始计划"是将形状简化为矩形,将它们投影到画布上,然后绘制灰色的填充形状,通过与光矢量垂直的贴片的点积计算.如果我将它简化到那么远,它甚至会看起来像茶壶吗?是否必须使用光线追踪来获得可识别的图像?

这是主观的.:-(

虽然这可能看起来像几个问题,但它们都是这一个问题的所有方面:"请,请好的Guru,在一些Bezier Patches上学习我?我需要知道什么才能画出茶壶?"


这是我到目前为止编写的代码.(使用此矩阵库:mat.ps)

%!
%%BoundingBox: 115 243 493 487
%-115 -243 translate

(mat.ps)run  %include matrix library

/tok{ token pop exch pop }def
/s{(,){search{ tok 3 1 roll }{ tok exit }ifelse }loop }def
/f(teapot)(r)file def
/patch[ f token pop { [ f 100 string readline pop s ] } repeat ]def
/vert[ f token pop { [ f 100 string readline pop s …
Run Code Online (Sandbox Code Playgroud)

3d graphics bezier postscript bspline

5
推荐指数
1
解决办法
2472
查看次数

需要帮助编写 2D 和 3D 之间的转换方法(Point3DToPoint 和 PointAndZToPoint3D)

我是 WPF 3D 的新手,所以我可能只是遗漏了一些明显的东西,但是我如何从 3D 转换为 2D 以及(对于给定的 z 位置)从 2D 转换为 3D?

具体来说,我需要两种转换方法:

  • Point3DToPoint - 如果我在 3D 世界中有一个 (x, y, z) 坐标,我如何确定投影 2D 表面上的 (x, y) 坐标。方法签名:public Point Point3DToPoint(Point3D point3D)

  • PointAndZToPoint3D -如果我有一个(X,Y)坐标投影2D表面3D世界中的位置AZ,我怎么确定(X,Y,Z)坐标在3D世界?方法签名:public Point3D PointAndZToPoint3D(Point point, double z)

我希望2D 坐标是从3D 世界的左上角测量的位置Viewport3D3D 坐标是相对于 3D 世界的原点 (0, 0, 0) 的位置。

注 1:我发现了这个相关问题,但它只解决了从 3D 到 2D 的转换(而不是相反),我不确定答案是否是最新的。

注 2:我目前使用 .NET 3.5,但如果 .NET 4.0 中的改进对我有帮助,请告诉我。

c# 3d wpf

4
推荐指数
1
解决办法
3874
查看次数

标签 统计

3d ×3

opengl ×3

graphics ×2

java ×2

projection ×2

bezier ×1

bspline ×1

c# ×1

c++ ×1

clip ×1

glu ×1

lwjgl ×1

matrix ×1

postscript ×1

wpf ×1