2012-06-01 53 views
1

我畫在OpenGL(JOGL)的一些要點如下:OpenGL的JOGL質感外形

BufferedImage image = loadMyTextureImage(); 
Texture tex = TextureIO.newTexture(image, false); 
tex.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); 
tex.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); 
tex.bind(); 

gl.glColor4f(r,g,b,a);   
gl.glBegin(GL_POINTS); 
for (int i = 0; i < numPoints; i++) { 
    // compute x,y,z 
    gl.glVertex3f(x,y,z); 
} 
gl.glEnd(); 

image是白色圖像,這樣我就可以重複使用同一紋理,只是使用gl.glColor4f顏色,但我想以不同的顏色勾勒出輪廓。有沒有辦法做到這一點?

+0

如果它只是純白色,你根本不需要紋理:-)你還想要什麼樣的輪廓?任意顏色的薄彩色線條? 「發光」在邊緣?漸變填充邊緣?這取決於你試圖達到什麼樣的藝術效果...... – mikera

+0

我正在使用紋理來改變點的形狀。這似乎要快得多,因爲我仍然可以使用GL_POINTS,而不是創建具有該形狀的多邊形。對於大綱,我只是試圖弄清任意顏色的細線。 –

回答

2

如果您使用紋理來確定點的形狀,那麼執行輪廓的顯而易見的方法是添加第二個紋理以在頂部繪製點的輪廓。

輪廓紋理也是白色的,所以你可以用同樣的方法將它染成任何你喜歡的顏色。

根據您使用的alpha混合模式,這也可以用來給出「發光」邊緣效果。

+0

我想這樣做,但我認爲這將需要我首先繪製所有輪廓,然後是所有填充(反之亦然),因爲我不認爲我可以在GL_POINTS中切換紋理。這將導致所有填充位於所有輪廓之上。 –

+1

您可以一次綁定兩個紋理(儘管您可能需要GLSL才能獲得某些混合效果)。無論如何,這可能是性能方面最好的方法。 – mikera

+0

我會給你一個鏡頭,謝謝。 –