3

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

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

我使用 gluPerspective 作为 3d 透视图,使用 glRotatef 旋转世界,这很正常

4

1 回答 1

3

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

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

另一种技术是通过屏幕“投射光线”。基本上,您针对几何图形中的每个形状测试几个方程,如果这些测试通过,您就有了一个交集,并且您知道单击了哪个形状。我对这种方法不是很有经验,所以如果他们愿意,我会把它留给其他人解释。

于 2012-12-14T00:45:41.757 回答