我在c++中有这段代码,基本上使用GlutSolidCube(1)创建了一系列多维数据集。

我进行了重新缩放,以使多维数据集的宽度恒定为8,高度恒定为5,无论任何元素。
ZZ值用于绘制各种事物。

问题在于多维数据集之间的距离没有意义:如果我在ZZ中绘制一个具有2个单位的多维数据集,则下一个多维数据集以2个ZZ开始是有意义的,对吗?为什么结果不同?

这是代码:

#include "stdafx.h"
#include "glut.h"

void reshape(int w, int h) {
    float xmin = -10., xmax = 10., ymin = -2., ymax = 10.;
    float ratio = (xmax - xmin) / (ymax - ymin);
    float aspect = (float)w / h;
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glOrtho(xmin, xmax, ymin, ymax,-2,30);
    if (ratio < aspect)
        glScalef(ratio / aspect, 1., 1.);
    else
        glScalef(1., aspect / ratio, 1.);
}

void myDisplay(void)
{
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0f, 1.0f, 1.0f);


    glMatrixMode(GL_MODELVIEW);

    //Margem 1
    glPushMatrix();
    glColor3f(0.0f, 0.4f, 0.0f);
    glRotatef(90.0, 1.0, 0.0, 0.0);
    glScalef(8.0, 5.0, 2.0);
    glTranslatef(0.0, 0.0, 0.0);
    glutSolidCube(1);
    glPopMatrix();

    //Estrada
    glPushMatrix();
    glColor3f(1.0f, 1.0f, 1.0f);
    glRotatef(90.0, 1.0, 0.0, 0.0);
    glScalef(8.0, 5.0, 3.0);
    glTranslatef(0.0, 0.0, -1.);
    glutSolidCube(1);
    glPopMatrix();

    glFlush();
}

void main (int argc,char** argv) {
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(400, 400);
    glutInitWindowPosition(-1, -1);
    glutCreateWindow("Teste");
    glutDisplayFunc(myDisplay);
    glutReshapeFunc(reshape);
    glutMainLoop();
}

结果图像:

最佳答案

鉴于您的总帐调用,该图像正常。默认情况下,OpenGL摄像机向下看Z负轴(即Z轴指向它)。首先绕X轴旋转90度,绘制绿色框,这会使Z指向下方,Y指向相机。然后,将Z(现在为上下轴)缩放2.0,最后绘制立方体。立方体的Z大小是1(来自glutSolidCube())乘以2.0(比例),总共2个单位。

对于白色立方体,您将以相同的旋转开始,将Z缩放3.0,然后沿负缩放Z轴平移1.0。这等效于向上的3个未缩放的单位,并且该多维数据集的Z尺寸也为3(从glutSolidCube()中乘以1乘以3.0缩放)。因此,它更大且高于绿色。

我不清楚您要实现什么目标,因此我无法建议适当的操作。

附带说明一下,您可能应该使用glOrtho设置投影矩阵,而不是modelview矩阵。

关于c++ - ZZ坐标不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26162821/

10-09 13:11