草庐IT

c++ - 混合使用 DirectX 和 OpenGL

我希望能够使用DirectX渲染到OpenGL渲染窗口。这是因为我所追求的功能仅在DirectX中受支持。几年前我听说可以做到这一点,我希望它仍然是可能的。我想这将涉及将DirectX指向VRAM的正确部分和正确的深度缓冲区。教程或简单的解释也会非常有用。 最佳答案 至少NVIDIA有NV_DX_interopextension,这让您可以直接将Direct3D9缓冲区/纹理/表面用作OpenGL缓冲区/纹理/渲染缓冲区(因此是相反的方式)。但我对此没有任何经验,我不知道它是否得到广泛支持或是否真的有效。如果您认为哪些功能仅在Dir

c++ - 模型观察矩阵 - C++、OpenGL

我成功地为相机实现了lookAt矩阵,因为有很多资源描述它。我一直在尝试将其从相机观察转换为模型观察。我似乎无法让它工作,我想我对矩阵的构造方式有一点误解。我假设我不需要更改模型的翻译来查看一个点,因为它的位置应该保持不变。首先,这里是相关代码。lookAtRadians函数应该查看在与其平移相同的参照系中指定的点(即在-位置=方向)。但是,存在一些问题,我将通过屏幕截图显示这些问题。它不检查direction.y()是1.0f还是-1.0f,但这是微不足道的。voidTransformMatrix3D::lookAtRadians(floatatX,floatatY,floatatZ

c++ - 使用 MinGW、freeglut 和 glew 编译简单的静态 OpenGL 4.0 程序

问题出在标题上,我会尝试在下面列出我已经尝试过的等等。首先,据我所知,为了在Windows上使用OpenGL4.0,您必须扩展或绕过默认的Windows库,因为它只提供OpenGL1.1。所以我们在C:/MinGW/安装了MinGW。接下来,我通过下载tarball来设置FreeGLUT。来自projectsite.根据instructions运行makefile提取和编译在./configure命令中添加少量--prefix。./configure--prefix=/c/Users/Owner/root/makeallmakeinstall现在我在/c/Users/Owner/roo

c++ - 使用 opengl 和抗锯齿投影图像

在我的作品中,我将捕获的帧的一部分与图像重叠。我用openCV打开我的网络摄像头,然后我将捕获的帧转换为纹理并将其显示在GLUT窗口中。此外,我将此纹理的一部分与此图像重叠:我是实时做的,结果是:如您所见,投影图像的边缘不准确。我认为这是一个锯齿问题,但我不知道如何用opengl进行抗锯齿处理。我尝试在网上寻找,但没有找到适合我的问题的解决方案。在我的“计算”函数中,我使用以下代码将mat图像转换为纹理:GLvoidcalculate(){......cvtColor(image,image,CV_BGR2RGB);glHint(GL_PERSPECTIVE_CORRECTION_HI

c++ - glewInit() 时 OpenGL 错误 GL_INVALID_ENUM (0x0500)

我是OpenGL的新手,尝试按照http://www.openglbook.com学习OpenGL4教程。在第二页,我们使用着色器创建了一个简单的三角形。但是就在创建顶点着色器之后,程序崩溃了。通过调试,我可以找到OpenGL错误GL_INVALID_ENUM(0x0500)。请参阅下面的代码...不幸的是,我找不到任何解决方案。也许你知道某事?编辑:于是,再次搜索GL_INVALID_ENUM和glewInit(),发现其他网站已经有很多帖子了,BUT:他们中的大多数人在着色器中都有一些拼写错误,而我绝对没有。在http://www.opengl.org/wiki/OpenGL_Lo

c++ - OpenGL 谷歌地图样式 2D 相机/缩放到鼠标光标

我正在尝试在OpenGL中实现一个2D相机,它的行为类似于Googlemap相机。特别是“缩放到鼠标点”功能。到目前为止,我已经能够实现平移和缩放OK-但前提是缩放锁定在窗口/小部件的中心。如果我尝试缩放鼠标位置,View似乎会“跳跃”,并且在缩放级别增加后,我放大的项目不再位于鼠标光标下。下面是我的相机类-代码很多,但我无法将其缩小,抱歉!我在每一帧的开始调用Apply(),当场景平移时我调用SetX/YPos,最后我调用SetScale与先前的比例+/-0.1f与鼠标滚轮滚动时的鼠标位置。相机.hclassCamera{public:Camera();voidApply();voi

c++ - OpenGL 纹理不显示

我正在尝试使用opengl在Qt中显示纹理,但它只是在我运行时不显示纹理。我做了一些研究,发现我需要将纹理的高度和宽度设置为2的幂。我的纹理现在是(1024x1024)。我还添加了很多可以解决我的问题的glTexParameterf,但仍然没有成功。voidWorldView::paintGL(){this->dayOfYear=(this->dayOfYear+1);this->hourOfDay=(this->hourOfDay+1)%24;glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();//sto

c++ - 如何在 OpenGL 中创建调试标记?

我正在尝试使用RenderDoc调试一些OpenGL3.3+图形代码,我想为渲染过程定义一些可以被RenderDoc识别的调试标记。我使用GLEW并尝试使用glPushGroupMarkerEXT/glPopGroupMarkerEXT来定义这些标记,但是当我调用glPushGroupMarkerEXT时遇到访问冲突,所以我猜提供该功能的扩展未加载。我还尝试使用glewIsSupported检查扩展GL_EXT_debug_marker是否可用,但返回false。此功能不受支持还是我没有正确使用它?或者还有其他方法可以实现吗? 最佳答案

c++ - OpenGL 多视口(viewport)和 gluPerspective()

所以我正在尝试学习如何使用glViewport(),“多次”。下面是我的代码,我试图遵循其他示例,但它们要么与与我正在做的事情无关的其他事情如此复杂,要么我不明白他们在做什么。顺便说一句,我正在使用glut来管理我的窗口系统。所以对我来说最好的学习方法是让一个简单的例子为自己运行,然后从那里推断。下面是我的一个简单程序的代码,它将屏幕一分为二并绘制两个相同的球体,我无法弄清楚为什么当两个视口(viewport)的gluPerspective()相同时,右侧的球体会被拉伸(stretch)。拜托,如果您能向我解释我在代码中做错了什么,那将大有帮助。外部资源很好,但我需要简单的示例(不是N

c++ - OpenGL 中的 3 轴四元数旋转

我正在尝试创建一个OpenGL程序,其中一只鸟的模型应该沿着定义的路径沿着由Seiffert球形螺旋描述的球体表面移动。然而,我已经坚持正确的旋转已经有一段时间了。作为第一步,我让小鸟在x-z平面中沿着圆形路径运动://1.Circleinx-zplanefloatphi=TWO_PI*t;//t=[0..1]floatx=boundingSphereRadius*cos(phi);floaty=0.0f;floatz=boundingSphereRadius*sin(phi);floatrotationAngle=glm::orientedAngle(glm::vec3(0.0f,0