如何从Android NDK获取资产中的文件
我正在尝试从本机侧访问资产文件夹中的图像文件.现在,我可以成功搜索资产文件夹及其子目录,以找到我正在寻找的特定文件: AAssetDir* assetDir = AAssetManager_openDir(asset_manager, "images"); const char* filename; while ((filename = AAssetDir_getNextFileName(assetDir)) != NULL) { __android_log_print(ANDROID_LOG_DEBUG, "Debug", filename); } AAssetDir_close(assetDir); 我也在使用OSG.我将图像作为纹理设置为我的着色器,并使用以下代码设置: texture->setImage(osgDB::readImageFile(fileNameWithPath)); 但是该文件名也必须包括绝对路径,因为它不在同一目录中.但是我发现我无
2 2024-02-17
编程技术问答社区
试图加载一个在textureUnit1中分配有纹理的OSG模型
我想在两个约束下使用纹理呈现OpenSceneGraph模型: 1)使用着色器(OpenGles20) 2)将纹理上传到gpu上的纹理上(no默认textureunit0) 我以为我做对了,但仍然得到了非纹理模型(只有网格). 这是着色器(请注意,我使用gl_multitexcoord1): static const char gVertexShader1[] = { "varying vec2 texCoords;\n" "void main()\n" "{\n" " texCoords = gl_MultiTexCoord1.st;\n" " gl_Position = ftransform();\n" "}\n" }; static const char gFragmentShader1[] = { "varying vec2 texCoords;\n" "uniform sample
0 2024-02-11
编程技术问答社区
OpenSceneGraph集成到Qt Quick中
我想将OSG场景集成到我的QT快速应用程序中. 似乎正确的方法是使用QQuickFramebufferObject类并在QQuickFramebufferObject::Renderer::render()内调用osgViewer::Viewer::frame().我已经尝试使用但是,在所有情况下,这种方法似乎都无法正常工作.例如,在Android平台中,此代码仅呈现第一个帧. 我认为问题是QQuickFramebufferObject在QQuickFramebufferObject::Renderer::render()中使用相同的OpenGL上下文,并在QQuickFramebufferObject::Renderer::render()中称为代码. 所以我想知道,是否可以正确使用QQuickFramebufferObject快速将OpensCeneGraph集成到Qt中,或者最好使用使用QQuickItem和单独的OpenGL上下文的实现,例如 解决方案 是
2 2024-01-30
编程技术问答社区
解决错误MSB8011。注册输出失败
一个奇怪的错误: 错误msb8011:无法注册输出.请尝试启用每用户 从命令提示符中重定向或注册组件 升高权限. C:\程序 文件\ msbuild \ microsoft.cpp \ v4.0 \ microsoft.cppcommon.targets 744 尝试在ActiveX控件中使用OpenSceneGraph(OSG)时会遇到此错误. Google搜索显示了各种解决方案,这些解决方案并未真正解决问题或找到错误的确切原因,因此我想将解决方案放在一个地方:此处. 我找到了解决方案,并将很快回答我自己的问题,以便人们遇到同样的问题,可以找到解决方案. 解决方案 当Visual Studio(2010)找不到程序创建OCX所需的依赖性DLL文件时,此错误会发生. OCX是在项目的调试目录中创建的(用于调试构建),并将"工作目录"(在项目设置中)指定为依赖性DLL所在的文件夹,无法帮助Visual Studio找到DLL的位置. 现在,捕获量(这是解决问题的
12 2024-01-10
编程技术问答社区
导入FBX到ARToolKit
我在导入FBX模型方面有问题.我已经完成了团结,所以我知道该模型的导出很好,但是我也应该处理本机代码. 我遇到了错误: 2015-06-02 15:20:21.721 ARAppNFTOSG[746:481003] Error: unsupported model file type (fbx). Ignoring. 我在名为Arappnftosg的AR示例上尝试它.我更改了型号.dat为: 1 OSG/Geralt/watcher.FBX 0.0 0.0 0.0 0.0 1.0 0.0 0.0 10.0 10.0 10.0 MARKER 1 我查看了OSG论坛,发现我应该安装我安装2013.3和2014.1的FBX SDK. 还添加行: USE_OSGPLUGIN(fbx) 到Osgplugins.h 我不确定我安装的FBX SDK是否以某种方式链接,因为我没有手动链接.我应该怎么办?我正在使用Mac. 解决方案 未为iOS提供ARToolKi
2 2024-01-08
编程技术问答社区
在Openscenegraph中,如何从鼠标点击的2D屏幕坐标点计算出3D点(世界坐标)?
我试图从用户选择的点上的2D屏幕空间上将球体放在3D空间上.对于此IAM,试图使用以下技术从2D点计算3D点,并且该技术没有给出正确的解决方案. mousePosition.x = ((clickPos.clientX - window.left) / control.width) * 2 - 1; mousePosition.y = -((clickPos.clientY - window.top) / control.height) * 2 + 1; 然后iam将mousePosition乘以Inverse of MVP matrix.但是结果得到随机数. 用于计算MVP矩阵: osg::Matrix mvp = _camera->getViewMatrix() * _camera->getProjectionMatrix(); 我该如何继续?谢谢. 解决方案 在假设鼠标位置在x和y的[-1,1]范围内归一化的假设,以下代码将为您提供从
0 2024-01-08
编程技术问答社区
让Xcode识别没有'.h'扩展名的C++头文件(OpenSceneGraph)
OpenSceneGraph使用标头文件 eg:没有突出显示: 解决方案 是.使用您的文件选择了右面板(工具栏的"视图"部分的最右图,在屏幕截图中的箭头1).在面板中选择"文档"选项卡(箭头2),然后在"身份和类型"(箭头3)下找到"文件类型".在下拉列表中选择" C ++标头". 您需要重新打开语法着色的文件.
4 2023-12-18
编程技术问答社区
VS2012 MSVCR120D.dll丢失
我正在尝试在VS2012中设置我的项目,以成功编译并运行用于调试的OSG代码.我还使用OSG调试库.汇编和链接结束成功,但是当我运行二进制文件后,我会发现一个错误,说MSVCR120D.dll丢失了. 我一直在寻找整天解决此错误的解决方案,这对我来说没有意义,因为我正在使用应使用MSVCR110D.dll的VS2012.我也没有这个dll C:\Windows\System32,只有MSVCR120.dll及其较旧版本. 如果我尝试使用 nondebug osg库在发布模式下编译项目,一切都很好,我通常可以在没有错误的情况下运行该项目. 参考这个问题我试图使用MFC和Runtime Library设置,但是仅发布库根本工作. 我需要使用Debug库来运行它,因为我想使用与发行库不起作用的Visual Leak检测器.这是我正在使用的代码的一部分(OSG libs是使用相同的VS2012编译的). #include "stdafx.h" #include
2 2023-11-23
编程技术问答社区
如何从来源和第三方依赖性构建OpensCenegraph?
如何从源构建OpensCeneGraph?我该怎么做才能获得OSG构建的第三方依赖关系? 解决方案 这只是一个初始指南,它将在系统上安装基本的OSG.还有许多其他配置更改和与依赖关系的汇编,您可以在以后进行(构建第三方库是在第一条长点线之后指定的). 将OSG源代码zip文件提取到文件夹 从CMAKE网站下载并安装CMAKE 运行cmake 在cmake中,将源代码文件夹设置为f:/programfiles/osg/openscenegraph – 3.1.1等效,而不是f:/programfiles/osg/openscenegraph – 3.1.1.1.1/src 为OSG二进制文件指定另一个文件夹,例如:f:/programFiles/osg/osg_3–1-1-1_build 单击"配置",选择您的编译器(在我的情况下,VS2010本机编译器) 单击"生成" 如果在配置或生成期间发生了任何问题,则可以使用CMAKE菜单选项删除缓存并再次尝试整个过程.
12 2023-11-23
编程技术问答社区
用std c++11智能指针转换为非标量类型
我目前正在使用OpenSceneGraph进行游戏,并使用了自己的智能指针.但是我想使用STD C ++ 11智能指针. 现在这是工作示例代码 osg::ref_ptr SineUniform = new osg::Uniform( "Sine", 0.0f ); 但是当我做这样的事情 std::unique_ptr SineUniform = new osg::Uniform( "Sine", 0.0f ); 然后我得到以下错误消息 错误:从'osg ::统一*'转换为非量表类型 'std :: unique_ptr'请求 知道发生了什么事吗?有一些智能指针的要求吗? 解决方案 您应该这样做: std::unique_ptr SineUniform(new osg::Uniform( "Sine", 0.0f )); 另外,请注意不要混
12 2023-11-07
编程技术问答社区
在osg应用程序中编译着色器源代码的问题
我有一个OSG应用程序,我想在FinalDrawCallback中纹理绘制一个全屏四边形,因为我需要场景中的所有内容才能在完成纹理之前渲染.这就是为什么我必须使用OpenGL调用,而不是OSG调用程序和阴暗器执行. 具体来说,我似乎在编译Vert和Frag着色器时遇到了问题.当我调用glGetShaderiv(shader, GL_COMPILE_STATUS, ¶m)时,我的param值不会更改或未定义.根据其文档表示,产生了一个错误.但是,当我致电glGetError()检查时,OpenGL报告GL_NO_ERROR. 这是设置功能 glActiveTexture(GL_TEXTURE0); glGenTextures(1, &screenTexture); glBindTexture(GL_TEXTURE_2D, screenTexture); glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
14 2023-08-31
编程技术问答社区
用直角坐标和欧拉角控制OpenSceneGraph摄像机
我试图控制使用笛卡尔坐标(x,y,z)和欧拉角(Yaw,pitch,roll)的osg ::相机. 第1部分 由于某种原因设置我的卷会导致相机围绕z轴旋转,而不是预期的y轴. 以下是我将位置数据馈送到的先前写的相机操纵器. class EulerManipulator : public osgGA::CameraManipulator { public: EulerManipulator(osg::ref_ptr x) : view(x), camView(new osg::CameraView) { } virtual ~EulerManipulator(){} virtual osg::Matrixd getMatrix() const { // Note: (
8 2023-07-17
编程技术问答社区
Qt的TabWidget中的OSGViewer
我正在使用openscenegraph 3.0.1并使用 进行QT集成问题 osgQt::GLWidget在启动期间将其添加到选项卡控件时(在我的主窗口的构造函数内部. MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QWidget* viewerWidget = new MyViewerWidget(new osgViewer::Viewer()); ui->tabWidget->addTab(viewerWidget, "My Osg View"); // tab entry was added but nothing to see than empty Osg Window } 显示主窗口后从菜单调用代码时,它有效: void gcdrp::MainW
14 2023-07-17
编程技术问答社区
在OSG中,图像随着旋转而消失
我有一个简单的OSG程序,该程序制作X,Y轴并随机将该轴内部的点随机化.目的是,这将导致为激光扫描数据制作3D查看器. (我知道以前已经完成了,但我们需要超级重量).这是代码: #include #include #include #include #include #include #include #include #include #include #include void addAxis(osg::ref_ptr root) { //ADD Y-Axis osg::ref_ptr
34 2023-05-10
编程技术问答社区
OpenGL混合功能,消除基元重叠,但保持整体不透明度
我有一些几何形状,其单个原始集是一个三个条纹.原始重叠中的一些三角形,因此,当我在几何形状上添加材料时,我会看到重叠(如预期).我想摆脱这种效果而不改变几何形状 - 我尝试使用不同的混合模式(glblendfunc()),但我无法使它起作用.我得到了一些有趣的结果,但是没有什么能消除三条带的原语内的不透明效应,并为整个对象保留不透明度.我正在使用openscenegraph,但是它提供了一种将glblendfunc()调用有关几何形状的方法. 因此,从图像中,假设粉红色的道路,紫色的道路和黄色的道路构成三个独立的物体,每个物体都使用单个三条带(有多个条带,但出于争论,假装只有三种不同的彩色tri条带).我基本上不想看到相同颜色内的自相交 另外,我的问题与此问题几乎相同: OpenT具有不透明度的原始词没有可见的重叠,但是我应该注意到,当我在接受该问题的接受答案中尝试混合模式时,这些条带根本没有在场景中呈现. 解决方案 我在上一个项目中遇到了相同的问题.这是我解决的方式
12 2023-05-10
编程技术问答社区
在OSG中创建太阳光源
我需要在Openscenegraph上的景观上方设置一个点源,该景观将像阳光一样.我已经知道如何设置光,可以以这种方式完成: //LIGHT CODE ------------------------ osg::ref_ptr lightGroup (new osg::Group); osg::ref_ptr lightSS (root->getOrCreateStateSet()); osg::ref_ptr lightSource1 = new osg::LightSource; osg::ref_ptr lightSource2 = new osg::LightSource; // create a local light. float xCenter = tree->getRoot()->getXCenter(); float yCenter =
102 2023-05-10
编程技术问答社区
OpenSceneGraph在初始位置设置摄像机。
我第一次正在研究OpensCeneGraph,我有点迷路,因为文档真的不清楚... 所以,我有这个代码,上面加载了一个带有房屋的OBJ文件,我淹没了一个小盒子,我希望"人"成为.因此,现在,我不想把那个盒子放在那儿,而是想在那儿放置相机,然后看着前面,然后我会在固定相机周围移动地形,以便看起来相机正在移动,但是地形正在移动. 所以,这是我的代码: int main() { osgViewer::Viewer viewer; viewer.setUpViewInWindow(0,0,800,800); osg::ref_ptr root (new osg::Group); osg::Node* terrain = osgDB::readNodeFile(".terrain.obj"); if(terrain == NULL) { return -1; } Geode*
66 2023-05-10
编程技术问答社区
应用了基于顶点着色器的几何体变形的3D场景的通用拣选解决方案
我正在尝试为3D场景实施导航技术(在带有OpenGL的OpenSceneGraph中).除其他外,用户应该能够单击屏幕上的场景对象以向其移动. 应将导航技术集成到另一个项目中,该项目使用顶点着色器将全局变形应用于场景几何形状.这是一个问题:由于几何形状使用顶点着色器变形,因此将鼠标光标位置放在用户实际选择的位置的世界坐标上并不是直接的.但是我需要那些坐标才能在导航技术中执行适当的相机运动. 执行这种未投影的一种方法是修改顶点着色器(用于变形),以使其还将顶点的原始位置存储在单独的纹理中.之后,人们可以在鼠标位置读取这些纹理以获取所需的值. 现在,正如我所说,顶点着色器属于我实际上不想触摸的另一个项目.我的导航技术的目标之一是尽可能地将其轻松整合到其他项目中. 所以这是一个问题:我尚未考虑到openscenegraph或OpenGL中是否有任何功能?任何使我能够获得片段的世界坐标,而与顶点着色器编码器无关? 解决方案 好吧,您总是可以执行OpenGL选择操作
6 2023-05-10
编程技术问答社区
在OpenSceneGraph中创建一个球体(使用osg::Geometry)。
我花了很多时间才能使这个工作,但是我的领域不会显示. 使用以下代码使我的功能: 使用Visual C ++ /p> 简单的OSG 带有 osg ::几何. (注意:不可用,因为您无法使用它实现自定义形状.) 在Vecarrays中添加了顶点,正常,Texcoords. 一个人,我怀疑一些行为不端,因为我保存的对象是一半空的. 有没有办法将现有描述转换为OSG? 原因?我想了解稍后如何创建对象. 确实,它与后来的作业有关,但目前我只是在事先预先准备. sidenote :由于我必须没有索引,所以我将它们排除在外. 但是我的圆柱体显示的情况就很好. 解决方案 警告:我不是OSG专家.但是,我确实做了一些研究. OSG要求以逆时针顺序定义所有面孔,以便背面剔除可以拒绝"面对"的面孔.您用于生成球体的代码不会以逆时针顺序生成所有面孔. 您可以采取几种方法: 通过插入面部CCW订单来调整代码如何生成面. 将您的模型加倍并插入两次,一次用
56 2023-05-10
编程技术问答社区
Qt5.6:高DPI支持和OpenGL(OpenSceneGraph)。
我有一个最小的应用程序,该应用程序使用QOpenGLWidget集成了OpenGL包装库(OpenSceneGraph).我正在尝试弄清楚如何在处理openGL内容(如我使用的)时正确使用QT5.6对高DPI屏幕的支持. 我的main()功能具有以下代码: int main(int argc, char** argv) { // DPI support is on QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); QMainWindow window; // QOpenGLWidget with OpenSceneGraph content QtOSGWidget* widget = new QtOSGWidget(); window.setCentralWidget(widget);
66 2023-05-10
编程技术问答社区