gpt4 book ai didi

opengl - gluLookAt 和 glFrustum 一起扭曲了渲染吗?

转载 作者:行者123 更新时间:2023-12-02 07:48:49 24 4
gpt4 key购买 nike

我想知道 gluLookAtglFrustum 是否会扭曲渲染的图片。

场景是这样渲染的:

enter image description here

这是呈现它的代码。

InitCamera 被调用一次 并且,据我现在的理解,应该设置一个矩阵,就好像我从上方 2 个单位和前方 3 个单位的位置观察一样原点的原点。还使用 glFrustum 来创建透视图。

void InitCamera() {

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt (
0, 2 , 3,
0, 0 , 0,
0, 1 , - 0
);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum (- 1, 1,
- 1, 1,
1,1000.0);

glMatrixMode(GL_MODELVIEW);
}

然后 TheScene 才是真正绘制图片的地方:

void TheScene() {

glClear(
GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT
);

glMatrixMode(GL_MODELVIEW);

// Draw red circle around origin and radius 2 units:
glColor3d(1,0,0);
glBegin(GL_LINE_LOOP);
for (double i = 0; i<=2 * M_PI; i+=M_PI / 20.0) {
glVertex3d(std::sin(i) * 2.0, 0, std::cos(i) * 2.0);
}
glEnd();

// draw green sphere at origin:
glColor3d(0,1,0);
glutSolidSphere(0.2,128, 128);


// draw pink sphere a bit away
glPushMatrix();
glColor3d(1,0,1);
glTranslated(8, 3, -10);
glutSolidSphere(0.8, 128, 128);
glPopMatrix();

SwapBuffers(hDC_opengl);
}

红色的应该画在原点和它周围的红色圆圈的中心。但是看着就觉得怪怪的,感觉绿球根本不在中心。

另外,恕我直言,粉红色的球应该画成一个完美的圆,而不是椭圆。

所以,是我错了,图片画对了,还是我设置有误?

最佳答案

你的期望完全错误

  • 3d 圆(如果圆完全可见)的透视投影是椭圆,但圆心的投影通常不是椭圆的中心。 Perspective distortion on centers

  • 球体透视投影的轮廓一般是conic section即可以是圆形、椭圆形、抛物线或双曲线,具体取决于视点、投影平面和 3D 球体的位置。原因是球体的轮廓可以想象成一个从视点开始并接触与投影平面相交的球体的圆锥体。

当然,如果您使用完全垂直的相机观察圆,圆心将被投影到圆投影的中心。以同样的方式,如果您的相机正好指向一个球体,则球体轮廓将是一个圆圈,但这是特殊情况,而不是一般情况。

使用强透视(广角)相机时,中心之间的这些差异更加明显。用parallel projection相反,这种明显的扭曲是不存在的(即圆心的投影恰好是圆的投影的中心)。

关于opengl - gluLookAt 和 glFrustum 一起扭曲了渲染吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916317/

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