gpt4 book ai didi

c++ - openGL:无法在相机前正确绘制球体

转载 作者:行者123 更新时间:2023-11-30 05:20:24 25 4
gpt4 key购买 nike

我正在尝试在镜头前绘制一个小球体,假设距离为 5 个单位(C++,openGL 新手,对三角函数不是很有信心!)。我希望在执行摇摄和俯仰运动时球体始终位于相机的中间。

在我的渲染循环中,我按以下方式计算球体的坐标:

// 1) settimg my camera
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(camera_angle[1], 0, 1, 0);
glRotatef(camera_angle[0], 1, 0, 0);
glRotatef(camera_angle[2], 0, 0, 1);
glTranslatef(camera_pos[0],camera_pos[1],camera_pos[2]);

// 2) retrieving camera pan tilt angles in radians:
double phi = camera_angle[1] *(M_PI/180.0); //pan
double theta = camera_angle[0] *(M_PI/180.0); //tilt

//3) calculating xyz coordinates of the sphere, if 5 units away from camera
double dist = -5;
double ax = camera_pos[0] + (-1)*(dist*sin(phi)*cos(theta));
double ay = camera_pos[1] + dist*sin(theta);
double az = camera_pos[2] + dist*cos(theta)*cos(phi);

//4) draw sphere
float ndiv = 2.0;
GLfloat f[]={1.0,1.0,1.0,1};

glPushMatrix();
glTranslated(ax, ay, az);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, f);
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
for (int i=0;i<20;i++)
makeTri(vdata[tindices[i][0]], vdata[tindices[i][1]], vdata[tindices[i][2]], ndiv, 0.2);
glEnd();
glPopMatrix();

我在这里找到了三角函数公式 spherical coordinate system

请注意,我反转了一些值,如 sin 和 cos,因为我猜正确的顺序取决于引用系统(我猜 openGL 有一些反转轴)。

现在我有一个奇怪的结果,可以在这个视频中看到:

sphere behaviour

请忽略背景中的彩色球体和相机中间的绿色方 block ,只看相机前面的白色球体。

如您所见,如果我只执行平移或倾斜(查看左下角的值,显示确切的摄像机角度),白色球体始终位于摄像机的正中心,正如预期的那样。然而,当同时执行摇摄和俯仰时,球体会漂移:平移和倾斜值偏离 0 度越多,球体漂移越多。此外,漂移的形状遵循圆形轨迹,这对我来说非常可疑。

有人有想法吗?谢谢

最佳答案

要绘制相对于相机不移动的东西,您只需从头开始使用恒等模型 View 矩阵:

float ndiv = 2.0;
GLfloat f[]={1.0,1.0,1.0,1};

glPushMatrix();
glLoadIdentity(); // <------------- zero out transforms
glTranslated(0, 0, -5); // <------------- translate 5 units from the camera
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, f);
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
for (int i=0;i<20;i++)
makeTri(vdata[tindices[i][0]], vdata[tindices[i][1]], vdata[tindices[i][2]], ndiv, 0.2);
glEnd();
glPopMatrix();

关于c++ - openGL:无法在相机前正确绘制球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653666/

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