java - 找出立方体的哪一侧位于屏幕中央?

标签 java opengl lwjgl minecraft

我正在尝试通过制作 minecraft 克隆来学习 OpenGL 和 LWJGL,但我被卡住了

我能够轻松地渲染方 block 并拥有带 wasd 控件的第一人称相机,现在我正在尝试能够放置方 block ,但我不知道如何才能检查哪个立方体和哪一面我正在查看的那个立方体/位于屏幕中央,因此我可以将另一个立方体放在该立方体旁边。

我正在使用 gluPerspective 进行 3d 透视,并使用 glRotatef 来旋转世界,非常正常的东西

最佳答案

一种技术是使用 id 缓冲区。您使用帧缓冲区一次将场景绘制为两个纹理。第一个纹理将是典型的颜色纹理。第二个是存储整数的纹理。在绘制场景之前,您为每个立方体面分配了一个编号。您将这些数字传递给着色器(统一变量适用于此)。片段着色器会将这些数字“绘制”到整数纹理,同时对颜色纹理进行正常着色。当您需要查找鼠标光标处的内容时,请使用 glReadPixels()

这一切都是假设您使用的是现代 OpenGL(3 或更好)。如果您受困于固定功能管道(lame),您还可以为每个立方体面分配一个唯一的颜色,并使用纯色绘制到后台缓冲区。确保关闭纹理等。完成后,使用 glReadPixels() 查找在鼠标光标处绘制的内容。然后你像往常一样再次绘制东西并交换缓冲区。 (这里有一些过时的代码显示了我在说什么:http://www.lighthouse3d.com/opengl/picking/index.php3?color1)

另一种技术是通过屏幕“转换光线”。基本上,您针对几何体中的每个形状测试几个方程式,如果这些测试通过,则您有一个交集并且您知道单击了哪个形状。我对这种方法不太熟悉,所以如果他们愿意,我会留给其他人解释。

关于java - 找出立方体的哪一侧位于屏幕中央?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870254/

相关文章:

c++ - OpenGL 着色器 GLSL 中的颜色按位移位

java - 从命令行使用 LWJGL 3

java - 推土机字符串到枚举映射

java - 在软件中实现超时

java - 店铺营业时间

java - gluProject 将 3D 坐标转换为 2D 坐标不会正确转换 2D Y 坐标

java - glOrtho 黑屏

java - 使用 Windows 时 glDrawElements 上的 EXCEPTION_ACCESS_VIOLATION

java - 使用轻量级 Java 游戏库 (LWJGL) 的 3D 对象所需的建议

java - 迭代后计算时间减少