2013-06-22 74 views
0

我試圖在我的世界中繪製一些四邊形,但這是我有的問題:http://imgur.com/DgnAqv1但它應該在每邊繪製三角形,所以總共應該有4個三角形,我不知道爲什麼這不是加工。OpenGL在我的世界中繪製四邊形奇怪地顯示

GL11.glPushMatrix(); 
GL11.glDisable(GL11.GL_LIGHTING); 
GL11.glDisable(GL11.GL_DEPTH_TEST); 
GL11.glDepthMask(false); 
GL11.glEnable(GL11.GL_BLEND); 
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 
GL11.glColor4f(0F, 0.5F, 0.8F, 1F); 
GL11.glBegin(GL11.GL_QUADS); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX + 1, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ + 1); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glEnd(); 
GL11.glBegin(GL11.GL_QUADS); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX - 1, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ - 1); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glEnd(); 
GL11.glBegin(GL11.GL_QUADS); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX - 1, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ + 1); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glEnd(); 
GL11.glBegin(GL11.GL_QUADS); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX + 1, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ - 1); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glEnd(); 
GL11.glEnable(GL11.GL_DEPTH_TEST); 
GL11.glDepthMask(true); 
GL11.glPopMatrix(); 
+0

請直接在問題中發佈代碼(每行由4個空格前綴)。 –

+0

我試過了,它沒有工作,看起來很可怕。 – user2487095

+0

我編輯了你的帖子。您可以使用'glTranslate(-RenderManager.renderPosX,-RenderManager.renderPosY,-RenderManager.renderPosZ)'而不是在每個頂點上手動應用翻譯來使代碼更清晰。 –

回答

2

你或許應該禁用臉撲殺:GL11.glDisable(GL11.GL_CULL_FACE);你的三角形可能有錯誤的方向,因此您只能看到背面。另一個解決方案是重新定向三角形(例如通過交換第一個和第二個頂點),但是由於您使用透明度,因此您可能需要渲染正面和背面。

附註:我不知道你爲什麼要使用GL_QUADS如果你想渲染三角形。因此,這裏是你發佈的第一款四:

GL11.glBegin(GL11.GL_QUADS); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX + 1, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ + 1); 
GL11.glVertex3d(ep.posX - RenderManager.renderPosX, ep.posY + ep.height + 0.5D - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glEnd(); 

使用glTranslate和GL_TRIANGLES等效代碼如下:

GL11.glTranslated(ep.posX - RenderManager.renderPosX, ep.posY - RenderManager.renderPosY, ep.posZ - RenderManager.renderPosZ); 
GL11.glBegin(GL11.GL_TRIANGLES); 
GL11.glVertex3d(0, ep.height + 0.5D, 0); 
GL11.glVertex3d(1, 0, 0); 
GL11.glVertex3d(0, 0, 1); 
GL11.glEnd(); 

還要注意的是,你不需要調用glBegin/glEnd每個三角形,你可以簡單地調用glVertex3d 3 * n次渲染n個三角形。

+0

謝謝,你幫我修復了我的代碼,讓它看起來更整潔!有什麼方法可以回覆你嗎? – user2487095

+0

@ user2487095只需接受答案,也許upvoting它很好,謝謝。很高興我能幫上忙。 :) –