我目前正致力于在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;
}
我知道我面对的是物体,因为我可以在屏幕中央看到一个来自机器人的点。
答案 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,它比看功能更容易工作(在我看来)