草庐IT

c++ - OpenGL 3.2 编程指南?

大多数在线可用资源都非常过时。具体来说,它们都是关于与DirectX9匹配的OpenGL2。当前规范是3.2,相当于(或者说,非常接近)DirectX10(11)。但是规范本身很难阅读。相比之下,DirectXSDK是一个很棒的文档、示例和工具。我在哪里可以获得OpenGL的编程指南,该指南是否已过时?我在哪里可以获得sample?等等。 最佳答案 OpenGLTechnicalWiki是一个起点。它还包含一些OpenGL3.2tutorials.不要指望像DirectXSDK这样的东西,但据我所知,没有更好的资源了。OpenGL学

c++ - 如何将非静态成员函数传递给 glutDisplayFunc

我有一个类,它具有初始化opengl并在单独的线程中运行它的功能。我的问题是:openGL回调如glutDisplayFunc、glutMotionFunc等接受void(*f)void,我不能传递类成员函数。绕路。1)我可以将成员函数声明为静态的,但在这种情况下,我需要将所有使用的成员变量声明为静态的,并最终将整个类声明为静态的。2)我可以使用一些独立的函数并将我的对象声明为全局对象,但这太糟糕了。我想知道是否有一些解决方法,所以我不需要让我的opengl类静态化??(使用C++) 最佳答案 您需要创建一个“thunk”或“tra

c++ - 应用于四边形时,OpenGL 纹理稍微向左移动

我对OpenGL有点陌生,而且我在使用纹理方面遇到了问题。纹理似乎加载正常,但当我运行程序时,纹理显示向左移动了几个像素,右侧出现了被移动切断的部分。我不知道这里的问题是出在我的TGA加载器中,还是我将纹理应用到四边形的方式。这是加载程序:#include"texture.h"#includeGLubyteuncompressedheader[12]={0,0,2,0,0,0,0,0,0,0,0,0};GLubytecompressedheader[12]={0,0,10,0,0,0,0,0,0,0,0,0};TGA::TGA(){}//Privateloadingfunctionca

c++ - 全高清 2D 纹理内存 OpenGL

我正在为一家艺术家公司编写具有全高清功能的2D引擎,该引擎有望跨平台并使用OpenGL和C++编写。我遇到的主要问题是如何处理所有这些高清Sprite。艺术家以24fps的速度绘制图形,并将它们导出为png序列。我已将它们转换为DDS(不理想,因为它需要加载directxheader)DXT5,这大大减少了文件大小。游戏中的某些场景一次可以有5或6个动画Sprite,这些Sprite可以每个包含200多帧。目前我正在将Sprite加载到一个指针数组中,但这加载时间太长,即使使用压缩纹理也是如此,并且使用相当多的内存(完整场景大约500mb)。所以我的问题是,对于如何处理如此大量的帧,您

c++ - 在 OpenGL 中为不同的对象设置单独的 Material 属性

如何为在OpenGL中绘制的不同对象设置单独的Material属性?我做了以下代码,显然只显示了后来的颜色://**************Object1**************glEnable(GL_COLOR_MATERIAL);glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);glColor4f(149.0/255.0,78.0/255.0,22.0/255.0,1.0);floatmat_specular[]={0.992157,0.941176,0.807843,1.0};floatshininess=10;glMateri

c++ - 我如何从 Cocoa 中获取 'break away' 并在 C/C++ 中开发 Mac OpenGL 应用程序?

我希望开始使用C或C++进行一些3D编程。我遇到的问题是,似乎我能找到的唯一适用于MacOS的教程使用objective-c和Cocoa框架。我想获得与Windows用户或多或少相同的环境。如果我尝试使用文本编辑器和g++编译器,我会丢失header,但是,如果我尝试使用Xcode,我将不得不与Cocoa打交道,这让我很沮丧。我真的不明白为什么Mac上预装的OpenGL/GLUT会强制我使用Xcode,但似乎没有它我就无法获取头文件。我如何才能通过所有Apple的“开发人员友好”界面来编写一些具有完全跨平台可移植性的老式代码? 最佳答案

c++ - glBlitFramebuffer 无效操作

我一直在摆弄帧缓冲区和渲染到纹理,我发现需要blit它们。在某些机器上,我在glBlitFramebuffer调用之后立即得到一个GL_INVALID_OPERATION。每个绑定(bind)到帧缓冲区的纹理都以完全相同的方式设置,都具有相同的大小和参数。此外,当我尝试将整个纹理(之前成功渲染到)blit到另一个帧缓冲区时,只有要写入的目标“矩形”小于要读取的矩形(例如,当我想将它blit到帧缓冲区的四分之一时屏幕),它也会抛出一个GL_INVALID_OPERATION。编辑:实际上,每当要读取和绘制的矩形具有不同的大小时,它总是会抛出错误,所以我不能blit到不同大小的纹理,或者大

c++ - gluLookAt 是如何工作的?

据我了解,gluLookAt(eye_x,eye_y,eye_z,center_x,center_y,center_z,up_x,up_y,up_z);相当于:glRotatef(B,0.0,0.0,1.0);glRotatef(A,wx,wy,wz);glTranslatef(-eye_x,-eye_y,-eye_z);但是当我打印出ModelView矩阵时,对glTranslatef()的调用似乎无法正常工作。这是代码片段:#include#include#include#include#include#includeusingnamespacestd;staticconstint

c++ - 如何将片段着色器仅应用于 OpenGL 中的一个对象?

我刚刚开始学习OpenGL。在我看过的所有教程中,它们都演示了如何使用片段着色器来设置View中所有对象的颜色。我还没有发现的是如何在其中一个对象上使用片段着色器,为不同的对象赋予不同的颜色。你是怎么做到的?为了提供问题的背景,我在二维中绘制了一个带有房屋和道路的简单场景。我发现了如何使用固定图形管道设置我的每个对象(房子的主体、window等)的颜色,我只是不明白如何使用片段着色器设置颜色。如有任何澄清,包括我误解之处的更正,我们将不胜感激。 最佳答案 Toprovidebackgroundtothequestion,I'mdra

c++ - 在着色器中同时在同一纹理单元中使用不同的纹理类型

当我尝试在我的着色器中对不同的纹理类型(即普通2D纹理和立方体贴图)使用相同的纹理单元(编号0)时,我在我的程序中遇到了一个棘手的问题。看起来GL在第一次glDrawArrays调用后发出502H(无效操作)。在我的应用程序代码中,我将纹理加载到不同的纹理目标:voidsetup_textures(){unsignedintwidth,height;intcomponents;unsignedintformat;floatparam[8];vectorpngData;GLenumtexture_target;glGenTextures(2,textures);glGetFloatv(G