我正在寻找一种方法将像素缓冲区直接渲染到屏幕上。我需要在OSX和Linux上都做到这一点,尽管我知道我可能需要通过不同的方法为每个操作系统做到这一点(尽管跨平台库会很好。)你从哪里开始?OpenGL像素缓冲区直接在Linux和Mac OSX屏幕上
2
A
回答
5
您可以随时使用四边形的正投影到您的后缓冲器/表面。
或者只是在NDC空间(-1到+1)发送四元组而不需要任何矩阵乘法。
更新,因为这显然是不够清晰:
对于“全屏四”的方式,发送两个三或四一个像这样的:
配置/订单的verts取决于你的绕线顺序和原始模式。 Z
的值应该在-1
到1
之间。您可以选择-1
。投影和模型视图矩阵应该是一个单位矩阵(这是所有零,则1米的主对角线)
在你不需要做任何的矩阵乘法,所以你不实际需要任何矩阵OPS换句话说在着色器中,因为坐标已经在Normalized Device Coordinates(NDC)中。
即,它的
这里,目标设备内间隔是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)的内容,还可能需要某种纹理格式/布局才能工作(或转换)。
相关问题
- 1. 在Windows屏幕上渲染缓冲区
- 2. 如何访问opengl 2屏幕渲染缓冲区的原始像素数据?
- 3. 在Mac上直接录制屏幕
- 4. Mac os x Terminal.app的缓冲区和屏幕命令
- 5. 渲染到帧缓冲区和屏幕
- 6. 我可以直接写入OpenGL中的颜色缓冲区吗?
- 7. 在Python中操作屏幕缓冲区
- 8. OpenGL顶点和缓冲区
- 9. OpenGL中的帧缓冲区对象和像素缓冲区对象之间有什么区别?
- 10. Opengl浮动缓冲区
- 11. 如何访问Android中的主屏幕/ OpenGL缓冲区?
- 12. OpenGL - 顶点缓冲区对象没有绘制到屏幕
- 13. OpenGL-ES 1.1 iPhone - 深度缓冲区导致洋红色屏幕
- 14. 如何在OSX中访问NSWindow的像素缓冲区?
- 15. 在OpenGL中清除颜色缓冲区
- 16. 4K屏幕在Windows捕获并直接保存到缓冲区中
- 17. 模板缓冲区在OpenGL
- 18. 访问缓冲区在OpenGL
- 19. 缓冲区的屏幕命令
- 20. 控制台中的屏幕缓冲区
- 21. 带有〜8MB缓冲区的写入()上的段错误(OSX,Linux)
- 22. JNI直接缓冲区。谁负责本地缓冲区释放?
- 23. OpenGL/OpenGL ES中的帧缓冲区,纹理和glColor行为
- 24. OpenGL:光栅纹理直接屏幕?
- 25. opengl反向帧缓冲像素
- 26. osx上的屏幕截图
- 27. Opengl选择缓冲区
- 28. OpenGL ES多色缓冲区
- 29. libGDX OpenGL清除缓冲区位
- 30. 在OpenGL中查看深度缓冲区
你怎么做到的?你有链接怎么做?或者一些代码? – 2012-07-16 08:00:58
@BЈовић我不配得到downvote。我写的所有图形API都是普遍适用的。我写的东西给了足够的信息来“开始” - 互联网上有无数的例子; OP要求从哪里开始。我相信给理论而不是为他们写一些代码,但我会通过举一些例子放纵你。 – 2012-07-16 08:41:46
这正是我需要的,非常感谢你。这是一个非常好的解释。 – Lethjakman 2012-07-17 16:55:47