渲染到纹理,然后在OpenGL中将结果渲染到屏幕
Render to a texture, then render result to screen in OpenGL
我需要将OpenGL场景渲染为纹理,然后在着色器中操纵该纹理。我已经通过使用Framebuffer对象解决了这个问题,我想我现在已经很清楚了。在我的效果管道中的许多点上,我需要渲染一个全屏四边形,并用动态渲染的纹理对其进行纹理处理,这就是我的问题所在
这就是我的场景:https://www.mathematik.uni-marburg.de/~thomak/planet.jpg
我将其渲染为纹理,并将该纹理映射到全屏四边形。但是,生成的图像会以这种方式失真:https://www.mathematik.uni-marburg.de/~thomak/planettexture.jpg
以下是渲染四边形并设置纹理坐标的代码:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glBegin(GL_QUADS);
glTexCoord2i(0, 0);
glVertex3i(-1, -1, -1);
glTexCoord2i(0, 1);
glVertex3i( 1, -1, -1);
glTexCoord2i(1, 1);
glVertex3i( 1, 1, -1);
glTexCoord2i(1, 0);
glVertex3i(-1, 1, -1);
glEnd();
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
着色器代码在这里:
sampler2D BlitSamp = sampler_state
{
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
AddressU = Clamp;
AddressV = Clamp;
};
float4 AlphaClearPS(float2 texcoords : TEXCOORD0) : COLOR
{
return float4(tex2D(BlitSamp, texcoords).rgb, 1.0f);
}
其中BlitSamp是我渲染到然后传递到着色器的纹理。这里可能发生了什么?
您的tex coords可能已关闭。您的代码,我的评论:
glTexCoord2i(0, 0); //Bottom-Left
glVertex3i(-1, -1, -1); //Bottom-Left
glTexCoord2i(0, 1); //Top-Left
glVertex3i( 1, -1, -1); //Bottom-Right???
glTexCoord2i(1, 1); //Top-Right
glVertex3i( 1, 1, -1); //Top-Right
glTexCoord2i(1, 0); //Bottom-Right
glVertex3i(-1, 1, -1); //Bottom-Left??
渲染四边形的代码看起来很好,这可能会导致四边形的大小和视口的大小不匹配。
在创建渲染纹理时,是否可能交换了宽度和高度?
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- C++Brute Force攻击函数不会返回结果
- 渲染到纹理,然后在OpenGL中将结果渲染到屏幕
- 视觉检漏仪输出分析:无法解码输出屏幕上的结果意味着什么
- C++ "cout << number"结果,将"number%"打印到屏幕上
- 使用cout将数组和字符打印到屏幕时出现意外结果