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翻转后为啥出现两个图像的主要内容,如果未能解决你的问题,请参考以下文章
我应该垂直翻转加载了 stb_image 的图像的线条以在 OpenGL 中使用吗?