gpt4 book ai didi

java - 如何正确设置截锥体投影?

转载 作者:行者123 更新时间:2023-12-01 19:39:26 26 4
gpt4 key购买 nike

我正在尝试创建一个平截头体投影,以便我可以正确查看 3D 对象并在 3D 空间中导航。我知道在 0,0,0 处创建一个圆锥形形状,您可以指定它的方向,但有一些我不明白的事情:

nearClipPlanefarClipPlane 到底有什么作用?为什么锥体应该离得更远?

如何控制相机的位置和指向?

我见过人们仅使用 1s-1s 创建视锥体,这是正确的方法吗?

我的代码:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(windowWidth / 2, windowWidth / 2, windowHeight / 2, windowHeight / 2, 0, -50);
glMatrixMode(GL_MODELVIEW);

while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//draw

glfwSwapBuffers(window);
glfwPollEvents();
}

最佳答案

首先,我建议使用新的 programmable pipeline而不是旧的固定功能管道,因为它已经被弃用十多年了。首先,新的管道看起来很困难,但是当你理解了它背后的概念时,它比旧的管道简单得多。

What exactly do nearClipPlane and farClipPlane work?

enter image description here位于近剪裁平面前面或远剪裁平面后面的对象不会被渲染。对于近平面和远平面,您不应将负值传递给 glFrustum(),常见的近平面距离值为 0.1,远平面距离为 100-1000。

How do I control the position and where the camera points?

在OpenGL中,您不改变相机的位置,而是以相反的方向变换整个场景(模型 View 矩阵)。例如,如果您想将相机的位置设置为 10,0,5 并绕 y 轴旋转相机 45 度,则必须使用

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,因为你必须将整个场景反向变换才能得到相机在移动的效果。

关于java - 如何正确设置截锥体投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55832013/

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