2013-04-09 195 views
2

我寫了這個程序,但我希望廣場在更遠處移動時改變大小。如何使用透視投影矩陣?

package com.ncom.src; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.lwjgl.opengl.GL11; 
import static org.lwjgl.util.glu.GLU.*; 

import static org.lwjgl.opengl.GL11.*; 

public class Main { 
    public void start() { 
     float y = 0; 
     try { 
      Display.setDisplayMode(new DisplayMode(800,600)); 
      Display.create(); 
     } catch (LWJGLException e) { 
      e.printStackTrace(); 
      System.exit(0); 
     } 
     while (!Display.isCloseRequested()) { 
      glMatrixMode(GL_PROJECTION); 
      glLoadIdentity(); 
      glOrtho(0, 800, 600, 0, 500000000, -500000000); 
      glMatrixMode(GL_MODELVIEW); 
      glClear(GL_COLOR_BUFFER_BIT); 
      glBegin(GL_QUADS); 
       glVertex3f(350, 250, y); 
       glVertex3f(350, 270, y); 
       glVertex3f(370, 270, y); 
       glVertex3f(370, 250, y); 
      glEnd(); 
      Display.update(); 
      y -= 20; 
     } 

     Display.destroy(); 
     System.exit(0); 
    } 
    public static void main(String[] argv) { 
     Main quadExample = new Main(); 
     quadExample.start(); 
    } 
} 
+0

不,我不在乎數學,它只是到處看,我沒有實際的代碼。如何對廣場進行深度繪製或「不在屏幕上」進行繪製? – 2013-04-09 10:12:03

+1

@Dr_N:好的,通過了解數學。編程是將數學符號轉化爲編程語言源代碼的過程。從「代碼示例」中學習不會教你有趣的部分。特別是對於圖形來說,單個簡短的數學符號可能會擴展成一個充滿代碼的屏幕。 – datenwolf 2013-04-09 10:15:58

+0

@datenwolf:你可以給我任何地方開始學習嗎?我真的不知道該去哪裏看看 – 2013-04-09 10:20:45

回答

4

代碼glOrtho(0, 800, 600, 0, 500000000, -500000000);爲正視圖,嘗試使用GLU.gluPerspective()。例如:

GL11.glMatrixMode(GL_PROJECTION); 
GL11.glLoadIdentity(); 
GLU.gluPerspective(field_of_vision, Display.getWidth()/Display.getHeight(), zNear, zFar); 
GL11.glMatrixMode(GL_MODELVIEW); 
GL11.glLoadIdentity(); 
3

如果您想查看透視圖,那麼我首先使用透視投影。

 glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     near = 1; // near should be chosen as far into the scene as possible 
     far = 100; 
     fov = 1; // 1 gives you a 90° field of view. It's tan(fov_angle)/2. 
     glFrustum(-aspect*near*fov, aspect*near*fov, -fov, fov, near, far); 
+1

對於那些想知道這件事的人來說,[這是NeHe Productions的一個鏈接,它提供了gluPerspective()後面的數學邏輯(http://nehe.gamedev.net/article/replacement_for_gluperspective/21002/)。對於喜歡從頭開始學習的人來說非常有用。 – 2014-01-17 11:34:55