OpenGL C#,上下颠倒加载纹理

OpenGL C#,上下颠倒加载纹理,c#,opengl,graphics,textures,opentk,C#,Opengl,Graphics,Textures,Opentk,有没有办法在y坐标翻转的情况下将图像加载到openGL中?(倒置)。我正在使用.NET位图和BitmapData类,并将BitmapData.Scan0传递给OpenGL 使用.RotateFlip()在CPU上翻转位图速度太慢 除了翻转所有的texcoords,我能在我们的引擎中解决这个问题吗?我想答案是否定的。OpenGl使用指向图像的指针作为纹理数据,我从未见过任何方法告诉他翻转线条。我想答案是否定的。OpenGl使用指向图像的指针作为纹理数据,我从未见过任何方法告诉他翻转线条。如果使用片

有没有办法在y坐标翻转的情况下将图像加载到openGL中?(倒置)。我正在使用.NET位图和BitmapData类,并将BitmapData.Scan0传递给OpenGL

使用
.RotateFlip()
在CPU上翻转位图速度太慢


除了翻转所有的texcoords,我能在我们的引擎中解决这个问题吗?

我想答案是否定的。OpenGl使用指向图像的指针作为纹理数据,我从未见过任何方法告诉他翻转线条。

我想答案是否定的。OpenGl使用指向图像的指针作为纹理数据,我从未见过任何方法告诉他翻转线条。

如果使用片段着色器进行渲染,则可以任意解释u、v坐标。把它们颠倒过来应该是微不足道的,而且(几乎)是免费的


除此之外,只需翻转纹理坐标即可。实现这一点应该不难。

如果使用片段着色器进行渲染,则可以根据需要解释u、v坐标。把它们颠倒过来应该是微不足道的,而且(几乎)是免费的


除此之外,只需翻转纹理坐标即可。实现这一点应该不难。

您应该能够仅更改纹理坐标以实现所需翻转。

您应该能够仅更改纹理坐标以实现所需翻转。

(编辑:忽略,问题是纹理而不是绘制像素)

<>这在C++中对我起作用。

问:“我怎样才能让glDrawPixels()画一幅倒转的图像?”

答:“尝试使用glPixelZoom(1.0,-1.0)。同样,可以使用glPixelZoom()从左向右翻转图像。请注意,您可能需要调整光栅位置以正确定位图像。”

src:

(编辑:忽略,问题是纹理而不是绘图像素)

<>这在C++中对我起作用。

问:“我怎样才能让glDrawPixels()画一幅倒转的图像?”

答:“尝试使用glPixelZoom(1.0,-1.0)。同样,可以使用glPixelZoom()从左向右翻转图像。请注意,您可能需要调整光栅位置以正确定位图像。”


src:

您确定翻转纹理是程序中的瓶颈吗?是的,FPS计数器之类的东西会在CPU上绘制它们的文本,并设置为纹理以在GPU上渲染到屏幕上。每帧翻转都需要时间。你确定翻转纹理是程序中的瓶颈吗?是的,FPS计数器之类的东西会在CPU上绘制它们的文本,并设置为纹理以在GPU上渲染到屏幕上。每帧都要翻转需要时间。我们正在编写一个引擎。翻转texcoords是我们目前正在做的事情。但它会导致其他问题,例如使用帧缓冲区渲染到的纹理是颠倒的。引擎用户还应该期望模型中提供的texcoords与他们在着色器中使用的texcoords相同。不幸的是,这不是一个选项…@Hannesh:Fixed function pipeline提供了GL_纹理矩阵,因此您可以
glMatrixMode(GL_纹理);glScalef(1,-1,1)或,如建议的那样,在着色器中执行此操作。如前所述,我们正在编写引擎,因此无法控制用户编写的着色器。我们正在编写引擎。翻转texcoords是我们目前正在做的事情。但它会导致其他问题,例如使用帧缓冲区渲染到的纹理是颠倒的。引擎用户还应该期望模型中提供的texcoords与他们在着色器中使用的texcoords相同。不幸的是,这不是一个选项…@Hannesh:Fixed function pipeline提供了GL_纹理矩阵,因此您可以
glMatrixMode(GL_纹理);glScalef(1,-1,1)或者,就像建议在着色器中执行的那样。如前所述,我们正在编写一个引擎,因此无法控制用户编写的着色器。