基本上,我想渲染一個圍繞立方體的輪廓。要做到這一點,我想我可以使用SCNTechnique
它具有以下渲染通道:如何使用SCNTechnique模板?
- 渲染立方體正常,也寫他們佔據的像素到模板緩存。
- 如果在第一遍中不與模板相交,則渲染略大的立方體。
問題是,SCNTechnique
中模具的文檔非常稀疏,我無法確切知道如何使用它。
我已經成功繪製輪廓線,首先繪製較大的「輪廓立方體」,先關閉深度測試,然後再繪製常規立方體,而且這種方法運行得很好,但是我想使用模板代替其他併發症用這種方法。
在試圖得到它使用模板緩衝的工作,我第一遍的stencilStates
樣子(與我爲什麼認爲沿着我所需要的屬性):
clear = YES // To clear the buffer from last
enable = YES // To write to the buffer
behavior:
writeMask = 1 // Use bit 1
function = always // Always write to stencil regardless?
第二遍的stencilStates
樣子:
clear = NO // Keep the buffer from last step
enable = NO // Don't write to the buffer (only read?)
behavior:
readMask = 1 // Use bit 1
fail = keep // Not sure if these...
pass = zero // ...should be the other way round
對於模板緩衝區行爲,有相當a few other properties,但我不知道我需要什麼以及如何使用它們。我也不確定模板緩衝區是否需要列爲每個傳遞的輸入或輸出?
編輯1:這裏的正是我要找來實現,通過繪製藍色,大輪廓立方體呈現先不寫深度緩存:
如果WASN對於在這個莊園中繪製的一些副作用,我會留下這樣的實現,但是我認爲模板方法可以避免這些副作用,我認爲無論如何知道如何使用它們都是有用的!
編輯2:我一直在玩,試圖直接使用OpenGL(在C中)產生類似的效果。我並不假裝完全理解模具是如何工作的(我基本上借用了code from a tutorial),但是這些命令產生了我試圖實現的東西。
之前繪製的主要立方體,寫模板緩存:
glStencilFunc(GL_EQUAL, 0, 0xFF); // Pass test if stencil value is 0
glStencilMask(0x00); // Don't write anything to stencil buffer
:
glStencilFunc(GL_ALWAYS, 1, 0xFF); // Set any stencil to 1
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glStencilMask(0xFF); // Write to stencil buffer
glClear(GL_STENCIL_BUFFER_BIT); // Clear stencil buffer (0 by default)
繪製主立方體後,並繪製較大的外形立方體,檢測到當前的模板緩存之前因此,問題是如何使用SCNTechnique
來實現上述目標。
對不起,要問一個視覺問題,但是您可以顯示您正在尋找的輪廓效果類型的圖像/鏡頭嗎?使用關於多維數據集和輪廓和卡通效果的關鍵字搜索谷歌圖像,直到找到您喜歡/想要/渴望的東西。 – Confused
@Confused當然,我編輯了我想要實現的東西(但是用模具)。謝謝參觀! – Robert
我剛剛在最寬鬆的OpenGL討論它們的讀法中查看了模板緩衝區。我不確定他們是否正確。他們可以使用,因爲他們確實有掩蔽,但反轉掩蔽也是如此,白色骰子可以做到圍繞它的藍色框。我的直覺(那是一個天真的直覺)是一個像素着色器,它以某種方式知道骰子的邊緣可以在骰子周圍畫出更好,更平滑的這種類型的輪廓。但我不知道該怎麼做,或者甚至可以在SceneKit中使用。 – Confused