gpt4 book ai didi

c++ - ZZ坐标不匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:09 25 4
gpt4 key购买 nike

我在 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();
}

结果图像:

Compilation of the code above

If Translation before Scaling

最佳答案

考虑到您的 GL 调用,图像没问题。默认情况下,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(1 来自 glutSolidCube() 乘以 3.0 比例)。所以它比绿色的更大。

我不清楚你想要实现什么,所以我无法建议适当的操作。


作为旁注,您可能应该使用 glOrtho 来设置投影矩阵,而不是模型 View 。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com