【发布时间】: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