【问题标题】:Translate Previously Drawn Elements (OpenGL)翻译先前绘制的元素 (OpenGL)
【发布时间】:2013-07-27 22:28:38
【问题描述】:

如何转换之前绘制的元素?我已经在屏幕上绘制了大约 400 万个顶点,我想在它们绘制完成后进行翻译。我不想每次翻译时都重新绘制它们(400 万!)

这里是相关代码。

glOrtho(0, 1024, 0, 576, 0, -4096);
glTranslatef(-512, -288, 512);
glRotatef(45, 1, 0, 0);
glTranslatef(512, 0, -512);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.F, 1.F, 1.F);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_INT, 0, &vertices[0]);
glDrawElements(GL_QUADS, vertexIndex.size(), GL_UNSIGNED_INT, &vertexIndex[0]);
glDisableClientState(GL_VERTEX_ARRAY);
// I would like to translate here

【问题讨论】:

    标签: c++ opengl translate-animation


    【解决方案1】:

    这是不可能的,你的顶点位置在内部乘以一个变换矩阵来得到最终绘制在屏幕上的位置。

    因此,如果您在绘制后尝试更改矩阵,它不会对绘制的顶点产生任何影响,而且那样会很糟糕。

    要解决您的问题,只需在绘制之前对其进行转换...这是标准方法,没有其他方法可以做到。

    【讨论】:

    • 肯定有办法的。每帧重绘 1400 万个顶点是不可能的。渲染大约需要一秒钟...
    • @Binero:那么也许这是您应该考虑的问题。你应该得到更好的硬件或者优化你的渲染什么的。
    • @Binero:“没有发送其他多边形后面的顶点,因为它们不可见等。”没有?你绝对没有透支?你是怎么做到的?我猜想实现这一点的开销可能就是你的表现所在。总体而言,您不能只是将像素魔术到其他像素中。 “对象”不再存在。因此,如果要从不同的角度绘制场景,则需要再次绘制场景。如果这是一个问题,那么你需要找到一种方法让它不再是一个问题。
    • @Binero:优化的第一步可能是使用 VBO,每帧将相同的 1400 万个顶点从客户端内存推送到 GPU 简直太疯狂了。
    • @Binero 那么只需使用 VBO 并且仅在旋转时更新数据。我认为每帧上传数据可能会让你慢一点。如果这不能解决太多问题,那么您可以尝试渲染到 FBO,然后只需通过平移四边形来移动图像并仅渲染新出现的内容。但这仅适用于正交投影。另一种加快渲染速度的方法是在移动时显着降低分辨率,然后在移动停止时再次提高分辨率。
    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    相关资源
    最近更新 更多