[英]Drawing 2D Points on a 3D Context
private void init_video () {
uint32 video_flags = SurfaceFlag.SWSURFACE | SurfaceFlag.OPENGL;
screen = Screen.set_video_mode (SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, video_flags);
if (screen == null) stderr.printf ("Could not set video mode.\n");
glClearColor (0.0f, 0.0f, 0.0f, 1.0f);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFrustum (-2.0f, 2.0f, -2.0f, 2.0f, 1.0f, 300.0f);
glMatrixMode (GL_MODELVIEW);
glEnable (GL_DEPTH_TEST);
glEnable (GL_TEXTURE_2D);
SDL.WindowManager.set_caption ("Title", "Title");
}
這就是我為正在開發的游戲設置相機的功能。 我有這個功能來畫一個立方體:
public void draw () {
glLoadIdentity ();
glTranslatef (x, y, z);
glScalef (size, size, size);
glRotatef (x_angle, 1.0f, 0.0f, 0.0f);
glRotatef (y_angle, 0.0f, 1.0f, 0.0f);
glRotatef (z_angle, 0.0f, 0.0f, 1.0f);
glBegin (GL_QUADS);
/* Front face */
glColor3f (1.0f, 0.0f, 0.0f);
glVertex3f (0.5f, 0.5f, 0.5f);
glVertex3f (-0.5f, 0.5f, 0.5f);
glVertex3f (-0.5f, -0.5f, 0.5f);
glVertex3f (0.5f, -0.5f, 0.5f);
/* Left face */
glColor3f (0.0f, 1.0f, 0.0f);
glVertex3f (-0.5f, 0.5f, 0.5f);
glVertex3f (-0.5f, -0.5f, 0.5f);
glVertex3f (-0.5f, -0.5f, -0.5f);
glVertex3f (-0.5f, 0.5f, -0.5f);
/* Back face */
glColor3f (0.0f, 0.0f, 1.0f);
glVertex3f (0.5f, 0.5f, -0.5f);
glVertex3f (-0.5f, 0.5f, -0.5f);
glVertex3f (-0.5f, -0.5f, -0.5f);
glVertex3f (0.5f, -0.5f, -0.5f);
/* Right face */
glColor3f (1.0f, 1.0f, 0.0f);
glVertex3f (0.5f, 0.5f, 0.5f);
glVertex3f (0.5f, -0.5f, 0.5f);
glVertex3f (0.5f, -0.5f, -0.5f);
glVertex3f (0.5f, 0.5f, -0.5f);
/* Top face */
glColor3f (0.0f, 1.0f, 1.0f);
glVertex3f (0.5f, 0.5f, 0.5f);
glVertex3f (-0.5f, 0.5f, 0.5f);
glVertex3f (-0.5f, 0.5f, -0.5f);
glVertex3f (0.5f, 0.5f, -0.5f);
/* Bottom face */
glColor3f (1.0f, 0.0f, 1.0f);
glVertex3f (0.5f, -0.5f, 0.5f);
glVertex3f (-0.5f, -0.5f, 0.5f);
glVertex3f (-0.5f, -0.5f, -0.5f);
glVertex3f (0.5f, -0.5f, -0.5f);
glEnd ();
}
如何像繪制2D上下文一樣繪制點? 有任何想法嗎?
在OpenGL中沒有2D上下文。 一切都是3d。 但是您可以使用glOrtho的平行投影來模擬2d
// Setup Orthogonal projection to window coordiantes
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WindowWidth-1, 0, WindowHeight-1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// draw quad in screen coodinates
glBegin(GL_QUADS);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex2i(10, 10);
glVertex2i(10, 80);
glVertex2i(80, 80);
glVertex2i(80, 10);
glEnd ();
glVertex2類似於glVertex3,第三個坐標設置為0。
使用OpenGL 4,上述所有命令均被刪除。 但是glOrtho文檔向您顯示了在Windows坐標系中設置渲染所需的矩陣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.