首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gluLookAt问题

gluLookAt问题
EN

Stack Overflow用户
提问于 2012-11-21 10:33:35
回答 1查看 382关注 0票数 1

我一直在尝试用OpenGL创建一个过山车模拟器,它使用一系列的gluLookAt调用来让相机“坐”上过山车。杯垫本身基于坐标数组中具有控制点的b样条曲线。b0(u),b1(u)等是B样条曲线的混合函数,bprime0(u)等是它们的导数。以下是我的代码的相关部分:

代码语言:javascript
复制
for (int i = 0; i <= 10; i++){
        for (float u = 0; u <= 1.1; u+=0.1){

            x = (b0(u)*coords[(i)%10].x + b1(u)*coords[(i+1)%10].x
                + b2(u)*coords[(i+2)%10].x + b3(u)*coords[(i+3)%10].x)*2.0f;
            y = (b0(u)*coords[(i)%10].y + b1(u)*coords[(i+1)%10].y
                + b2(u)*coords[(i+2)%10].y + b3(u)*coords[(i+3)%10].y)*2.0f;
            z = (b0(u)*coords[(i)%10].z + b1(u)*coords[(i+1)%10].z
                + b2(u)*coords[(i+2)%10].z + b3(u)*coords[(i+3)%10].z)*2.0f;

            xprime = (bprime0(u)*coords[(i)%10].x + bprime1(u)*coords[(i+1)%10].x
                    + bprime2(u)*coords[(i+2)%10].x + bprime3(u)*coords[(i+3)%10].x)*-2.0f;
            yprime = (b0(u)*coords[(i)%10].y + bprime1(u)*coords[(i+1)%10].y
                    + bprime2(u)*coords[(i+2)%10].y + bprime3(u)*coords[(i+3)%10].y)*-2.0f;
            zprime = (b0(u)*coords[(i)%10].z + bprime1(u)*coords[(i+1)%10].z
                    + bprime2(u)*coords[(i+2)%10].z + bprime3(u)*coords[(i+3)%10].z)*-2.0f;

            Coords nvector = {xprime,yprime,zprime};
            float magn = sqrt(nvector.x*nvector.x+nvector.y*nvector.y+nvector.z*nvector.z);
            nvector.x= nvector.x/magn;
            nvector.y= nvector.y/magn;
            nvector.z= nvector.z/magn;

            glLoadIdentity();
            if (rotateCam == 1){
                theta+=0.0001;
                if (theta > 360) {
                    theta = 0;
                }
                gluLookAt(20*cos(theta),15,20*sin(theta),0,0,0,0,1,0);
                }//if
            else{
                printf("%f\t%f\t%f\n", x+xprime,y+yprime,z+zprime);
                gluLookAt(x,y+1,z,x+xprime,y+yprime,z+zprime,0,1,0);
            }//else

        }//for
}//for

空格键切换'rotateCam‘变量,该变量应该在两种查看模式之间切换;一种是在过山车周围环绕相机( 'if’语句),另一种是乘坐过山车( 'else‘语句)。

问题是:旋转模式工作得很好,模式之间的切换也很好,但相机在“乘坐”模式下总是静止不动的。printf语句显示x、xprime、y、yprime等都随着计时器滴答而变化,但相机永远不会移动。

如果需要更多代码,请让我知道。

EN

回答 1

Stack Overflow用户

发布于 2012-11-21 11:05:00

gluLookAt不会定位cemera,它只是将其旋转到正确的角度。在这之后,就由你来翻译它了。因此,这应该会起到作用:

代码语言:javascript
复制
gluLookAt(x,y+1,z,x+xprime,y+yprime,z+zprime,0,1,0);
gluTranslated(x,y+1,z);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13485498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档