Articles of 采摘

采用旋转视图matrix的挑选问题

如果我的视图matrix没有旋转(只有翻译),我select的代码工作。 现在,如果我旋转我的相机,采摘会下地狱。 我不能find什么是错的 我的代码: /*———————————————————– Function: GetViewportSystem Returns: viewportCoordSystem Get viewport coordinate system (only for reading) Forward ray goes through origin d = distance |camera, projection plane| cameraPos = position of camera in World Space lookAt = camera target in World Space ————————————————————-*/ ViewportCoordSystem Camera::GetViewportSystem() const { ViewportCoordSystem viewportCoord; viewportCoord.w = this->cameraPos; viewportCoord.w = this->cameraPos […]

Java的Slick2d – 鼠标的select如何考虑到相机

当我移动它显然改变了视口,所以我的鼠标selectclosures。 我的相机只是一个浮动X和Y,我用g.translate(-cam.cameraX + 400,-cam.cameraY + 300); 翻译graphics。 我有硬编码的数字仅用于testing目的。 我将如何考虑相机,使我的鼠标拾取正常工作。 double mousetileX = Math.floor((double)mouseX/tiles.tileWidth); double mousetileY = Math.floor((double)mouseY/tiles.tileHeight); double playertileX = Math.floor(playerX/tiles.tileWidth); double playertileY = Math.floor(playerY/tiles.tileHeight); double lengthX = Math.abs((float)playertileX – mousetileX); double lengthY = Math.abs((float)playertileY – mousetileY); double distance = Math.sqrt((lengthX*lengthX)+(lengthY*lengthY)); if(input.isMousePressed(Input.MOUSE_LEFT_BUTTON) && distance < 4) { if(tiles.map[(int)mousetileX][(int)mousetileY] == 1) { tiles.map[(int)mousetileX][(int)mousetileY] = 0; } […]

我如何从光线位置移除视图和投影matrix来获取光线模型?

我的采摘模块有点问题,我需要你的帮助。 当我点击某处时,我有一种方法可以将相机中的光线投射到一个固定点。 计算出来的光线看起来不错,它走向问题的方向,并通过尖顶的盒子,所以我在这里想一切都好。 当我试图从原点进一步拾取对象时,找不到交点。 我敢肯定,射线是正确的投影和计算到屏幕(我画),但坐标是不好的在相交testing。 目前,我用这个代码计算射线: const glm::vec3 position = glm::vec3( mouse.x, mouse.y, 0.f ); const glm::mat4& view = camera.getViewMatrix(); const glm::mat4& projection = camera.getProjectionMatrix(); const glm::vec4& viewPort = camera.getViewport(); ray.origin = glm::unProject( glm::vec3(mouse.x, mouse.y, 0.f ), modelView, projection, viewPort ); ray.direction = glm::unProject( glm::vec3( mouse.x, mouse.y, 0.f ), modelView, projection, viewPort ); 所以,我认为射线的起源和方向是计算到世界的位置(用相机matrix:投影和视图)。 当我testing十字路口时,我使用了对象模型(没有摄像头变换),所以我想错误在这里。 […]

颜色挑选问题 – LWJGL / OpenGL

我试图检查用户在哪个对象上盘旋。 虽然一切似乎只是我认为应该是,我无法得到正确的颜色由于第二次绘制(不采摘颜色)。 这是我的渲染代码: public void render() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); camera.applyTranslations(); scene.pick(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); camera.applyTranslations(); scene.render(); } 这里是“scene.pick()”上的每个块/磁贴上调用的内容: public void pick() { glColor3ub((byte) pickingColor.x, (byte) pickingColor.y, (byte) pickingColor.z); draw(); glReadBuffer(GL_FRONT); ByteBuffer buffer = BufferUtils.createByteBuffer(4); glReadPixels(Mouse.getX(), Mouse.getY(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, buffer); int r = buffer.get(0) & 0xFF; int g = buffer.get(1) & […]

如何在OpenGL中使用OBB来实现对象拾取?

我正在尝试制作3D绘图软件。 我想有拖动function,所以我正在使用OBBalgorithm的对象选取。 我在理解algorithm时面临着问题,因此我的实现存在缺陷。 如何在OpenGL中使用OBB来实现对象拾取? 由于我是OpenGL(free-glut库)的新手,一步一步的解释会很有帮助。

在XNA 4.0中使用相机缩放时,用鼠标拾取3D对象

我试图弄清楚如何用鼠标进行拾取,而在用相机(第三人称相机)放大的时候,工作效果很好。 当使用第一人称相机时,它可以很好地工作。 但是,在使用第三人称摄像机时,如果缩小摄像机视图,拾取将停止,它会给我提供不正确的位置,并开始拾取屏幕中心的一组有限的项目。 这就像我必须弄清楚如何根据我正在执行的缩放来缩放select。 这是我现在select的代码。 重点是让“targetPoint”成为你在世界坐标中select的位置: if (_gameManager.Camera is FirstPersonCamera) { // Get the building location from the look vector of the camera targetPoint = _player.Position + (_player.LookVector * x); } else if (_gameManager.Camera is ThirdPersonCamera) { // Get the building location based on the mouse cursor Vector3 nearsource = new Vector3((float)_player.PreviousMouseState.X, (float)_player.PreviousMouseState.Y, 0f); Vector3 […]

二维等距采摘

我试图在我的等距2D游戏中实现拾取,但是,我失败了。 首先,我已经寻找了一个解决scheme,并使用matrix来解决几个不同的方程,甚至是一个解决scheme。 我试着实现每一个,但他们似乎没有为我工作。 这个想法是,我有一个瓦片数组,每个瓦片都有指定的x和y坐标(在这个简单的例子中,它是由它在数组中的位置)。 我在想瓷砖(0,0)应该在左边,顶部(最大0) ,底部(0,最大)和右边(最大,最大) 。 我想出了这个循环的绘图,Google似乎已经validation了正确的解决scheme,正如渲染的场景(当然,它仍然是错误的,也是原谅杂乱的名字和东西,这只是一个WIP的概念validation码) // Draw code int col = 0; int row = 0; for (int i = 0; i < nrOfTiles; ++i) { // XOffset and YOffset are currently hardcoded values, but will represent camera offset combined with HUD offset Point tile = IsoToScreen(col, row, TileWidth / 2, TileHeight […]

如何使用光标位置创建3D拾取光线

我在这里是新的,我不知道如何去做这件事。 我正在创建一个应用程序,该应用程序应该使用光标在窗口中的位置来执行3D拾取。 我发现的教程只解释了从相机的中心(如十字线)中射出一束光线,但是这并没有帮助,因为鼠标并不总是居中。 我期待了解如何基于鼠标在窗口上的x和y位置挤出拾取光线。 另外,它不是太多的select,因为它是在正确的方向投射光线。 挑选将通过获得射线中的点并检查该点上的单位是否已满来处理。 任何帮助非常感谢,请尊重,并提前致谢!

等轴瓦拾取algorithm不起作用

再次开始gamedev和尝试一个等距的游戏。 然而,所有我尝试,我似乎无法弄清楚瓷砖采摘正确..使用SFML 以下是我如何检测点击和移动sf :: View。 精灵是64 * 32 #include "GameWorld.h" #include <math.h> GameWorld::GameWorld() { this->camX = 0; this->camY = 0; this->factories.push_back(new Factory("Factory 1")); } void GameWorld::draw(sf::RenderWindow * win, ContentManager* contentManager) { this->factories.at(this->activeFactory)->render(win,contentManager, this->camX, this->camY); } void GameWorld::update(float delta, sf::RenderWindow* win) { float speed= 128; sf::View view = win->getView(); if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { this->camY -= speed*delta; } […]

如何在HTML5中执行高效的2D拾取?

我目前使用R-Tree进行拾取和碰撞testing。 屏幕上的每个实体都有一个碰撞边界框和一个单独的边界框来进行拾取。 由于实体可能非常频繁地改变位置,所以两个树必须每帧更新/重新sorting一次。 虽然这对于冲突非常有效,但是由于树在每个帧的数百个碰撞查询中都被使用,所以我发现拾取的代价太高,因为只有在用户点击时它才会被查询,从而导致大量浪费的树更新。 什么是更有效的方式来实施拣选没有太多的开销?