【问题标题】:Porting OpenGL 1.x code to WebGL将 OpenGL 1.x 代码移植到 WebGL
【发布时间】:2015-09-07 22:00:38
【问题描述】:

我正在尝试将 OpenGL 1.x 代码 here(原始代码由 Super User 常规 BenRichards 编写)移植到 OpenGL 2.x 的 WebGL 安全子集。我的计划是使用Emscripten 编译代码,以便这个 C++/SDL 应用程序在现代浏览器中作为 JS/WebGL 运行,但要实现这一点,我必须消除对 GL 1.x API 的使用,因为 Emscripten 不是正确支持我们正在使用的 GL 1.x 代码及其不完美/损坏的 1.x 仿真代码。 BenRichards 也有兴趣看到他的“新手”GL 1.x 代码被转发到更现代的 GL API,只要它可以在桌面和浏览器中运行。

BenRichards 和我本人一般都是 OpenGL 的新手,因此我们需要学习很多才能了解如何转发它。出于性能原因,一般方法似乎是避免使用客户端数据(请参阅here),但我想通过示例来学习。

here的这个小sn-p为例:

void TCell::OnRender() {
  glPushMatrix();
  glColor3ub(color.red, color.green, color.blue);

  glBegin(GL_QUADS);
  glVertex2i(20 * column - 40, 20 * row - 40);
  glVertex2i(20 * column - 20, 20 * row - 40);
  glVertex2i(20 * column - 20, 20 * row - 20);
  glVertex2i(20 * column - 40, 20 * row - 20);
  glEnd();
  //....
  glPopMatrix();
}

如果有人可以将这种通用渲染模式的大量注释移植到 WebGL-ish 代码中(尽管仍然是 C++,而不是 JavaScript),那就太好了。这应该为我提供了移植应用程序其余部分的起点。

通过解释如何将这种类型的即时模式 GL 1.x 代码转换为 GL 2 的延迟渲染模型的思考过程,这个问题的一个好的答案通常会比我面临的直接问题有用。 X。欢迎/鼓励对博客、指南等的外部引用。

【问题讨论】:

  • 您似乎专注于即时模式与顶点数组/VBO。但是,这是您最不关心的问题。 WebGL 就像完全基于可编程管道的 GLES2.x。此外,矩阵堆栈不可用。在您能够转换此代码之前,您需要学习很多不同的东西 - 并且已经有很好的教程。另请注意,如果没有进一步的上下文,将不可能转换被剪断的单个代码,因为有很多 GL 状态会影响渲染结果,其中很大一部分必须在着色器中实现。

标签: c++ opengl opengl-es webgl porting


【解决方案1】:

如果你考虑保留 GL 1.x 风格,你可能会对这些东西感兴趣:

https://github.com/stefanhaustein/WebGLue

编辑:为了与 emscripten 一起使用,您可能想要构建类似 MeshBuilder(在 webglue.js 中)和 C 中的固定函数模拟。MeshBuilder 使得移植开始/通过使用基本相同的调用来填充可重用的缓冲区,将样式 GL 代码结束为现代 GL。我们使用了类似的方法将 Quake II 移植到 WebGL(但使用 Java/GWT 而不是 C)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2012-11-16
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2011-08-30
    相关资源
    最近更新 更多