2012-07-16 72 views
2

我正在寻找一种方法将像素缓冲区直接渲染到屏幕上。我需要在OSX和Linux上都做到这一点,尽管我知道我可能需要通过不同的方法为每个操作系统做到这一点(尽管跨平台库会很好。)你从哪里开始?OpenGL像素缓冲区直接在Linux和Mac OSX屏幕上

回答

5

您可以随时使用四边形的正投影到您的后缓冲器/表面。

或者只是在NDC空间(-1到+1)发送四元组而不需要任何矩阵乘法。

更新,因为这显然是不够清晰:

对于“全屏四”的方式,发送两个三或四一个像这样的:

enter image description here

配置/订单的verts取决于你的绕线顺序和原始模式。 Z的值应该在-11之间。您可以选择-1。投影和模型视图矩阵应该是一个单位矩阵(这是所有零,则1米的主对角线)

enter image description here

在你不需要做任何的矩阵乘法,所以你不实际需要任何矩阵OPS换句话说在着色器中,因为坐标已经在Normalized Device Coordinates(NDC)中。

即,它的enter image description here

这里,目标设备内间隔是alread一些代码:

glMatrixMode (GL_MODELVIEW); 
glPushMatrix(); 
    glLoadIdentity(); 
    glMatrixMode (GL_PROJECTION); 
    glPushMatrix(); 
     glLoadIdentity(); 
     glBegin (GL_QUADS); 
     glVertex3i (-1, -1, -1); 
     glVertex3i (1, -1, -1); 
     glVertex3i (1, 1, -1); 
     glVertex3i (-1, 1, -1); 
     glEnd(); 
    glPopMatrix(); 
    glMatrixMode (GL_MODELVIEW); 
glPopMatrix(); 

顶点着色器是,不只是一个直接的直通到像素/片段着色器。显然,你可以将相关的像素/纹理缓冲区设置为着色器资源/变量,并在像素/片段着色器中对其进行采样。并且不要忘记将顶点的texcoord UV设置为相应的纹理值(0-1)。

或者,您也可以使用相应的窗口系统将纹理直接涂抹到窗口表面。这很大程度上取决于您用于窗口管理(例如SDL)的内容,还可能需要某种纹理格式/布局才能工作(或转换)。

+0

你怎么做到的?你有链接怎么做?或者一些代码? – 2012-07-16 08:00:58

+0

@BЈовић我不配得到downvote。我写的所有图形API都是普遍适用的。我写的东西给了足够的信息来“开始” - 互联网上有无数的例子; OP要求从哪里开始。我相信给理论而不是为他们写一些代码,但我会通过举一些例子放纵你。 – 2012-07-16 08:41:46

+0

这正是我需要的,非常感谢你。这是一个非常好的解释。 – Lethjakman 2012-07-17 16:55:47