Questions tagged «opengl»

OpenGL是针对台式机和工作站市场的图形标准和API。它的设计易于通过专用计算机硬件进行加速,因此与传统的软件渲染相比,大多数实现方式都可以大大提高性能。当前,OpenGL用于CAD软件和计算机游戏等应用程序。它也是跨平台的。OpenGL标准由Khronos组控制,该组还控制OpenGL ES。


4
为什么OpenGL中的剪辑空间具有4个尺寸?
我将其用作一般参考,但是我浏览在线文档和书籍的次数越多,对此的理解就越少。 const float vertexPositions[] = { 0.75f, 0.75f, 0.0f, 1.0f, 0.75f, -0.75f, 0.0f, 1.0f, -0.75f, -0.75f, 0.0f, 1.0f, }; 在这本在线书中,有一个示例,说明如何为OpenGL绘制第一个经典的hello世界,即制作三角形。 三角形的顶点结构按照上面的代码声明。 与其他所有相关资料一样,这本书强调了“剪辑空间”是一种4D结构,该结构用于基本确定将要栅格化并渲染到屏幕的内容。 这是我的问题: 我无法想象4D的东西,我不认为人类可以做到这一点,此Clip空间的4D是什么? 我读过的最易读的文档是关于相机的,这只是对剪切概念的抽象,我明白了,问题是,为什么不首先使用相机的概念呢?熟悉的3D结构?带有摄像头的概念,唯一的问题是,你需要定义其他方式准,所以你基本上要添加什么其他的语句样的相机,你希望有。 我应该怎么读0.75f, 0.75f, 0.0f, 1.0f呢?我得到的只是它们都是浮点值,我得到前三个值的含义,这意味着最后一个是什么?

1
OpenGL / GLSL:渲染到立方体贴图?
我试图弄清楚如何将场景渲染为立方体贴图。我在这个问题上停留了一段时间,以为我会向你们寻求帮助。我是OpenGL的新手,这是我第一次使用FBO。 我目前有一个使用cubemap bmp文件的工作示例,片段着色器中的samplerCube样本类型附加到GL_TEXTURE1。我根本没有更改着色器代码。我只是改变了一个事实,即我不会调用正在加载cubemap bmp文件的函数,而是尝试使用以下代码来渲染到cubemap。 您可以在下面看到我还将纹理再次附加到GL_TEXTURE1。在设置制服时是这样的: glUniform1i(getUniLoc(myProg, "Cubemap"), 1); 它可以通过在我的片段着色器中访问它uniform samplerCube Cubemap。 我这样调用以下函数: cubeMapTexture = renderToCubeMap(150, GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); 现在,我意识到在下面的绘制循环中,我没有更改视图方向来向下看+ x,-x,+ y,-y,+ z,-z轴。我真的只是想在实现之前先看到一些东西。我认为我至少应该像现在的代码一样在对象上看到一些东西。 我什么也没看见,只是黑色。我将背景设为白色,但物体仍为黑色。我删除了照明和着色,仅对立方体贴图纹理进行采样,并且仍然为黑色。 我认为问题可能是设置纹理时的格式类型,即GL_RGB8,GL_RGBA,但我也尝试过: GL_RGBA,GL_RGBA GL_RGB,GL_RGB 我认为这是标准的,因为我们正在渲染附加到帧缓冲区的纹理,但是我看到了使用不同枚举值的不同示例。 我还尝试在每个要使用立方体贴图的绘制调用中绑定立方体贴图纹理: glBindTexture(GL_TEXTURE_CUBE_MAP, cubeMapTexture); 另外,我没有为大多数示例中看到的FBO创建深度缓冲区,因为我只想为我的立方体贴图使用颜色缓冲区。我实际上添加了一个,看是否是问题所在,但仍然得到了相同的结果。当我尝试时,我可能会捏造出来。 可以为我指明正确方向的任何帮助将不胜感激。 GLuint renderToCubeMap(int size, GLenum InternalFormat, GLenum Format, GLenum Type) { // color cube map GLuint textureObject; int face; …
13 opengl  glsl  cubemap 



1
如何用OpenGL模拟PSX的图形?
我想知道要设置哪些选项(或着色器),以便我的OpenGL游戏看起来像Playstation 1游戏。我知道它可能无法100%实现,因为PSX使用的电视和电视渲染的显示器不同。谢谢。:)
13 opengl  emulation 

7
最佳(最流行?)纹理化图像格式[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 好的,所以我将C ++与OpenGL一起使用,并且我将创建一个加载器以为3D游戏加载纹理。(但是纹理是2D的)。我决定选择透明度,即使我决定不使用它。我需要像样的质量,尽管不一定要一流。你们对格式有什么建议(PNG,TGA等)。另外,也许可以使其易于创建装载程序(我将不使用已经创建的装载程序)。而且,如果您有任何链接/提示来帮助加载程序,那将不胜感激。
13 c++  opengl  textures 

1
如何渲染部分透明的纹理?
早安StackOverflow,我现在遇到了一个问题,因为我似乎找不到使用openGL透明渲染纹理的一部分的方法。 这是我的设置:我有一个四边形,代表一堵墙,上面覆盖了此纹理(已转换为PNG以进行上传)。显然,除了玻璃板之外,我希望墙是不透明的。墙后还有另一架飞机应该显示风景。我想从窗户后面看风景。每个纹理都是带有Alpha通道的TGA。 首先渲染“风景”,然后渲染墙。我认为足以达到这种效果,但事实并非如此。窗口应该是透明的部分是黑色的,只有当我经过墙壁时才会出现风景。 启用该功能后,我尝试使用GLBlendFunc()摆弄,但似乎无法解决问题。 我是否忘记了重要的一步? 谢谢 :)

3
OpenGL 1.x和2.x有什么区别?
有没有很好的教程来说明OpenGL 1. *和2. *之间的区别? 知道我不应该调用的函数将非常有帮助(我假设像glBegin()一样)。
13 opengl 

4
从OpenGL中的渲染缓冲区获取纹理?
我在FBO中有一个渲染缓冲区(DepthStencil),我需要从中获取纹理。看来,在FBO中我无法同时拥有DepthComponent纹理和DepthStencil渲染缓冲区,因此我需要某种方法将渲染缓冲区转换为DepthComponent纹理,以便以后在管道中使用。 我尝试了很多技术,从渲染缓冲区中获取深度分量已有数周之久,但我总是会遇到垃圾。如果不使用渲染缓冲区,最后我想要的就是与FBO相同的纹理。谁能发布一些涵盖该看似简单操作的综合说明或代码? 编辑: 链接到代码http://dl.dropbox.com/u/9279501/fbo.cs的摘录版本 景深效果的筛选+ FBO-无深度(!) http://i.stack.imgur.com/Hj9Oe.jpg 没有场深效果+ FBO的画面-深度效果不错 http://i.stack.imgur.com/boOm1.jpg
13 opengl 

1
如何防止视口拉伸/变形?
基本上,我想知道当视口/窗口大小改变时如何消除渲染图像的变形或拉伸。 下图举例说明了我正在谈论的变形/拉伸: 原始图像(方形窗口) 变形/拉伸图像(矩形窗口) 理想情况下,第二个图像应在不进行水平拉伸的情况下显示球体,并向用户显示更多场景,以说明更大的窗口大小。 如何才能做到这一点? 我正在使用OpenGL渲染图像,并且通过调用使用了透视投影: glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60, window.width/window.height, 0.01f, 100.0f) 纵横比width/height与我遇到的所有文档/教程一致,因此我并不认为它是错误的。但是,我怀疑它正在影响拉伸问题。 经过思考 老实说,随着我对这个问题的思考越来越多,我相信解决方案涉及到弯曲(y方向上的视场)角度与纵横比之间的直接比例关系。 使用上面的图像作为参考,如果宽度增大(导致水平拉伸),则必须增加fovy角度以引起垂直拉伸,从而“固定”渲染图像的比例,这似乎是很合理的。 同样,宽度的减小要求减小凹角。 更新: 因此,在进一步研究之后,我决定更改设置视锥的方法,如下所示: gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f) 我的期望是正确的,这解决了比例问题。但是,它没有达到我想要的结果。当窗口宽度增加时,渲染的图像变小(但球体确实是圆形的)。相反,球体根本不应该改变大小。仅显示的场景量应更改。


4
OpenGL多通道着色器如何工作?
在Direct3D中,多通道着色器易于使用,因为您可以从字面上定义程序中的通道。在OpenGL中,这似乎有点复杂,因为可以为着色器程序提供所需的任意数量的顶点,几何和片段着色器。 多遍着色器的流行示例是卡通着色器。一遍会产生实际的阴影效果,另一遍会创建轮廓。如果我有两个顶点着色器“ cel.vert”和“ outline.vert”,以及两个片段着色器“ cel.frag”和“ outline.frag”(类似于在HLSL中的处理方式),结合起来创建完整的卡通着色器? 我不想让您说可以使用几何着色器,因为我只想了解多通道GLSL着色器背后的理论;)
13 opengl  shaders  glsl 

3
试图了解Opengl上的光线,如何模拟逼真的阳光?
我不知道我做错了什么还是错过了什么,但我想模拟阳光,例如在晴天。 当物体面对定向光时,它的光线很好,那里没有问题。如果我绕过该物体并回头看,那是黑暗的。并不是因为我正在使用GL_AMBIENT而太暗,但对于晴天来说仍然太暗了。如果增加该值,它将永远看起来不会更好,因为物体面向光的一侧会太亮。 而且,环境光还有一个烦人的问题,当看着物体的背面时,我看不到任何形状,只有纯色。很难解释,下面是一些图片: 对象前:http : //i.stack.imgur.com/YW53X.png对象前:http : //i.stack.imgur.com/Qufha.png 如您所见,正面看起来很漂亮,可以看到红色的形状。在背面,很简单,看不到相同的形状。 现在,我知道我正在看物体的背面,并且我朝光的方向看,它应该比正面暗。但是它不应该看起来像这样简单。这不是我们在阳光下看着某个物体时看到的,我们看到这些物体形成了某种形状。 如何在OpenGL上具有相同(或相似)的效果? 我的灯光当前定义如下: float posLight0[4] = {-1.0f, 1.0f, 1.0f, 0.0f}; float ambLight0[4] = {0.5f, 0.5f, 0.5f, 0.5f}; glLightfv(GL_LIGHT0, GL_POSITION, posLight0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambLight0);
13 opengl  lighting 

4
OpenGL中“缓冲区”和“数组”之间的区别?
当我在webGL或OpenGL上阅读文档时,可以看到一些有关如何使用函数和对象名称的模式。但是我不明白缓冲区对象和数组之间的区别。 有“顶点缓冲区对象”,“顶点数组对象”,甚至某种“缓冲区数组”或“ arraybuffer”。 在OpenGL上下文中,什么时候是“数组”,什么时候应该叫做“缓冲区”?
12 opengl  webgl 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.