OpenGL z轴的点在哪里?

OpenGL z轴的点在哪里?,opengl,3d,Opengl,3d,我试图理解OpenGL坐标系。我所看到的每一处都被描述为右撇子,但这与我的经验不符。我试着画一些形状和三维物体,我看到明显的z轴指向“屏幕”(而x指向右边,y向上-这是左手坐标系的描述)。我错过了什么 编辑: 例如: 若+Z点查看器,为什么Z坐标更大的绿色三角形在红色三角形后面 初始化EGL: qglClearColor(Qt::darkGray); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc( GL_LEQUAL );

我试图理解OpenGL坐标系。我所看到的每一处都被描述为右撇子,但这与我的经验不符。我试着画一些形状和三维物体,我看到明显的z轴指向“屏幕”(而x指向右边,y向上-这是左手坐标系的描述)。我错过了什么

编辑: 例如:


若+Z点查看器,为什么Z坐标更大的绿色三角形在红色三角形后面

初始化EGL:

qglClearColor(Qt::darkGray);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc( GL_LEQUAL );    
glEnable(GL_COLOR);  
resizeGL:

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0f, 50.0f, -50.0f, 50.0f, 50.0, -50.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
油漆:

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef (-30.0, 1.0, 0.0, 0.0);
glRotatef (20.0, 0.0, 1.0, 0.0);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex3f(45.0, 0.0, 0.0);
glVertex3f(-45.0, 0.0, 0.0);
glVertex3f(0.0, 45.0,  0.0);
glVertex3f(0.0, -45.0,  0.0);
glVertex3f( 0.0, 0.0, 45.0);
glVertex3f( 0.0, 0.0, -45.0);
glEnd();
glBegin(GL_TRIANGLES);
//Red triangle:
glColor3f(1.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 20.0, 1.0);
glVertex3f(20.0, 0.0, 1.0);
//Green triangle:    
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-15.0, 0.0, 20.0);
glVertex3f(0.0, 25.0, 20.0);
glVertex3f(15.0, 0.0, 20.0);
glEnd();

对我来说最突出的是glOrtho函数。近剪裁平面和远剪裁平面仅相隔100个单位。那看起来很小。你真的想要那样吗?它由该函数中的最后两个参数表示

而且你的物体相对于这个小的平截体来说非常大。物体可能直接坐在你的相机前面,它会阻止其他物体被看到

我会放大glOrtho调用中的所有参数。嗯


在右手系统(OpenGL)中,负Z(-Z)应该指向屏幕。正Y应该“向上”,正X应该在右边

这似乎就是你所描述的,这是一个右手坐标系

也许这会有所帮助。
这取决于你怎么画

modelview的标识和投影的常规透视图将使用右手输入坐标系(正如JustBoo提到的,-z进入屏幕)

但是,如果加载一组不同的矩阵,没有任何东西可以阻止您翻转矩阵中的一个坐标,从而形成左手系统。(或不翻转。gluPerspective/glFrustum实际上翻转z坐标)。在执行此操作时,需要记住一些实际的事情,例如剔除的缠绕顺序

我错过了什么

在左手系统的(视口)中,
x
指向右侧,
y
指向上方,
z
指向前方(远离观看者)

右撇子
x
指向右侧,
y
指向上方,
z
指向后方(朝向观看者)

这张照片是从中国拍摄的

x
是拇指,
y
是食指,
z
是中指。

最后两个参数参考:

近瓦尔,远瓦尔
指定到较近和较远深度剪裁平面的距离如果平面位于查看器后面,则这些值为负值。


较近的剪裁平面位于查看器前面,较远的剪裁平面位于查看器后面。它将翻转Z轴。

通过Z轴“进入屏幕”我指的是正Z轴(点的Z坐标越大,距离越远)。我不会将glScale与负值或诸如此类的值一起使用,所以这对我来说有点神秘。@majaen:也许你对modelview矩阵的设置不同。z越大,物体离你越近。你确定在代码的某个地方,某个轴没有被“翻转”吗?我(模糊地)记得有一次我翻转某些轴,甚至在左上角做原点以适应Windows中的系统。似乎某个地方的代码中有什么东西引起了奇怪。我编辑了我的问题,添加了一个简单的示例,也许这有助于找出我的假设中哪些是错误的。请参阅我上面文章中的新措辞。“如果+Z点查看器,为什么Z坐标较大的绿色三角形在红色三角形后面?”您将整个场景旋转了两次。在渲染三角形之前,请为模型视图矩阵调用glLoadIdentity,然后比较结果。这基本上就是我在回答此问题12小时前所说的。是的,z轴确实意外翻转,但随后我在定位负责此操作的确切代码行时遇到了问题感谢链接,使用此图像进行解释要简单得多:)