首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在quil函数模式下处理慢速绘制函数

如何在quil函数模式下处理慢速绘制函数
EN

Stack Overflow用户
提问于 2015-02-20 00:00:35
回答 1查看 286关注 0票数 2

我正在尝试构建一个this bicycle station map animation的制图quil可视化衍生工具。我尝试在quil中使用新的默认功能模式,因为它看起来处理了大量处理鼠标事件和更新显示的工作。然而,我遇到了一个问题,即使在非常低的帧率下,绘制的一部分(背景图)也需要花费太长的时间才能完全渲染。

按照this visualization的建议,我将通过下载UnfoldingMaps依赖项并将其安装到leiningen localrepo中来安装它,如下所示:

代码语言:javascript
复制
$ lein localrepo install /path/to/library/Unfolding.jar unfolding 0.9.6
$ lein localrepo install /path/to/library/json4processing.jar json4proc 0.9.6

我的project.clj文件如下所示:

代码语言:javascript
复制
(defproject transit-map "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :plugins [[lein-localrepo "0.5.3"]]
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/data.json "0.2.5"]
                 [quil "2.2.5"]
                 [unfolding "0.9.6"]    ; Installed in local repo
                 [json4proc "0.9.6"]    ; Ditto; shipped with unfolding
                 [log4j "1.2.15"]])

而且,我的简单core.clj如下所示:

代码语言:javascript
复制
(ns transit-map.core
  (:import (de.fhpotsdam.unfolding UnfoldingMap)
           (de.fhpotsdam.unfolding.geo Location)
           (de.fhpotsdam.unfolding.providers StamenMapProvider)
           (de.fhpotsdam.unfolding.marker SimplePointMarker))
  (:require [quil.core :as q]
            [quil.middleware :as m]))

(defn setup []
  ;; Only has close to enough time to plot if the framerate is very
  ;; low, and even then doesn't quite get the job done.
  (q/frame-rate 1)
  ;; setup function returns initial state.
  ;; State is one big happy hashmap
  {:bg-map (doto (UnfoldingMap.
                  (quil.applet/current-applet)
                  (de.fhpotsdam.unfolding.providers.StamenMapProvider$TonerBackground.))
             (.setZoomRange 10 12)
             (.zoomToLevel 11)
             (.panTo (Location. 47.625 -122.332071))
             (.draw))})

(defn update-state [state])

(defn draw-state [state]
  (.draw (state :bg-map)))

(q/defsketch transit-map
  :title "Transit map"
  :size [250 500]
  ;; setup function called only once, during sketch initialization.
  :setup setup
  ;; update-state is called on each iteration before draw-state.
  :update update-state
  :draw draw-state
  ;; This sketch uses functional-mode middleware.
  :middleware [m/fun-mode])

值得注意的是,只需很少的努力,它就能工作。说大也大吧。即使帧速率调回到1fps,背景图像也不能很好地渲染:

对于如何给这个特定的元素提供完整渲染所需的时间,有什么建议吗?最终,我希望在此基础上做一些超过1fps的动画。我开始怀疑,我最好的办法就是抓取一张静态图像,并将其放在背景中。但是,这里还有什么可以推荐的吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-25 23:52:02

好吧,看起来在状态hashmap中存储map上下文是个问题。在setup中将背景贴图定义为:

代码语言:javascript
复制
(def bgmap
    (doto (UnfoldingMap.
           (quil.applet/current-applet)
           (de.fhpotsdam.unfolding.providers.StamenMapProvider$TonerBackground.))
      (.setZoomRange 10 13)
      (.zoomToLevel 12)
      (.draw)))

如果我随后在draw-state中调用draw方法,如下所示:

代码语言:javascript
复制
(.draw bgmap)

我可以将帧率设置为合理的级别,相对较慢的背景地图绘制只需几帧即可完全填充--这正是我想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28610950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档