问题标签 [opengl-2.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
907 浏览

c++ - VBO:未绘制数组

我正在遵循本指南,并且正在尝试在屏幕上绘制一个四边形。我也看到了源代码,它是一样的,它应该可以工作,但在我的情况下,屏幕上什么都没有显示。我正在使用带有顶点着色器的 OpenGL 2.0,它只是将颜色设置为红色,以使四边形在屏幕上可见。

在 callig glutMainLoop 我生成顶点缓冲区对象之前:

这是我的渲染例程:

问题是屏幕上没有任何东西,我只看到一个黑色的窗口。四边形应该是红色的,因为我在顶点着色器中设置了红色。

0 投票
4 回答
5550 浏览

c++ - 类设计:如何返回 shared_ptr:引用或复制

这是场景:我有一个名为 Program 的类,它包含三个 shared_ptr:到顶点、几何和片段着色器。当 Shader 对象被构造时,它会使用 glCreateShader 创建着色器,并且还会编译它。

Shader denstructor 会自动调用 glDeleteShader。所以问题是,如果我执行以下操作:

  1. 创建着色器对象;
  2. 复制它;
  3. 销毁副本。

原始副本也会失效,因为当副本被销毁时,它会调用 glDeleteShader。我相信这是一个设计问题。

所以我只使用指针就避免了这个问题。现在 Program 类拥有着色器。我创建了一个将 shared_ptr 返回给顶点、几何和片段着色器对象的方法。我的疑问是:我应该像这样返回 shared_ptr 吗:

或者像这样:

我担心我上面描述的问题会再次发生:shared_ptr 被释放并且它使 OpenGL 着色器无效。

0 投票
2 回答
264 浏览

java - LWJGL VBO 内容始终绘制到屏幕中心 (0,0,0)

我开始学习有关现代 OpenGL 渲染的教程,并将 VBO 课程中的 c++ 代码更改为使用 LWJGL。我使用以下代码初始化了 VBO:

“缓冲区”初始化为

然后通过填充 {-0.5f, -0.5f, 0, 0.5f, -0.5f, 0, 0, 0.5f, 0}

我的游戏循环如下所示:

但我得到的只是屏幕中央的一个白点。我发现了一个类似的问题(VBO: Array not draw),但该解决方案并没有解决我的问题。我使用的教程是http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.htmlhttp://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html。当我尝试绘制 GL_TRIANGLES 而不是 GL_POINTS 时,屏幕上没有绘制任何内容。

0 投票
1 回答
258 浏览

opengl - Opengl未能正确进行深度测试

我正在开发一个非常简单的体素类游戏,但由于某种原因,OpenGL 没有正确进行深度测试。

以下是相关代码:

确保包括这是窗口初始化:

这是一个屏幕截图:

呈现此代码的结果。

我已经尝试禁用照明功能,但是无论如何都很难分辨出什么是最重要的。我已经尝试禁用剔除,除了球体之外什么都没有渲染,这让我认为问题可能出在glutSolidSphere函数而不是我的代码中。我正在使用 OpenGL 2.3。

0 投票
0 回答
1019 浏览

android - Android 上的 OpenGL 渲染器

我正在尝试使用 OpenGL2.0 制作一个简单的渲染器,它仅由主要活动、表面视图和渲染器文件组成。每当我在 avd 上运行它时,屏幕变黑并说程序遇到问题。这是日志猫

可以从中识别问题还是我也应该提供代码?

0 投票
1 回答
174 浏览

opengl - glTextureVertexPointer 在哪里定义?

我无法找出 glTextureVertexPointer 定义在哪里,在我的 c++ 或 java opengl 游戏中没有这样的功能,我已经包含并测试了 opengl 的所有内容。

我想这样称呼它

我真的需要这个函数来从我的纹理精灵表中绘制某些精灵。我在谷歌上找不到这个函数,如果可能的话,我需要知道它的完整源代码。更有趣的是,即使在官方的 opengl 页面中,我也找不到该功能。

我已经从这个答案中获取了功能:OpenGL spritesheets - 初学者需要一些指导

0 投票
1 回答
174 浏览

opengl - 使用驱动程序不支持的更高版本 OpenGL 的常量是否安全?

例如,我使用 GL_LUMINANCE_ALPHA 将两个组件数据传输到纹理。有人告诉我,像 GL_LUMINACE_ALPHA 这样的内部格式常量在 OpenGL 3.0(可能是 4.0?)或更高版本中已弃用,因此请使用 GL_RG 或 GL_RG8 等。

但是,我的目标 OpenGL 版本是 2.0 或更高版本,并且 OpenGL 2.0 的规范不包含 GL_RG/GL_RG8。在这种情况下,我认为有三种可能:

  1. 如果程序可以在仅支持 OpenGL 2.0 的设备上运行良好,请使用 GL_RG/GL_RG8。
  2. 如果程序可以在 OpenGL 版本高到不推荐使用旧常量的设备上运行良好,请保留旧常量。
  3. 在运行时检测 OpenGL 版本并为每个版本切换常量。

我应该选择什么?我不想拿 3。除非我必须这样做,因为它使事情变得更加困难和复杂。

0 投票
1 回答
298 浏览

opengl - 使用 OpenGL 2.0(不是 ES)绘制三角形

我尝试使用 OpenGL 2.0 绘制矩形,但出现黑屏,这是我的代码:

顶点着色器代码:

片段着色器代码:

我究竟做错了什么?

0 投票
1 回答
990 浏览

c++ - GL_INVALID_OPERATION 由 glVertexPointer 报告,即使 glEnableClientState(GL_VERTEX_ARRAY) 调用

我在使用OpenGL 2.0 pipeline. 问题是GL_INVALID_OPERATION当我尝试设置glVertexPointer.

我在网上找不到太多关于这个错误的信息,但据我了解,这个错误是由于在调用 glEnableClientState(GL_VERTEX_ARRAY)之前没有调用造成的glVertexPointer

这是我调用这两个函数的代码:

我已经检查了在调用之前是否存在错误,glVertexPointer并且glError在调用此函数之前返回 0。似乎错误是由其他原因引起的。还有哪些其他情况可能会导致此问题?

我为有点枯燥的问题道歉;我真的不知道我还能提供什么。如果您需要查看其他代码段,请告诉我我可以提供什么。

0 投票
1 回答
1375 浏览

opengl - 将 OpenGL 2.0 与现代 OpenGL 混合

是否可以在一个程序中同时使用新旧 OpenGL?假设我已经理解了差异。

在我的程序中,我使用过:

但例如,我可以使用包含此的函数来绘制网格吗:(旧)

还有一个像这样的函数,用于纹理和渲染一些东西:(新)

还是使用使用vao/的较新版本会使vbo包含glBegin/的函数glEnd过时?

我希望这是有道理的。请原谅天真。