草庐IT

no-opengl

全部标签

c++ - 模型在窗口调整 OpenGL 3.2 大小时拉伸(stretch)

我已经设置了一个包含OpenGL3.2渲染上下文的窗口(在MFC中)。因为它与OpenGL3.2一起使用,所以我想使用着色器等,所以我手动构建投影和View矩阵。我用过this教程作为构建它们并将它们传递给我的着色器的输入。现在的问题是(即使在教程的示例中)当我调整窗口大小时,模型被拉伸(stretch)。这是我用来构建矩阵的代码(我重建它们并在每次刷新窗口时将它们发送到我的着色器)。查看矩阵:floatzAxis[3],xAxis[3],yAxis[3];floatlength,result1,result2,result3;//zAxis=normal(lookAt-positio

c++ - 写入 OpenGL 模板缓冲区

我一直在阅读OpenGL中的模板缓冲区。基本概念是有道理的;只有在与模板缓冲区中的值按位与运算后满足特定条件时,才会绘制片段。但是我不明白的一件事是你实际上是如何写入模板缓冲区的。是否有我在这里缺少的功能?附言当我说写入时,我的意思是在模板缓冲区中指定特定的值。 最佳答案 没有人回答这个问题,这是一个有效的问题,所以一年多后,这里是您问题的答案。stencilbuffer理论上和backbuffer、depthbuffer一样是一个缓冲区。他们三个被同时写入(启用时)。您可以通过特定调用启用/禁用写入它们:glColorMask(r

c++ - OpenGL:顶点索引缓冲区的问题

我刚开始使用VBO,除了顶点索引缓冲区外,一切似乎都很好。如果我在启用索引缓冲区后调用glDrawElements,我会收到访问冲突错误(找不到索引),如果我只是用指向内存中索引数组开头的指针调用它,它就可以工作..//DOESN'TWORKglBindBuffer(GL_ELEMENT_ARRAY_BUFFER,indices);glDrawElements(GL_TRIANGLES,stripIndices.size(),GL_UNSIGNED_INT,0);//WORKSglDrawElements(GL_TRIANGLES,stripIndices.size(),GL_UNSI

c++ - 尝试在 OpenGL/SFML 中实现鼠标外观 "camera"

我将OpenGL与SFML1.6结合使用已有一段时间了,效果非常好!除了一个异常(exception):我似乎无法正确实现相机类。你看,我正在尝试创建一个名为“Camera”的C++类。这是我的功能:Camera::Strafe(floatfSpeed)检查是否按下了WASD键,如果是,则以“fSpeed”向各自的方向移动相机。Camera::MouseMove(intcurrentX,intcurrentY)应提供第一人称鼠标外观,采用当前鼠标坐标并相应地旋转相机。我的Strafe()实现工作正常,但我似乎无法正确使用MouseMove()。通过阅读有关OpenGL鼠标外观实现的其他

c++ - glGetUniformLocation OpenGL ES 2.0 (ipad 3 iOS 7.0.3 返回结果错误)

这是我的顶点着色器:attributevec4a_position;uniformmat4u_projection;uniformvec4u_origin_translation;uniformvec4u_translation;attributevec2a_texCoord;varyingvec2v_texCoord;uniformvec4u_color;varyingvec4v_color;attributevec4a_color;voidmain(){vec4pos=a_position+u_origin_translation+u_translation;gl_Position

c++ - 不破坏上下文的常见 OpenGL 清理操作

最近,我一直在为我的实时程序做屏幕外GPU加速。我想创建一个上下文并多次重复使用它(100+)。我正在使用OpenGL2.1和GLSL1.20版。每次重用上下文时,我都会做以下事情:编译shaders,链接program然后glUsePrograme(问题1:我应该重新链接program还是重新链接program?每次都创建程序?)生成FBO和Texture,然后绑定(bind)它们以便进行离屏渲染。(问题2:我应该销毁那些FBO和Texture)生成GL_Array_BUFFER并将一些顶点数据放入其中。(问题3:我什至需要清洁这个吗?)glDrawArraybluhbluh...调

c++ - 在 Qt 的外部类中使用 OpenGL 上下文

我在Qt中有一个继承自QGLViewer的窗口。如果我在该类中创建任何着色器程序,QGLShaderProgrammyShader一切都运行良好。但是,我开始将一些渲染调用移至具有draw()调用的类之外​​的类,结果出现问题。应用程序编译正常,没有错误,但在执行时我收到错误Theprogramhasunexpectedlyfinished。我发现从Qt4到Qt5着色器类发生了变化,成为Qt5中使用的QOpenGLShaderProgram。我试了一下,但还是出现了同样的问题,不过我收到了一条不同的错误消息QOpenGLFunctionscreatedwithanon-currentc

c++ - 为什么 g++ 声明某些 valarray<double> o 有 "no matching function for call cbegin(o)"?

请考虑以下代码:usingcustom_t=std::valarray;custom_to;unsignedacc=std::accumulate(std::cbegin(o),std::cend(o),0);g++-5说Nomatchingfunctionforcalltocbegin(custom_t&)如果我改用std::begin(o)和std::end(o),一切正常。这是编译器错误吗?代码使用VisualStudio2015编译。 最佳答案 这是一个libstdc++错误,我刚刚创建了https://gcc.gnu.or

c++ - 重用 bindBufferBase 和 OpenGL 计算着色器

我正在尝试在OpenGL中构建计算着色器以执行骨架化算法。我已经在仅CPU版本中测试了该算法,它在那里是正确的。但是,我在将它移植到计算着色器代码时遇到了一些问题。问题是,无论我运行了多少次计算着色器调用,第一次调用后输出都不会改变。事实上,如果我在while循环结束时取出检查,程序永远不会终止。我有两个内存区域用于输入和输出。我试图在主while循环中使用glBindBufferBase()做一个技巧,我在其中交换它们中的两个(最后一轮的输出成为当前一轮的输入)。请参阅main.cpp中的第270-318行。这样我就不会多次在CPU和GPU之间来回复制数据。所以,我的问题是:1)我可

C++ 64 位 - 无法读取符号 : Archive has no index; run ranlib to add one

我正在尝试使用静态库在LinuxRHAS5.364位上生成一个非常简单的二进制文件。test1.cpp,生成的.o将被嵌入到静态库中。voidctest1(int*i){*i=5;}和prog.cpp#includevoidctest1(int*);intmain(){intx;ctest1(&x);printf("Valx=%d\n",x);return0;}如果我用32位编译,没问题:--(0931:Wed,06Apr11:$)--g++-m32-Wall-cctest1.cpp--(0931:Wed,06Apr11:$)--filectest1.octest1.o:ELF32-b