添加gluPerspective和gluLookAt使我的绘图消失

时间:2015-05-11 12:55:17

标签: c++ opengl c++11 glut freeglut

我目前正致力于在3d空间中创建和绘制机器人的基本GUI,我使用OpenGL和freeglut来处理3d部分。

直到上周,我才忽略了所有的观点,例如' gluLookAt'或者' gluPerspective' ...

现在,我想添加这些内容,以便通过用户输入获得基本的相机移动(旋转,缩放,平移)。

但是每当我尝试将透视部分添加到我的代码中时,我都会陷入困境,我不能再使用我漂亮的机器人了。

这是我目前的代码:

public class Global : System.Web.HttpApplication
{
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Request.Url.AbsolutePath.EndsWith("/"))
        {
            Server.Transfer(Request.Url.AbsolutePath + "MyPage.aspx");
        }
    }
}

我想知道我的代码是否需要完全重新完成才能正常使用这些内容,或者我是否正确使用它们。

Atm我试图在窗口创建后添加它:

public int add(int a,int b) {
    return a+b;
}

这是在绘图部分之后的drawScene函数中:

void drawScene(void) {
glClearColor(1.0f,1.0f,1.0f,0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glMatrixMode(GL_MODELVIEW);
glColor3f(0.0f, 0.0f, 0.0f);
ortho();
robot.draw(); // only sone basic lines and quads
glLoadIdentity();
sprintf(title, "robot creation link:%i/joint:%i", robot.linkNumber,       robot.jointNumber);
glutSetWindowTitle(title);
glFlush();
}


int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE|GLUT_MULTISAMPLE);
glutInitWindowPosition(0,0);
glutInitWindowSize(1360,768);
glEnable(GL_MULTISAMPLE_ARB | GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
id = glutCreateWindow("robot creation");

glutDisplayFunc (drawScene);
glutKeyboardFunc(keyboardHandler);
glutSpecialFunc (specialKeyHandler);
glutMouseFunc   (mouseHandler);
glutReshapeFunc (reshapeHandler);

glutMainLoop();
return 0;
}

我知道我面对的是物体,因为我可以在屏幕中央看到一个来自机器人的点。

1 个答案:

答案 0 :(得分:0)

你有两种矩阵模式(模型视图和投影。最好激活一个。对于gmu透视图尝试类似gluPerspective(170,1.33,0.00001,1000);或者将相机放得更近以检查是否可以看到对象的差异。如果你无法看到对象,你的矩阵会相互覆盖。你可以通过以下方式检查它们的值:Gl.glGetDoublev(Gl.GL_MODELVIEW_MATRIX,modelMatrix); Gl.glGetDoublev(Gl.GL_PROJECTION_MATRIX,projMatrix);.

另一种选择也是gluunproject,它比看功能更容易工作(在我看来)