草庐IT

c++ - 如何检查 OpenGL 版本一致性?

我想确保我的应用程序符合OpenGL2.1。我该如何检查?因为我的电脑支持GL4.4,所以即使我使用,例如glGenVertexArrays(),它也会成功运行。但是glGenVertexArrays()仅适用于GL3+。因此,我想验证我的应用是否仅使用GL2.1功能。一种方法是在我仅支持GL2.1的旧PC上运行它,但我正在寻找一种更简单的方法。 最佳答案 如果您找到支持生成版本特定header的扩展加载器,如@datenwolf所述,那可能是您最简单的解决方案。如有必要,您可以尝试其他选项。您可以在https://www.open

c++ - 带 OpenGL/Eigen3 的反向运动学 : unstable Jacobian pseudoinverse

我正在尝试使用OpenGL、Eigen3和"Jacobianpseudoinverse"实现简单的反向运动学测试方法。系统使用“Jacobiantranspose”算法运行良好,但是,一旦我尝试使用“pseudoinverse”,关节就会变得不稳定并开始抽动(最终它们完全卡住-除非我使用“Jacobiantranspose”回退计算).我调查了这个问题,结果发现在某些情况下Jacobian.inverse()*Jacobian的行列式为零,无法反转。但是,我在互联网(Youtube)上看到其他声称使用相同方法的演示,但他们似乎没有这个问题。所以我不确定问题的原因在哪里。代码附在下面:*

c++ - 在 OpenGL 上延迟渲染 Qt

我是关于this的问题,并且知道可以做得更好。问题:当用Qt小部件覆盖QGLWidget(QtOpenGLcontextview)时,Qt在每个Qt帧之后重绘这些小部件。Qt并不是为了不断地以>60fps重绘整个窗口而构建的,因此速度非常慢。我的想法:让Qt使用其他东西来绘制:透明纹理。使OpenGL在重绘时使用此纹理并将其绘制在其他所有内容之上。让Qt将与OpenGL上下文View的所有交互重定向到绘制到纹理上的小部件。优点是Qt只需在必要时重绘(例如,悬停或单击小部件,或者文本字段中的文本光标闪烁),并且可以更快地进行部分重绘。我的问题:如何解决这个问题?我怎样才能告诉Qt绘制纹理

c++ - SDLSurface 的 OpenGL 纹理太暗

我遇到的问题与这个OpenGlgoestoodark完全相同但答案对我不起作用。由于表面转换为纹理,我正在尝试显示图像,但结果太暗了:原文:在openGL之后左边是原图,右边是OpenGlimg。这是我的代码:voidTexturedRect::draw(intscroll){glMatrixMode(GL_MODELVIEW);glLoadIdentity();glBindTexture(GL_TEXTURE_2D,_texture);glEnable(GL_TEXTURE_2D);glBegin(GL_QUADS);//Beginingthecube'sdrawingintx=th

c++ - cuda,OpenGL 互操作性 : cudaErrorMemoryAllocation error on cudaGraphicsGLRegisterBuffer

我在使用cudaGraphicsGLRegisterBuffer()时遇到随机cuda内存分配错误。我有一个相当大的OpenGLPBO对象,它与它和CUDA共享。PBO对象创建如下:GLuintbuffer;glGenBuffers(1,&buffer);glBindBuffer(GL_PIXEL_UNPACK_BUFFER,buffer);glBufferData(target,rows*cols*4,NULL,GL_DYNAMIC_COPY);glUnmapBuffer(_target);glBindBuffer(_target,0);物体很大。宽度和高度是5000。但是,它在我的

C++:从 openGL 中去除莫尔效应

我画的图案有详细的像素,它们经常面对波纹效果。我不擅长着色,我不确定这个问题是否会被着色器解决。我还没有找到任何基本的、可理解的和完整的着色器示例。大多数教程网站从中间开始一个程序,省略了包含的头文件!这是我的代码的MWE。是否有可能减轻或消除其中的莫尔效应?#include#include#ifdef__APPLE__#include#else#include#endifconstintw=640,h=480;floatcam_angle=0.0f;voidinit(){GLfloatLightAmbient[]={0.2f,0.2f,0.2f,1.0f};GLfloatLightD

c++ - 既是线框又是实体的 openGL 球体

我终于手动画了一个球体:)我希望我的球体是红色的,但轮廓是绿色的:为了实现这一点,我做了以下事情。我用红色画了一个实心球体,然后我画了同一个球体,但线框和绿色。当我打开DEPTH_TEST时,出现了一些奇怪的行为,如下所示:为了避免这种奇怪的行为,我只绘制了按(1.001,1.001,1.001)缩放的有线球体,一切都绘制得很完美,如第一张图片所示。我的问题是,我,一个真正的新手,是不是做得不好?有没有更好的方法来做我想做的事?提前致谢。附言为了练习,我正在手动绘制球体,我知道glu二次曲面例程和glut球体的存在。 最佳答案 您并

c++ - 在同一个应用程序中使用 Legacy OpenGL 和 Modern OpenGL

我有一台只支持OpenGL2.1的工作笔记本电脑,我家里有一台装有OpenGL4.4的台式机。我正在我的桌面上处理一个项目。所以我使我的程序与现代OpenGL兼容。但我想在我的工作笔记本电脑上开发这个项目。我的问题是我能否使该项目与旧版和现代OpenGL兼容?像这样。#ifdefMODERN_OPENGLsomecode..glBegin(GL_TRIANGLES);...glEnd();#elseglGenBuffers(&vbo);...#endif 最佳答案 您的建议是完全可行的,但是如果您通过预处理器宏来执行此操作,您将最终

c++ - Opengl 顶点属性跨度

嘿。我是OpenGLES的新手,但我有过使用普通OpenGL的经验。有人告诉我,由于避免缓存未命中的优化,对顶点缓冲区使用交错数组要快得多。我开发了一种我将使用的顶点格式,看起来像这样structSVertex{floatx,y,z;floatnx,ny,nz;floattx,ty,tz;floatbx,by,bz;floattu1,tv1;floattu2,tv2;};然后我使用了“glVertexAttribPointer(index,3,GL_FLOAT,GL_FALSE,stride,v);”指向顶点数组。索引是我想要使用的属性之一,除了步幅之外其他一切都很好。在我决定将其添加

C++ vector 数学和 OpenGL 兼容

我一直在做很多vector数学的事情,并为它写了我自己的模板。我的要求是很多vector数学(加法、减法、缩放、叉积和点积),我还需要能够将我的vector作为float[]传递,以便openGL可以使用它。用了一段时间挺开心的,今天有个讲师看到了,吐槽一下。他特别讨厌两件事(我理解其中之一),我对继承的使用,因为它似乎不遵循isa风格。而我的类型转换(T*)this,当然他没有太多的解决方案。首先:继承,我需要能够使用vec2到vec4,所以我设计了这样的vector。templateVector2D{public:getX(),getY(),setX(),setY()....};t