我一直在搜索谷歌和亚马逊,但在基于四叉树的LOD地形上找不到任何合适的来源.有些人只是解释了粗略的概念,但我已经知道我需要的是一些带有注释的例子.
我有一个程序允许用户在大小为1000乘750的JFrame上绘制顶点和边.现在我需要使用四叉树来根据单个象限中有多少个顶点来划分输入图.如果有人能指出我如何实现这个目标,我真的很感激吗?
附加信息:我有一个Edge类,它存储:source(顶点),target(顶点)和weight.我有一个Vertex类,它存储:name,x坐标,y坐标和Edge [] adjacentList.我还有一个Graph类,它存储两个ArrayLists:边和顶点.

目的是什么:
我对线程比较陌生.我一直在尝试制作四叉树渲染的地形,这将快速有效地渲染.如果全部处于最大细节,则当前渲染的地形量将主要滞后于用户.这就是我使用QuadTree渲染它的原因.该引擎还支持输入和物理,因此我决定使用渲染线程.这导致了很多问题.
问题('s): 当我没有线程时,由于引擎中的其他系统存在一些滞后.造成延迟的主要原因是QuadTree中地形的加载和删除(我甚至不确定这是否是最佳方式.)现在,渲染发生得非常快,并且似乎没有滞后.当相机静止不动时,游戏运行良好.我让游戏运行了一个小时,没有发现崩溃.
加载terrain时,它使用渲染代码使用的几个变量.即,绑定缓冲区 -
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, normalbuffer);
glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(glm::vec3), &normals[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glBufferData(GL_ARRAY_BUFFER, uvs.size() * sizeof(glm::vec2), &uvs[0], GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)
我认为这个变量与另一个线程同时被访问.这会导致崩溃.如何解决这个问题?我尝试过使用互斥锁,但这似乎不起作用.我将锁定和解锁互斥锁以解决此问题?
另一个似乎导致相同错误的变量是"IsLeaf".
加载大量地形后会导致另一次崩溃(std :: badAlloc).即使它正在清理.我认为这是由于我的删除代码,但我不知道什么是错的.
我当前添加和删除切片的方式是从相机检查范围并删除/创建切片.我想渲染我正在打开的瓷砖和它周围的瓷砖.但是,从4个主要切片中的一个切换时,这不起作用.使用范围创建不起作用,因为它是大瓷砖中心的范围而不是较小的瓷砖.我也尝试每隔几秒删除整个地图,这似乎也有效但但滞后更多.有没有更好的方法来创造和破坏?
在不同的决议之间存在差距.反正有减少这些吗?目前我渲染的瓷砖比它们需要的大一点,但这对主要的分辨率变化没有帮助.
如果您有任何想法如何解决其中一个错误,我们将不胜感激.
代码(这里上传太多了)
我在我的机器一个运行两个版本elasticsearch是1.7和其他2.3
我能够索引文档中的1.7版本,但相同的索引语句抛出u'caused_by': {u'reason': u'Java heap space', u'type': u'out_of_memory_error'}的2.3.
Elasticsearch 2.3的映射
{
"id": {
"type": "integer",
"store": "yes",
"index": "analyzed"
},
"field1": {
"type": "integer",
"store": "yes",
"index": "no"
},
"field2": {
"type": "integer",
"store": "yes",
"index": "no"
},
"field3": {
"type": "string",
"store": "yes",
"index": "no"
},
"field4": {
"type": "geo_shape",
"tree": "legacyquadtree",
"precision": "1mm"
}
}
Run Code Online (Sandbox Code Playgroud)
Elasticsearch 1.7的映射
{
"id": {
"type": "integer",
"store": "yes",
"index": "analyzed"
}, …Run Code Online (Sandbox Code Playgroud) 通过介绍,我正在为个人学习目的创建一个基本的Quadtree引擎.我希望这个引擎能够处理许多不同类型的形状(目前我正在使用圆形和方形),这些形状将在窗口中移动并在发生碰撞时执行某种操作.
在先前询问关于通用列表主题的问题后,我决定使用多态性接口.最好的界面是一个界面利用,Vector2因为我的四叉树中出现的每个对象都有一个x,y位置,Vector2并且很好地覆盖了它.这是我目前的代码:
public interface ISpatialNode {
Vector2 position { get; set; }
}
public class QShape {
public string colour { get; set; }
}
public class QCircle : QShape, ISpatialNode {
public int radius;
public Vector2 position {
get { return position; }
set { position = value; }
}
public QCircle(int theRadius, float theX, float theY, string theColour) {
this.radius = theRadius;
this.position = new Vector2(theX, theY);
this.colour = theColour;
}
}
public class …Run Code Online (Sandbox Code Playgroud) 我试图从pygame 运行一个四叉树示例(该页面上的第一段代码)但是在一个非常令人困惑的行上遇到语法错误:
in_nw = item.left <= cx and item.top <= cy
Run Code Online (Sandbox Code Playgroud)
语法错误指向表达式(<=)中的第二个等号.我知道分号可用于在一行上放置多个表达式,但这并不意味着它将与以下内容相同:
in_nw = item.left <
= cx and item.top <
= cy
Run Code Online (Sandbox Code Playgroud)
问题是,这与领先的等号没有任何关系.那里肯定还有别的东西.我花了几个小时试图解决这个问题并阅读复合语句.
有谁知道这是假设做什么或不同的写作方式?我认为它适用于作者以及在他下方使用相同语法发布类似代码的人,但由于某种原因它不适用于我.我真的只想重写这部分,而不必解密他的其余代码来弄清楚他想要做什么.
我需要在 Haskell 中创建一个四叉树。但我以前从未使用过这种语言。据我了解,Haskell 中没有空指针。那么我怎样才能为四叉树的指针实例化一个空版本的 Group(如果有办法的话)?
data Group = Group {
idf :: Int,
name :: String,
lat :: Int,
long :: Int,
nw :: Group,
ne :: Group,
sw :: Group,
se :: Group
} deriving Show
main :: IO()
main = do
let g1 = Group { idf = 0, name = "Ababa", lat = 32, long = 40, nw = ???}
print g1
Run Code Online (Sandbox Code Playgroud)
我知道也许存在。但不知道如何在这种情况下使用它。
我正在为行星编写一个四叉树结构,当你远离四边形并接近它时,它会减少并增加细节.但是,我遇到了一些非常严重且烦人的错误.
我有两个预处理器定义的常量,当我将值更改为除32之外的任何值(例如16或64)时,确定Quad树的大小(QUAD_WIDTH和QUAD_HEIGHT)我得到一个蓝屏死机.我使用code :: blocks作为我的IDE,另外一件事:每当我尝试在code :: blocks中调试程序时,我也会得到一个蓝色的死亡屏幕(如果常量为32则无关紧要)
为什么会这样?我该如何解决呢?
PQuad.cpp
#include "..\include\PQuad.h"
#include "..\include\Color3.h"
#include <iostream>
#include <vector>
#include <cmath>
#include <GL/glew.h>
#include <GL/glu.h>
#include <GL/gl.h>
#define QUAD_WIDTH 32
#define QUAD_HEIGHT 32
#define NUM_OF_CHILDREN 4
#define MAX_DEPTH 4
PQuad::PQuad(FaceDirection face_direction, float planet_radius) {
this->built = false;
this->spherised = false;
this->face_direction = face_direction;
this->radius = planet_radius;
this->planet_centre = glm::vec3(0, 0, 0);
}
PQuad::~PQuad() {
}
std::vector<PQuad> PQuad::get_children() {
return children;
}
bool PQuad::get_built() {
return this->built;
}
int PQuad::get_depth() {
return this->depth;
} …Run Code Online (Sandbox Code Playgroud) quadtree ×9
c++ ×3
opengl ×3
terrain ×2
boids ×1
bsod ×1
c# ×1
equals ×1
graph ×1
haskell ×1
heap-memory ×1
interface ×1
java ×1
javascript ×1
null ×1
partitioning ×1
polymorphism ×1
python ×1
syntax-error ×1