c++ - 将 OpenGL 1.x 代码移植到 WebGL

标签 c++ opengl opengl-es webgl porting

我正在尝试移植 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 中的这个小片段例如:

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 的代码中(尽管仍然是 C++,而不是 JavaScript),那就太好了。这应该为我提供移植应用程序其余部分的起点。

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

最佳答案

如果您考虑保留 GL 1.x 风格,您可能会对以下内容感兴趣:

https://github.com/stefanhaustein/WebGLue

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

关于c++ - 将 OpenGL 1.x 代码移植到 WebGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913929/

相关文章:

opengl-es - 多少个法线?

c++ - 根据照片以3D计算对象位置

c++ - 在 C++ 中找到最小数 +ve 数?

c++ - 设置GL_TEXTURE_2D_ARRAY,帧缓冲区不完整

matrix - 使用 glm::perspective 关于 zFar 和 zNear 平面偏移的混淆

java - 什么是在普通 View 和 GLsurface View 之间切换的最佳方式,Android

c++ - 多项式类 C++ 的问题

c++ - 使用 g++ 编译 c++ 时缺少 cygwin1.dll

opengl - 3D效果说明书

opengl-es - C 中有 GLES #define 吗?