【opengles】笔记1:屏幕坐标与归一化坐标(NDC)的转换

参考资料

OpenGL希望在所有顶点着色器运行后,所有我们可见的顶点都变为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说,每个顶点的x,y,z坐标都应该在-1.0到1.0之间,超出这个坐标范围的顶点都将不可见。

屏幕的中心点是(0,0)三个坐标轴的范围都是(-1.0,1.0)这样的坐标系是NDC坐标系

屏幕坐标系是指左上角为(0,0),单位长度是1个像素,右下角的坐标是(width,height)的坐标系,比如宽800,高600的屏幕左下角的坐标是(800,600)。

着色器和描画等操作的坐标还是NDC坐标,如果使用屏幕坐标系,描画时需要转换为NDC。

转换关系如下

由上述公式可以得到下面四个函数

复制代码
```c
int x_ndc_to_screen(float x)
{
	return (x+1)*0.5f*SCREEN_WIDTH;
}

int y_ndc_to_screen(float y)
{
	return (1-y)*0.5f*SCREEN_HEIGHT;
}

float x_screen_to_ndc(int x)
{
	return (x*2)/800.0-1;
}

float y_screen_to_ndc(int y)
{
	return 1-(y*2)/600.0;
}

在描画时调用即可

创作不易,扫个红包吧

相关推荐
梵尔纳多7 天前
绘制一个三角形
c++·图形渲染·opengl
下位子8 天前
『OpenGL学习滤镜相机』- Day 12: LUT 滤镜(Look-Up Table)
android·opengl
下位子8 天前
『OpenGL学习滤镜相机』- Day 11: 实时滤镜效果
android·opengl
叫我A先生13 天前
【OpenGL小作坊】C# + OpenTK + OpenGL实现.tif点云转换成.obj模型
c#·opengl
CheungChunChiu13 天前
Linux 图形栈全景解析:从 OpenGL 到 DRM/KMS 的完整链路
linux·运维·服务器·opengl
雪弯了眉梢25 天前
OpenGL(八)摄像机(Camera)
算法·图形渲染·opengl
爱看书的小沐1 个月前
【小沐学WebGIS】基于Three.JS绘制二三维地图地球晨昏效果(WebGL / vue / react )
javascript·vue.js·gis·webgl·three.js·opengl·晨昏线
唯道行1 个月前
计算机图形学·25 消隐2 区域子分算法-光线投射算法
人工智能·算法·计算机视觉·计算机图形学·opengl
唯道行1 个月前
计算机图形学·23 Weiler-Athenton多边形裁剪算法
算法·计算机视觉·几何学·计算机图形学·opengl
落樱弥城1 个月前
Compute Shader概论
ai·图形学·opengl