Прежде всего, я бы порекомендовал использовать новый программируемый конвейер вместо старого конвейера с фиксированной функцией, поскольку он устарел уже более десяти лет.Во-первых, новый выглядит очень сложно, но когда вы поняли концепцию, стоящую за ним, он намного проще, чем старый конвейер.
Что именно работают рядом сClClipPlane и farClipPlane?
Объекты, находящиеся перед ближней плоскостью отсечения или позади дальней плоскости отсечения, не будут визуализироваться.Вы не должны передавать отрицательные значения в glFrustum()
для ближней и дальней плоскости, общие значения равны 0,1 для ближней плоскости и 100-1000 для расстояния в дальней плоскости.
Как управлять положением и точкой, на которую указывает камера?
В OpenGL вы не меняете положение камеры, а трансформируете всю сцену(модель-матрица) в обратном направлении.Например, если вы хотите установить положение камеры на 10, 0, 5 и повернуть камеру на 45 градусов вокруг оси y, вы должны использовать
glMatrixMode(GL_MODELVIEW);
/*
If you wouldn't generate a new identity matrix every frame, you would **add** the rotation/translation to the previous one, which obviously isn't what you want
*/
glLoadIdentity();
Vector3f cameraPosititon = new Vector3f(10, 0, 5);
/*
rotate selected matrix about 45 degrees around y
With the 1 as third argument you select that you want to rotate over the y-axis.
If you would pass 1 as 2nd or 4th argument, you would rotate over the x or the z axis.*/
glRotatef(45, 0, 1, 0);
//translate selected matrix about x, y, z
glTranslatef(-1 * cameraPosition.x, -1 * cameraPosition.y, -1 * cameraPosition.z);
Я прошел положениеКамера умножена на -1, потому что вам нужно преобразовать всю сцену в обратном направлении, чтобы получить эффект, похожий на то, что камера движется.