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

在描画时调用即可

创作不易,扫个红包吧

相关推荐
whoispo20 小时前
Imgui处理glfw的鼠标键盘的方法
opengl·imgui·gflw·鼠标键盘事件
ansondroider3 天前
Android OpenGLES 360全景图片渲染(球体内部)
android·360全景·opengles·球体
阿杰在学习6 天前
基于OpenGL ES实现的Android人体热力图可视化库
android·前端·opengl
彼方卷不动了6 天前
【技术学习】在 Android 上用 Kotlin 实现支持多图层的 OpenGL 渲染管线
android·kotlin·opengl
米芝鱼6 天前
LearnOpenGL(九)自定义转换类
开发语言·c++·算法·游戏·图形渲染·shader·opengl
byxdaz6 天前
OpenGL绘制文本
opengl
龙湾7 天前
OpenGLshader开发实战学习笔记:第一章 初识游戏图形
opengl
stevenzqzq8 天前
openGl片段着色器的含义
opengl·着色器
爱看书的小沐19 天前
【小沐学Web3D】three.js 加载三维模型(vue3)
javascript·vue·vue3·webgl·three.js·opengl·web3d
爱看书的小沐19 天前
【小沐学Web3D】three.js 加载三维模型(React)
javascript·react.js·vue·webgl·three.js·opengl·web3d