gpt4 book ai didi

linux - OpenGL 像素缓冲区直接到 Linux 和 Mac OSX 中的屏幕

转载 作者:太空狗 更新时间:2023-10-29 11:39:03 26 4
gpt4 key购买 nike

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

最佳答案

您始终可以将四边形正射投影到您的后台缓冲区/表面。

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

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

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

enter image description here

顶点的配置/顺序取决于您的缠绕顺序和原始模式。 Z 值应介于 -11 之间。您可以只选择-1。 Projection 和 ModelView 矩阵应该是一个单位矩阵(即所有零,然后是主对角线上的 1)

enter image description here

换句话说,您不需要进行任何矩阵乘法运算,因此您实际上不需要在着色器中进行任何矩阵运算,因为坐标已经在标准化设备坐标 (NDC) 中。

即它已经在enter image description here 的目标设备区间内

这是一些代码:

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 ();

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

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

关于linux - OpenGL 像素缓冲区直接到 Linux 和 Mac OSX 中的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11497606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com