我最近一直在研究一个点云播放器,理想情况下应该能够从激光雷达捕获中可视化地形数据点并以大约30fps的顺序显示它们.然而,我似乎已经因PCI-e IO而陷入困境.
我需要为每一帧做的是加载存储在内存中的大点云,然后根据高度计算颜色图(我使用的东西类似于matlab的喷射图),然后将数据传输到GPU.这适用于云捕获,点数<100万.然而,在大约200万点时,这开始减慢到每秒30帧以下.我意识到这是很多数据(每点200万帧*[每点3个浮点数+每个颜色点3个浮点数]*每个浮点数4个字节*每秒30帧=每秒约1.34千兆字节)
我的渲染代码现在看起来像这样:
glPointSize(ptSize);
glEnableClientState(GL_VERTEX_ARRAY);
if(colorflag) {
glEnableClientState(GL_COLOR_ARRAY);
} else {
glDisableClientState(GL_COLOR_ARRAY);
glColor3f(1,1,1);
}
glBindBuffer(GL_ARRAY_BUFFER, vbobj[VERT_OBJ]);
glBufferData(GL_ARRAY_BUFFER, cloudSize, vertData, GL_STREAM_DRAW);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vbobj[COLOR_OBJ]);
glBufferData(GL_ARRAY_BUFFER, cloudSize, colorData, GL_STREAM_DRAW);
glColorPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_POINTS, 0, numPoints);
glDisableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
Run Code Online (Sandbox Code Playgroud)
每帧都会更改vertData和colorData的指针.
我希望能够做到的是,即使以后使用每帧可能达到700万点的大点云,也能够以每秒至少30帧的速度播放.这甚至可能吗?或者也许更容易网格化并构建高度图并以某种方式显示它?我对3D编程还很陌生,所以任何建议都会受到赞赏.
我无法绕过更高级的Rails查询方法.在这种情况下,我有三个表:用户,友谊和事件.
我在每个模型中都设置如下
User->:has_many =>:friendships,:has_many =>:items
友谊 - >:belongs_to =>:用户
Event-> belongs_to =>:user
友谊只是两列:"user_id"和"friend_id",所以每个新友谊都会创建两个新行.
这是我用来查找"属于current_user的朋友的前四个事件的查询,其中start_date比现在晚."
find_by_sql(["SELECT DISTINCT e.id
FROM events e
WHERE e.start_date > ?
AND e.user_id IN(
SELECT f.user_id
FROM friendships f
WHERE f.friend_id = ?)
LIMIT 0,4", Time.zone.now,current_user.id])
Run Code Online (Sandbox Code Playgroud)
在Rails中做这样的事情的真实和优雅方式是什么?我觉得这也是非常低效的......
有没有办法使用Android API读取当前运行的应用程序的META-INF\MANIFEST.MF文件?
我想为classes.dex文件读取SHA1并将其用作我的一个资产的加密密钥.
我不能使用.apk文件的签名,因为每次我创建一个新的apk我需要重新加密我的资产并放入apk文件,这需要重新签署.apk,它成为鸡和蛋的问题.
我写了一个自定义记录器,其中唯一的添加是以下方法:
public static synchronized Logger getLogger(String name) {
try {
boolean append = true;
FileHandler handler = new FileHandler("tmp.log", append);
Logger log = Logger.getLogger(name);
log.addHandler(handler);
return log;
} catch (java.io.IOException ex) {
//Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex);
} catch (SecurityException ex) {
//Logger.getLogger(LibraLogger.class.getName()).log(Level.SEVERE, null, ex);
}
return Logger.getLogger(name);
}
Run Code Online (Sandbox Code Playgroud)
它生成一系列日志文件tmp.log,tmp.log.1,tmp.log.2等.
我该如何防止这种情况发生?
使用内置或可从内核访问的python解释器来构建Linux内核是否可能并且并不难以置信,它可以运行python文件作为init进程?
一个简单的网页搜索并没有真正发现任何例子......所以我想知道是否有人能指出我在Glassfish上配置Spring的任何信息?我发现的一切都已经过时了.
谢谢!
我想使用Clojure和Compojure在GAE上开发应用程序,使用Eclipse或Idea,emacs不是一个坏主意:P
那么这是最好的方法呢?我不认为我想使用leiningen,因为我相信如果你通过学习曲线,maven可以非常强大 - 我读了这篇博客http://compojureongae.posterous.com/tag/googleappengine,其中'到现在为止是一个最好的信息来源.
如果你必须这样做,你的方法是什么?或者你会推荐我什么?
这个插件 - > http://code.google.com/p/maven-gae-plugin/好吗?因为如果我使用那个插件我可以在pom.xml中包含clojure.jar,基本上我已经准备好了,对吧?IntelliJ IDEA有类似之处吗?
还有其他建议吗?这是你的方法吗?
我试图找出如何从linux shell发送消息到http服务器.我想要的是shell发布消息,然后我可以编写一个小的php程序,根据内容和发件人将消息重新路由到预期的收件人.我似乎无法在Linux中找到执行此操作的命令.我真的很想坚持一个内置的实用程序.
如果您能想到更好的框架工作,请告诉我.
谢谢
我正在开发一个Android应用程序,需要知道如何更改进度对话框的位置.我需要将它定位在屏幕的底部而不是像默认情况下那样位于中心.