gpt4 book ai didi

c++ - OpenGL 中的颜色编码拾取问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:28 24 4
gpt4 key购买 nike

我正在为我的类项目制作游戏,实际上是 Minecraft 的非常基本的复制品。我现在正处于挑选过程中,这将使我能够在游戏环境中销毁和创建方 block 。

我一直在尝试使用 OpenGL 自己的拾取模式,但没有成功,使用数学库构建我自己的光线拾取器对于这种规模的项目来说似乎是一项艰巨的工作。因此,我决定使用颜色编码拾取方法,该方法包括以不同的颜色渲染每个可拾取的对象,然后获取鼠标位置的颜色并使用它来识别拾取的对象。

我当前的界面只是许多堆叠的盒子的 3D 渲染,创建了类似地形的结构。由于我还没有做任何纹理贴图,所以所有的框都是灰色阴影(启用照明)。

现在,是时候编写一些实际代码了:

这是初始化部分,启用纹理、光照等。

glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);

单击鼠标按钮时,我尝试通过以下方式获取鼠标光标位置(实际上始终位于窗口中间)的颜色:

glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glDisable(GL_DITHER);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHT1);
renderColors();
GLubyte pixels[3];
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, (void *)pixels);
glEnable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);
glEnable(GL_DITHER);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);

问题是,禁用不起作用,我总是在我的 pixels 数组中获取不同灰度阴影的 RGB 值。

可能是什么问题?

最佳答案

也许您忘记清除颜色缓冲区并禁用深度缓冲区,并且您所有渲染的颜色都会导致 Z-Fighting 或根本不渲染(如果 z-test 为“less”)。尝试添加 swapbuffers 代码并查看在您的 ColorRender 代码之后渲染的内容。

关于c++ - OpenGL 中的颜色编码拾取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4550350/

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