【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;
}

在描画时调用即可

创作不易,扫个红包吧

相关推荐
郝学胜-神的一滴3 天前
中级OpenGL教程 030:gl_FragCoord解锁区域渲染与深度可视化新姿势
c++·unity·游戏引擎·图形渲染·unreal engine·opengl
郝学胜_神的一滴3 天前
Horse3D 游戏引擎研发笔记(五):Ferghana 编辑器——从场景 JSON 到可交互视口
计算机图形学·opengl
一枚懒人9 天前
OpenGL 视频渲染导论:从图形管线到视频处理全览
程序员·opengl
郝学胜-神的一滴15 天前
中级OpenGL教程 026:Assimp库从编译到实战全攻略
c++·unity·游戏引擎·图形渲染·unreal engine·opengl
郝学胜_神的一滴20 天前
中级OpenGL教程 024:Assimp模型加载之Mesh解码玄功
计算机图形学·opengl
郝学胜-神的一滴21 天前
中级OpenGL教程 023:Assimp模型加载全解——从源码到架构的骈文探秘
c++·unity·游戏引擎·cmake·unreal engine·opengl
郝学胜-神的一滴22 天前
中级OpenGL教程 022:探秘三维世界的血脉传承——物体父子关系与矩阵递归奥义
c++·线性代数·unity·矩阵·游戏引擎·unreal engine·opengl
郝学胜_神的一滴24 天前
Horse3D 游戏引擎研发笔记(二):材质系统——从 JSON 配置到 GPU Uniform
游戏开发·opengl
郝学胜-神的一滴1 个月前
[简化版 GAMES 101] 计算机图形学 17:纹理技术从基础原理到多场景实战应用
c++·unity·游戏引擎·图形渲染·three.js·opengl·unreal
郝学胜-神的一滴1 个月前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal