opengl翻转后为啥出现两个图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opengl翻转后为啥出现两个图像相关的知识,希望对你有一定的参考价值。

首先看下图片坐标系和纹理坐标系。图片坐标系的原点在图片左上角,x轴向右,y轴向下,x和y的取值范围都是0到对应的图片宽高。纹理坐标的原点在纹理左下角,x轴向右,y轴向上,x和y的取值范围都是0到1。把一张图片加载到纹理中,图片数据就会从图片坐标系到了纹理坐标系。

再来看看NDC坐标系和屏幕坐标系。NDC坐标系就是设备标准化坐标系,是投影变换后将坐标归一化后就转换到了NDC坐标系,它的x轴向右,y轴向上,x和y的取值范围都是-1到1,这个范围就是显示的区域,超出这个范围的都不可见,NDC坐标系这个词可能稍显陌生,其实就是通常说的顶点坐标系,但从严格意义上说还是应该叫NDC坐标系,因为顶点严格来说是世界坐标系中的,世界坐标系是三维的,NDC坐标系中的顶点其实是投影变换后将坐标归一化后得到的顶点。

屏幕坐标系x轴向右,y轴向下,x和y的取值范围都是0到对应的屏幕宽高。

在矩阵变换的最后一步变换中OpenGL会将NDC坐标系变换成屏幕坐标系然后上屏显示。

除此之后还有模型坐标系、视图坐标系等(可以参考:OpenGL ES 高级进阶:坐标系及矩阵变换),这里就不一一介绍了,因为不是讨论的重点。

另外,我们说"倒"的时候,实际上有两种倒,一种是上下倒置,一种是旋转了180度,是不一样的,要注意区别
参考技术A 日这时考虑是没处理exif中的旋转信息导致的,exif中有一个记录图片旋转值的信息,它会告诉你将图片旋转... 参考技术B 日我最近才刚开始使用OpenGL。在具有两个不同纹理单元的单独对象中显示两个图像时,我需要帮助。第一张图像被渲染两次,而不是得到两个不同的图像

为啥裁剪图像后会出现黑色区域​​?

【中文标题】为啥裁剪图像后会出现黑色区域​​?【英文标题】:Why does black area exist after cropping image?为什么裁剪图像后会出现黑色区域​​? 【发布时间】:2014-01-15 07:50:57 【问题描述】:

我的代码裁剪图像:

 function cropimage($x1,$y1,$newwidth, $newheight) 
            $new_image = imagecreatetruecolor($newwidth, $newheight);
            imagecopyresampled($new_image, $this->image, $x1, $y1, 0, 0, $newwidth, $newheight, $this->getWidth(), $this->getHeight());
            $this->image = $new_image;
            $this->image->save($file);
        

结果:

为什么裁剪后会有黑色区域?如何调整它的大小?

【问题讨论】:

正如手册在imagecopyresampled 中所说,第三个和第四个参数用于目的地x 和y,它们应该是0 0,第五个和第六个应该是$x1$y1 我想。 .. 我试过了,但是不行 作为图像结果:位置裁剪是正确的,它只是不能删除黑色区域。 最终图像大小是否正确cropped 大小?还是原来的尺寸? 图像结果:黑色区域和裁剪区域图像都是裁剪尺寸 【参考方案1】:

这段代码没问题:

 imagecopyresampled($new_image, $this->image, 0, 0, $x1, $y1, $this->getWidth(), $this->getHeight(), $newwidth, $newheight);

【讨论】:

以上是关于opengl翻转后为啥出现两个图像的主要内容,如果未能解决你的问题,请参考以下文章

用负数翻转没有比例的Opengl绘图

我应该垂直翻转加载了 stb_image 的图像的线条以在 OpenGL 中使用吗?

OpenGL纹理内存布局和查找速度

为啥在 glfw 窗口上没有使用 opengl 显示位图图像?在 C++ 中读取位图图像文件时出现问题

OpenGL核心配置文件不会纹理四边形

为啥我的三角形在镶嵌后不显示? OpenGL