问题标签 [glscene]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
410 浏览

glscene - GLScene 中的贴花纹理

我想在许多 TGLPlane 之一上放置一个视觉亮点(真的是选择框),这些 TGLPlane 分配了许多不同的纹理。如何使用 GLScene 将第二个贴花纹理应用于该平面?

一些背景。应用于平面的各种不同纹理都存储在 MaterialLibrary 中,并分配给各自的平面 Material.MaterialLibrary 和 Material.LibMaterialName。这是纹理的适当有效重用,因为无论使用多少次,它们都只加载一次。

您似乎无法使用 TGLPlane 上的任何属性,因为一旦您将 MaterialLibrary 纹理应用于它,它们就会被忽略。

我可以找到这样做的方法似乎需要我更改 LibMaterial,这当然适用于共享该特定纹理的所有其他平面,所以这是不行的。

我在Google Code (Checkers)中发现的另一种方法通过创建第二个平面来解决这个问题,该平面应用了它自己的“突出显示”部分透明纹理,然后将其放置在原始对象(恰好是一个立方体)的略上方。这似乎是一种绕过它的技巧,我希望尽可能避免这种情况。

如果它不是 GLScene 的内置功能,那么是否有一种方法可以在渲染到达该特定平面时拦截渲染,然后在应用 MaterialLibrary 纹理后使用一些 OpenGL 基元来应用贴花纹理?

0 投票
1 回答
897 浏览

delphi - glScene 函数将对象的 3D 坐标转换为视口 2D 坐标

glScene (Delphi) 中是否有任何内置函数用于将对象的 3D (xyz) 位置坐标转换为 GlSceneViewer 上显示的该对象的屏幕 2D (xy) 坐标?

谢谢!

0 投票
1 回答
518 浏览

delphi - Delphi XE5 + GLSceneForm 无法在某些 PC 上运行

升级到 Delphi XE5 和最新的 GLScene 后,在某些 PC 上,TGLSceneForm 会使应用程序完全崩溃(请参阅下面的日志文件)。但是,如果我使用完全相同的应用程序并在 Delphi 2010(使用旧版本的 GLScene)中编译它,它就可以完美运行!

它仅在某些 PC 上执行此操作。例如,我们办公室有 3 个 HP 工作站,XE5 应用程序 2 个工作正常,1 个崩溃(具有不同的图形适配器)。然而,在 Delphi 2010 中编译时,所有 3 台 PC 的工作都正常!

应用程序中的 GLScene 日志文件是:

示例代码如下:

我不知道该转向哪里,因为这似乎是自升级到 XE5 以来 GLScene 的某种基本问题。我无法推出需要我们所有客户对图形适配器进行故障排除的软件,特别是因为它在完全相同的 PC 上运行 Delphi 2010,所以我知道不是我们的程序导致了问题。

任何想法或帮助将不胜感激。瑞克。

0 投票
1 回答
636 浏览

delphi - GLScene FreeForm RayCastIntersect 问题

我正在使用带有 Delphi (XE2) 的 GLScene RayCastIntersect 函数来确定弹道段和 FreeForm 网格之间的交点。如果我导入网格并使用 RayCastIntersect 函数,则正确报告交点。但是,如果我将 FreeForm 对象转换为正 x 坐标,则该函数将停止返回正确的交点。返回的交点总是在目标的前面(即在正确的撞击点之前,大约 x = 0)。如果 FreeForm 位于 x <= 0,那么 RayCastIntersect 函数似乎可以正确处理所有其他变换和旋转。

我注意到,如果我对 FreeForm 的单个 MeshObjects 执行 x 变换,那么 RayCastIntersection 函数即使对于正 x 平移也会返回正确的交点。不幸的是,我无法将其用作解决方法,因为没有旋转单个网格对象的方法。

有没有其他人遇到过这个问题?它是一个已知的错误吗(尽管我在网上没有找到任何关于它的信息)?还是我做错了什么?任何建议将不胜感激。请参阅下面的检查影响代码。

0 投票
0 回答
198 浏览

opengl - 减少 GLScene 纹理的内存使用

我正在使用 GLScene 在飞机上查看图像。

我很难弄清楚为什么一张 1.2 兆字节的照片在加载到应用于平面的纹理时会使用超过 50mb 的内存。

我尝试将纹理压缩设置为 tcHighSpeed,因为渲染质量对我来说并不重要,据我所知没有区别。

添加未设置纹理的“空”平面时。它使用 1 到 2 兆字节的内存。

这是OpenGL的事情还是GLScene在内存管理方面非常低效?

0 投票
1 回答
449 浏览

delphi - 如何在 GLScene 运行时创建材质库和自由格式?

我想编写一个 ModelViewer 来在我的场景中加载许多模型。那么如何在运行时创建 GLMaterialLibrary 并将其分配给运行时的 FreeForms 对象?我想知道如何找到子模型纹理的名称。TanX 寻求帮助。

0 投票
1 回答
840 浏览

delphi - 计算对象的位置,使其与屏幕像素匹配

我想在 3D 空间中移动 3D 平面,并让移动与屏幕像素相匹配,这样我就可以将平面捕捉到屏幕边缘。

我已经尝试过焦距、相机位置和相机比例,并且我已经设法得到一个平面来匹配屏幕像素的大小,但是当移动平面时,事情就不再正确了。

所以基本上我目前的状态是假设我正在使用标准的 2D 图形,我用值来提供平面大小。因此,如果我将平面尺寸设置为 128x128,它或多或少会被视为具有该精确尺寸的 2D 正方形。

我没有使用也不会使用正交视图,我正在使用并且将使用投影视图,因为我的应用程序需要一些透视图。

这个怎么计算?

有没有人有我可以阅读的资源链接?

0 投票
0 回答
193 浏览

image - 从流中加载 TGLImage 或 TGLTexture

我正在将 GLScene SVN 快照 6432 与 Delphi XE2 一起使用,它似乎无法从流中加载纹理图像。

我浏览了文档并搜索了互联网,但我能找到的只是声明 LoadFromFile,任何地方都没有 LoadFromStream。

我也查看了源代码,但我也找不到或理解处理文件加载过程的代码。

是否可以以某种方式将图像文件从 TMemoryStream 加载到 TGLTexture 或 TGLImage?

编辑:

我做了更多的研究:

确实有可用的 LoadFromStream 声明,它们似乎指向位于 GLScene 源目录中的文件 ApplicationFileIO.pas。

例如,从 TGLImage 调用 LoadFromStream 时,我收到错误消息“无法将 TGLImage 导入到 TMemoryStream。(C:\GLSeneLibraryPath\Source\ApplicationFileIO.pas,第 348 行)”。

收到上述消息时,我尝试了以下代码:

可能是因为我需要以某种方式使用 ApplicationFileIO.pas 单元来使其正常工作吗?

我已经尝试将该文件包含在任何地方的uses 子句中,但这并没有什么不同。

0 投票
1 回答
717 浏览

delphi - 使用 GLScene 或 OpenGL for Delphi 使纹理适合 4 点多边形/平面

我正在为 Delphi XE2 使用最新的 GLScene 主干,并且我从事过一个 GUI-ish 类型的项目,它使用 3D 而不是 2D 在屏幕上绘制 GUI 元素。

它可以工作,但由于显而易见的原因,图形放置不是像素完美的。

我已经设法映射 3D 视图,以便 TGLSceneViewer 上的 1 个像素在屏幕上或多或少 1 个像素。这对我来说已经足够了。

但是,我放弃了在我的 GUI 中使用 3D 的想法,而是专注于使用 GLScene 进行 2D 图形表示,因为它是 GPU 加速的。

然后我记得在以前的项目中使用了投影变换,我在我的 GUI 中使用了 Graphics32。

通过投影变换,我可以简单地在 3D 空间中绘制点,读取这些点的 3D 坐标,将坐标转换为 2D 坐标并将其应用于 TBitmap32 投影变换参数,中提琴,我的软件中有 3D 功能。

所以,我的问题是:

是否可以在 GLScene 或 OpenGL 中“拉伸”纹理,使纹理适合 4 个点之间或平面内,这样每当我将平面的角移动到新位置时,纹理都会相应地拉伸?

这样我就可以将 GLScene 用于 2D 图形,但需要做一些简单的技巧来使事物看起来像 3D。

下面的链接指向互联网上的图像,这是我正在寻找的视觉表示:http: //i.stack.imgur.com/hDdqa.png

0 投票
1 回答
213 浏览

png - 在 TGLCompositeImage 中添加 PNGImage 时出现 SIGSEGV 错误

我正在使用 Lazarus 1.2.4 和 GLSCENE svn 6462(1.2 svn 版本)

我在下面添加具有此功能的材料

当我运行它时,我收到以下错误

尝试一些挖掘发现,当 pngimage 尝试从流中加载时

在执行 raise EInvalidRasterFile.Create('Invalid PNG file'); 之前

获取 SIGSEGV ..

所以任何人都可以帮助...

Ps ...如果我用 TGLPictureImage 更改 TGLComposite 图像,那么效果很好,但我没有图像的透明度..

Ps2 ...经过更多挖掘后,我发现所有错误都来自外部 LIBPNG,因此 GLPNGFILE 和 LIBPNG 不能很好地协同工作