我試圖模擬SceneKit中的深度貼圖,並且我對3D編程非常陌生。我已經在XY中創建了一個三維網格,其中包含Z中的海洋深度。計劃是使用片段着色器在顏色之間縮放此Z值以創建一個漂亮的地圖無法訪問片段着色器中的_geometry變量
在着色器的文檔中,來自以前着色器的值在稍後的着色器中可用。特別是,第一個(幾何)着色器具有名爲_geometry的結構,其中包含模型空間中的頂點。但是,由於某些原因,在我的片段着色器中沒有定義,當我嘗試使用它時出現錯誤。
失敗編譯的錯誤輸出顯示其他值可用,如_surface和_light,但不包含_geometry。
我試圖從_surface.position vec3轉換回模型空間,但恐怕我的轉換已經超出了我的深度。根據這個值是考慮空間的文件,所以我嘗試:
vec4 model4 = vec4(_surface.position, 1.0);
vec4 model_position = u_inverseModelViewTransform * model4;
if (model_position.z .....
但這不是給我的Z. u_inverseModelViewProjectionTransform的正確的價值觀似乎不存在,要麼。
我也試着寫一個幾何着色器是什麼也沒做只是爲了確保_geometry存在於該着色並希望有幾何着色器將包括在我的片段着色器_geometry但沒有喜悅
我的問題是:我如何到達片段着色器中的_geometry變量,或者缺少該變量,如何將_surface.position轉換回模型空間?
感謝,
第一個建議工作恢復到正確的Z值。我試了第二次,但得到了關於scn_node沒有被定義的錯誤。也許它沒有在SceneKit着色器中定義?我不知道GPU調試用戶界面 - 我假設它只有在設備上運行時纔可用。謝謝。 – danielweberdlc
呃,你是對的,只是試圖在模擬器中運行第二個解決方案......它不起作用。這是一個金屬vs OpenGL的問題; SceneKit爲每個3D圖形框架提供了不同的着色器。 Metal SceneKit着色器在片段着色器中具有'scn_node'結構,而OpenGL(由模擬器使用)不具有。 – lock