2017-05-04 176 views
1

因此,我正在做一個JOGL項目,在該項目中,我正在繪製一艘可以升起/下沉並在地圖中移動的潛艇 - 注意這張地圖只是一個巨大的quad_strip。無論如何,我有下面的代碼進行混合。試圖將潛水艇部分淹沒在水中

gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); 
    gl.glEnable(GL2.GL_BLEND); 
    gl.glDisable(GL2.GL_DEPTH_TEST); 

    gl.glColor4f(0.949f, 0.816f, 0.588f, 1f); 
    gridFloor.display(drawable); 

    submarine.setHeight(subHeight); 
    submarine.display(drawable); 

    gl.glColor4f(0.298f, 0.7333f, 0.909f, 0.04f); 
    gridSea.display(drawable); 

    gl.glFlush(); 

注意:gridfloor,submarine和gridsquare對象都是GLEventListners。

所以這一切都很好,很棒。當它打印時,我已經定位了潛艇在y = 2和y = 1.5時的海平面。所以這時的潛艇應該在水線之上。但這是我所取而代之的。 enter image description here

正如你可能會說,我對JOGL很陌生,任何幫助將大量讚賞。

編輯:這就是我想實現

enter image description here

回答

2

當禁用深度測試,任何你繪製到屏幕繪製在什麼是已經存在的頂部。這就是爲什麼水正在被吸引到潛艇上。

gl.glDisable(GL2.GL_DEPTH_TEST); 

解決方案:不要禁用深度測試。

+0

老師引用 - 「通過啓用混合和禁用深度測試,使海面 表面半透明。」 -_-謝謝你,很喜歡 –

+0

@RyanTurnbull:難道你的老師不會理解混合,在某個時刻和它一起苦苦掙扎,並且認爲加入了深度測試功能的加成並不會顯得完全錯誤?無論如何,正確的方法來渲染透明的東西是通過*深度測試__enabled __ *和*排序*混合幾何*遠到近*。 – datenwolf