当前位置: 首页 > 知识库问答 >
问题:

带和不带着色器的VBO OpenGL C

师博
2023-03-14

我正在尝试实现现代OpenGL,但问题是:大多数教程都是基于3.3的,说到GLSL330,我只有GLSL130。因此,许多事情显然是不同的,因为我的VBO不起作用。

你能给我一个一般的提示或教程,解释如何使用GLSL 130与VBO的?在我的例子中,我加载了vbo,但是当我使用我的着色程序时,只有用glVertex调用的顶点被渲染,就像vbo被忽略(没有输入)。这个怎么解决?

你能在没有着色器的情况下使用VBO吗?我试着这么做,但它坠毁了...

共有1个答案

夔桐
2023-03-14

是的,VBO仍然可以在GLSL 130中使用,即使没有着色器也可以使用。VBO的目的是保存图形的顶点属性。我看到的大多数最新教程都使用布局位置说明符来指示如何处理着色器中的不同属性,即。

layout(location = 0) in vec3 Position;

GLSL 130不支持这一点,因此您必须有另一种方法将属性与VBO联系起来。这很简单...您可以使用glBindAttrib位置glGetAttrib位置。调用glGetAttribPlace将为您提供您需要在glVertex AttribPointer中使用的标识符,以将VBO数据与特定属性相关联。您可以在编译程序后的任何时候调用它。此外,如果您在创建程序对象后但在链接着色器之前调用它,您可以调用glBindAttribPlace来具体设置与给定属性名称相关联的标识符。这很方便,因为它可以让您自己决定位置应该是什么,就像您可以使用布局说明符一样。

最后,如果希望使用VBO而不使用着色器,则仍然需要找到一种方法,将VBO中的数据与固定函数管道所需的各种输入关联起来。这是使用一种现已弃用的方法来完成的,该方法名为glEnableClientState()glVertexPointer(),它们一起可以告诉OpenGL要填充的固定函数管道属性,以及如何在VBO中找到数据。

 类似资料:
  • WebGL的着色器代码分为顶点着色器代码和片元着色器代码两部分,顶点着色器代码会在GPU的顶点着色器单元执行,片元着色器代码会在GPU的片元着色器单元执行,在WebGL渲染管线流程中,或者说GPU的渲染流程中,顶点着色器代码先执行处理顶点,得到一系列片元,然后再执行片元着色器代码处理片元。 main()函数 顶点着色器和片元着色器代码都有一个唯一的主函数main(),attribute、varyi

  • 我似乎无法理解从顶点到像素的OpenGL管道过程。 有人能告诉我顶点法线在这两种着色技术中有多重要吗?据我所知,在gouraud中,在每个顶点计算照明,然后在顶点之间的多边形上插值结果颜色(在光栅化之前,这是在片段操作中完成的吗?),phong着色包括首先插值顶点法线,然后计算每个法线上的照明。 另一件事是,当凹凸贴图应用于一个平面(2个三角形)和一个砖纹理作为漫反射时,使用其相应的凹凸贴图,所有

  • 我正在QT-QML-3D中用C开发一个应用程序。我需要将数十个浮点值(或浮点数向量)传递给片段着色器。这些值是灯光的位置和颜色,所以我需要更多的值,范围从0.0到1.0。但是,不支持将浮点或整数数组传递给QML中的着色器。我的想法是将浮动保存到纹理,将纹理传递到着色器,并从中获取值。 我试过这样的方法: 并将此QImage作为sampler2D传递给片段着色器。但是有没有像memcpy这样的方法可

  • 我试图在OpenGL中制作一个场景,从太空模拟地球。我现在有两个球体,一个用于地球,另一个稍大一些用于云层。地球和云球体对象都有自己的着色器程序来保持简单。地球着色器程序采用4种纹理(白天、夜晚、specmap和normalmap),而云着色器程序采用2种纹理(cloudmap和normalmap)。我有一个对象类,它有一个渲染函数,在该函数中我使用以下逻辑: 它从第0个纹理单元开始,从GL_TE

  • 问题内容: 如何在文本保持不透明的同时使跨浏览器(包括Internet Explorer 6)的背景透明? 我需要在不使用jQuery等任何库的情况下进行此操作。(但是,如果您知道可以做到这一点的库,那么我很想知道,因此我可以看看他们的代码)。 问题答案: 使用rgba! 除此之外,您还必须声明IE Web浏览器,最好通过条件注释或类似注释进行声明!

  • 我希望你能帮我一把。杰斯纽比。我正在编写一个小应用程序,需要调用darksky的天气api。网 通过php它工作得很好。现在,我希望通过vue更具动态性。js。但如果我通过axios进行api调用,我会得到以下消息: 加载失败 我红色了很多关于cors的东西,并试图包括中间件的标题,正如这里所解释的,我甚至尝试了berryvhd的“laravel-cors”包,但我正在运行“不”访问控制- 你对我