1. 程式人生 > >CGA:自動判斷模型間關係的3D建模方法

CGA:自動判斷模型間關係的3D建模方法

背景

最近遇到一個有趣的問題,如何在CityEgnine中判斷有接觸或相交關係的模型,從而自動進行建模?

這個問題有點抽象,我們來看個例項,瞭解下問題的背景:

以往絕大多數情況下,我們拿到的2D建築物底面(FootPrint)都是一個建築對應一個面,也就是這樣的:

實際生活中的的建築物可能是更復雜的,例如商場、大型會議中心、複雜居民樓等參差不齊的多棟聯合建築,我們可以採集多個底面來表示建築物,例如這樣:

使用多個底面表示一棟複雜建築物的做法可以很大程度上簡化建模的工作,因此無可厚非。 但是問題來了,因為是彼此獨立的Footprint,建模時若不加判斷,就會出現如下圖所示的情況,好像“空中地下室”。這樣的房子既不美觀也不實際。

解決方法

CityEngine的真正魅力在於“動態”建模,這是CE的創作者一直想要傳播的理念。 CityEgnine提供很多內建函式解決這些問題,其中有一組為:Occlusion Functions,包含:insideoverlapstouches 三個函式。 我們可以利用 touches() 來實現判斷。

先寫段簡單的來了解下函式用法:

Init --> 
     extrude(40) Mass
Mass -->
     comp(f){top:NIL| side:Side} 
Side --> 
     case touches(): color(1
,0,0) ShareSide else: Walls

針對前面“空中地下室”的問題,可以在樓層切割到窗戶和牆體的時候做個判斷,樓層不touch其他樓層時,再進行分割。

可以實現這個樣子:

全部 CGA 程式碼共享給大家:

/**
 * File:    TestTouches.cga
 * Created: 1 Apr 2016 13:00:24 GMT
 * Author:  kikita
 */

version "2015.2"

# Define Attributes
attr AVG_HEIGHT = 0
attr WindowsWidth = 8
attr WallWidth = 2.5
# Building Schmetic Init --> extrude(AVG_HEIGHT) Mass Mass --> comp(f){top:Top|side:Walls} Walls --> split(y) { 15 : GroundFloor | {~10 : UpperFloors } * } # Ground Floor GroundFloor --> setupProjection(0, scope.xy, '1, '1) projectUV(0) texture("GroundFloor.jpg") # All Upper Floors UpperFloors --> # Use touches() function case touches(): setupProjection(0, scope.xy, 10, 10) projectUV(0) texture("Wall/wall_grey.jpg") else: split(x){ ~WallWidth : AllWalls | { ~WindowsWidth : WindowTiles | ~WallWidth : AllWalls } * } WindowTiles --> split(y){ ~WallWidth/2: AllWalls | ~WindowsWidth : Windows| ~WallWidth/2 :AllWalls } # Wall Texture AllWalls --> setupProjection(0, scope.xy, 10, 10) projectUV(0) texture("Wall/wall_grey.jpg") # Windows Windows --> color("DAFAF3") i("Windows/sash_window.obj") s('1,'1,'2) # Roofs Top --> offset(-0.5) comp(f){ border : RoofEdge | inside : RoofFlat } RoofFlat --> setupProjection(0, scope.xy, '1, '1) projectUV(0) texture("flatroof6.bw.jpg") RoofEdge --> extrude(1)

明天就放假了

節日愉快

我說的是愚人節

Also available Here .

相關推薦

CGA自動判斷模型關係3D建模方法

背景 最近遇到一個有趣的問題,如何在CityEgnine中判斷有接觸或相交關係的模型,從而自動進行建模? 這個問題有點抽象,我們來看個例項,瞭解下問題的背景: 以往絕大多數情況下,我們拿到的2D建築物底面(FootPrint)都是一個建築對應一個面,也就是

Odoo10教程---模組化二模型關係,繼承,計算欄位等

模型之間的關係來自模型的記錄可能與來自另一模型的記錄相關。例如,一個銷售訂單記錄和一個包含客戶資料的客戶記錄相關;同時也和銷售訂單線記錄相關。練習建立會話模型對於模組Open Academy,我們考慮一個會話模型:會話是在給定時間為給定聽眾授課的課程。為會話建立模型。一個會話

深入理解 Laravel Eloquent(二)——模型關係(關聯)

Eloquent是什麼 Eloquent 是一個 ORM,全稱為 Object Relational Mapping,翻譯為 “物件關係對映”(如果只把它當成 Database Abstraction Layer 陣列庫抽象層那就太小看它了)。所謂 “物件”,就是本文所說的 “模型(Model)

機器學習實戰系列sklearn 中模型儲存的兩種方法

一、 sklearn中提供了高效的模型持久化模組joblib,將模型儲存至硬碟。 from sklearn.externals import joblib #lr是一個LogisticRegression模型 joblib.dump(lr, 'lr.model') lr =

星型模型、雪花模型、星座模型及數倉建模方法

整體流程概覽 (1)資料倉庫(Data WareHouse,簡稱DW): 資料倉庫是一種資訊系統的資料儲存理論,主要功能乃是將組織透過資訊系統之聯機交易處理(OLAP)經年累月所累積的大量資料,透過資料倉庫理論所特有的資料儲存架構,作一有系統的分析整理,以利各

3.spring自動裝配/Bean之間的關係/作用域/外部檔案/spel/

1.自動裝配/手動裝配 xml配置檔案裡的bean自動裝配 Spring IOC 容器裡可以自動的裝配Bean,需要做的僅僅是在<bean>的autowire屬性裡面指定自動裝配模式 ->byType(根據型別自動進行裝配):若IOC容器裡需要有多個與目標Bean型別一樣的Bean,在這種

Seaborn中文教程(一)視覺化變數關係

眾所周知,Seaborn“可能”是Python下最友好、易用的視覺化工具了,視覺化效果也非常好。但是截止目前,並沒有一份中文教程供廣大國內Python使用者查閱學習。怎麼能因為語言的問題,讓大家錯過這麼好用的一個視覺化工具呢? 思考再三,我決定花一些時間將官方的英文文件整理出來,為大

makefile專題自動生成依賴關係(續)

.PHONY : all clean rebuild MKDIR := mkdir RM := rm -rf CC := gcc DIR_DEPS := deps DIR_EXES := exes

platform匯流排和普通匯流排,驅動模型的一些關係和理解

【摘要】本文以Linux 2.6.25 核心為例,分析了基於platform匯流排的驅動模型。首先介紹了Platform匯流排的基本概念,接著介紹了platform device和platform driver的定義和載入過程,分析了其與基類device 和driver的派生

幾種類關係繼承、實現、依賴、關聯、聚合、組合及UML實現圖

轉自:http://www.cnblogs.com/yyyyy5101/archive/2011/03/11/1981078.html 繼承 指的是一個類(稱為子類、子介面)繼承另外的一個類(稱為父類、父介面)的功能,並可以增加它自己的新功能的能力,繼承是類與類或者介面與介

Tensorflow基礎使用驗證資料集判斷模型效果

在上一篇部落格中,給出了使用神經網路解決MNIST問題的完整程式。在這個程式的開始設定了初始學習率、學習率衰減率、隱藏層節點數量、迭代輪數等7種不同的引數。 在大部分情況下,配置神經網路的這些引數都是需要通過實驗來調整的。使用測試資料來選取引數可能會導致神經網

Odoo(OpenERP)開發實踐數據模型學習

content 外部 -m 數據庫 頁面 ext 哪些 dsm crud 作者:蘇州-微塵 Odoo中,在Python類裏定義的模型及字段信息,可在系統中直接查看。為用戶開啟技術特性權限後,就可以通過菜單 [設置->技術->數據結構->模型] 進入列表

【Java並發編程】之十三生產者—消費者模型(含代碼)

tool boolean 通知 阻塞 上一個 [] ble 否則 線程 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17249321 生產者消費者問題是線程模型中的經典問題:生產者和消費者在同一時間段

綜合示例自動生成一組新聞

lap func tel style display ima one closed alt 點擊按鈕,自動生成5條新聞信息 用一組數組把5條新聞保存起來, 再運用 if 判讀和 for 循環來達到自動生成的效果 1 <!DOCTYPE HTML> 2

TF-IDF與余弦相似性的應用(三)自動摘要

下一步 dip target 似的 abs tps .net ebo ace 轉:http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html 有時候,很簡單的數學方法,就可以完成很復雜的任務。 這個

Spark機器學習(8)LDA主題模型算法

算法 ets 思想 dir 骰子 cati em算法 第一個 不同 1. LDA基礎知識 LDA(Latent Dirichlet Allocation)是一種主題模型。LDA一個三層貝葉斯概率模型,包含詞、主題和文檔三層結構。 LDA是一個生成模型,可以用來生成一篇文

Java虛擬機內存模型詳解

調用 數據類型 可擴展 空間 共享 sof 虛擬機 進程 部分 版權聲明:本文為博主原創文章,轉載請註明出處,歡迎交流學習! 我們都知道,當虛擬機執行Java代碼的時候,首先要把字節碼文件加載到內存,那麽這些類的信息都存放在內存中的哪個區域呢?當我們創建一個

分發系統自動同步文件腳本

exp local nbsp blog rsync oca expect set txt [[email protected]/* */ ~]# cat 4.expect#!/usr/bin/expect set passwd "123456" spaw

EasyPR源碼剖析(6)車牌判斷之LBP特征

extend 順序 位置 feature tput ray bpf range str 一、LBP特征 LBP指局部二值模式,英文全稱:Local Binary Pattern,是一種用來描述圖像局部特征的算子,LBP特征具有灰度不變性和旋轉不變性等顯著優點。 原始的LBP

C語言中存儲類別又分為四類自動(auto)、靜態(static)、寄存器的(register)和外部的(extern)。

字符變量 修飾 例如 register ext 進行 適合 sta -- 除法運算中註意: 如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。 取余運算中註意: 該運算只適