Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL:为什么具有相同X坐标的球体在输出中不是直线? 我正在做一个C++项目,它是用MFC模板编写的; 使用OpenGL库,我在一个特殊的坐标系中绘制球体。我使用glTranslatef函数进入这个特殊的坐标,但是当我用相同的X坐标绘制两个球体时,看起来它们的X有所不同_C++_Opengl - Fatal编程技术网

OpenGL:为什么具有相同X坐标的球体在输出中不是直线? 我正在做一个C++项目,它是用MFC模板编写的; 使用OpenGL库,我在一个特殊的坐标系中绘制球体。我使用glTranslatef函数进入这个特殊的坐标,但是当我用相同的X坐标绘制两个球体时,看起来它们的X有所不同

OpenGL:为什么具有相同X坐标的球体在输出中不是直线? 我正在做一个C++项目,它是用MFC模板编写的; 使用OpenGL库,我在一个特殊的坐标系中绘制球体。我使用glTranslatef函数进入这个特殊的坐标,但是当我用相同的X坐标绘制两个球体时,看起来它们的X有所不同,c++,opengl,C++,Opengl,例如,当我在(x,y,z):(1,1,0)和(x,y,z):(1,2,0)中绘制两个球体时,输出如下: 此视图来自上面: 这是我绘制球体的函数: void MYGLView::DrawSphere(double X_position, double Y_Position, double Z_Position, GLdouble radius, int longitudeSubdiv, int latitudeSubdiv, double Red, double Green,d

例如,当我在
(x,y,z):(1,1,0)
(x,y,z):(1,2,0)
中绘制两个球体时,输出如下:

此视图来自上面:

这是我绘制球体的函数:

void MYGLView::DrawSphere(double X_position, double Y_Position, double Z_Position,
    GLdouble radius, int longitudeSubdiv, int latitudeSubdiv,
    double Red, double Green,double Blue)
{
    gluQuadricDrawStyle(m_quadrObj, GLU_FILL);

    float shininess = 64.0f;
    glPushMatrix();
    glTranslatef(X_position,Y_Position,Z_Position);
    glColor3f(Red,Green,Blue);
    gluSphere(m_quadrObj,radius,longitudeSubdiv,latitudeSubdiv);
    //glTranslatef(-3,0,0);
    glFlush();
    glPopMatrix();
}

你能告诉我哪里出错了吗?

你的相机稍微向下转了转。因此,所有垂直线都有一个消失点。如果您希望屏幕上的所有垂直线都平行,则不允许您的相机向下倾斜。或者,您可以使用平行投影,其中世界上所有平行的线在图像中保持平行。

当glPushMatrix将矩阵推到堆栈上并由GLPOPMARRIX恢复时,GLTRANSTALF使用上一个矩阵作为参考框架。因此,参考框架很可能由于之前的绘制例程而被缩放/倾斜/旋转-可能您打算执行glLoadIdentity来“重置”它。我添加它们只是为了测试输出;)没有他们,问题依然存在!你是说“平行投影”是我研究的另一个概念吗?你什么意思?我认为照相机的方向不是问题所在。因为当我旋转场景并从球体底部观察时,上面的标记似乎有更大的x;你是说当你从上面看,而不是从下面看。这与这样一个事实有关:在透视投影中,每一个靠近相机的物体都被放大,而远离相机的物体都被缩小。平行投影的行为不同。最简单的例子是,下载blender,添加一些立方体并旋转相机,然后按Numpad_5到acitvate parallele projection并查看差异。