我在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/