//metoda za crtanje podloge public void DrawGround(OpenGL gl) { gl.PushMatrix(); //plava boja gl.Color(0.196078, 0.196078, 0.8); //dodela teksture plocica i stapanje sa materijalom gl.MatrixMode(OpenGL.GL_TEXTURE); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Floor]); gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.LoadIdentity(); gl.PushMatrix(); gl.Scale(10f, 10f, 10f); // 10x veci broj plocica gl.Begin(OpenGL.GL_QUADS); gl.Normal(LightingUtilities.FindFaceNormal(-1000.0f, 0.0f, -1000.0f, 1000.0f, 0.0f, -1000.0f, 1000.0f, 0.0f, 1000.0f)); gl.TexCoord(0.0f, 1.0f); gl.Vertex(-1000.0f, 0.0f, -1000.0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(1000.0f, 0.0f, -1000.0f); gl.TexCoord(1.0f, 0.0f); gl.Vertex(1000.0f, 0.0f, 1000.0f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(-1000.0f, 0.0f, 1000.0f); gl.End(); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.PopMatrix(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Perspective(45f, (double)m_width / m_height, 1f, 20000f); gl.LookAt(0.0f, 10.0f, 100.0f, 0.0f, 0.0f, 0.0f, 0.0f, 350.0f, 0.0f); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.PushMatrix(); gl.Translate(0.0f, 0.0f, -m_sceneDistance); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); Setup_Lighting(gl); //kontejner gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Empty]); gl.Translate(contPos[0], contPos[1], contPos[2]); gl.Rotate(contRotate1[0], contRotate1[1], contRotate1[2]); gl.Rotate(contRotate2[0], contRotate2[1], contRotate2[2]); gl.Rotate(contRotate3[0], contRotate3[1], contRotate3[2]); m_sceneCont.Draw(); gl.PopMatrix(); //kamion gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Empty]); gl.Translate(truckPos[0], truckPos[1], truckPos[2]); gl.Rotate(0, 90, 0); m_sceneTruck.Draw(); gl.PopMatrix(); //podloga od quada gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Asphalt]); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); gl.Scale(0.02f, 0.02f, 0.02f); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Rotate(-90, 0, 0); gl.Begin(OpenGL.GL_QUADS); gl.Normal(LightingUtilities.FindFaceNormal(-550.0f, -550.0f, 0, 550.0f, -550.0f, 0, 550.0f, 550.0f, 0)); gl.TexCoord(0.0f, 0.0f); gl.Vertex(-550.0f, -550.0f, 0); gl.TexCoord(0.0f, 10.0f); gl.Vertex(550.0f, -550.0f, 0); gl.TexCoord(15.0f, 15.0f); gl.Vertex(550.0f, 550.0f, 0); gl.TexCoord(15.0f, 0.0f); gl.Vertex(-550.0f, 550.0f, 0); gl.End(); gl.PopMatrix(); //desni zid gl.PushMatrix(); gl.Color(0.7f, 0.0f, 0.0f); gl.Translate(-110, 60, 0); gl.Scale(10f, 60f, 70f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Empty]); Cube zd = new Cube(); zd.Render(gl, RenderMode.Render); gl.PopMatrix(); //zid iza gl.PushMatrix(); //gl.Color(0.7f, 0.0f, 0.0f); gl.Translate(-250, 60, -80); gl.Rotate(0, 90, 0); gl.Scale(10f, 60f, 150f); gl.Enable(OpenGL.GL_NORMALIZE); Cube zi = new Cube(); zi.Render(gl, RenderMode.Render); gl.PopMatrix(); //zid lijevo gl.PushMatrix(); //gl.Color(0.7f, 0.0f, 0.0f); gl.Translate(-390, 60, 0); gl.Scale(10f, 60f, 70f); Cube zl = new Cube(); zl.Render(gl, RenderMode.Render); gl.PopMatrix(); //cube svjetlo gl.PushMatrix(); gl.Color(1f, 1f, 1f); gl.Translate(lightPointPos[0], lightPointPos[1], lightPointPos[2]); gl.Scale(fs, fs, fs); //gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Empty]); Cube sijalica = new Cube(); sijalica.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); //bandera gl.PushMatrix(); //gl.Color(0.0f, 0.0f, 0.0f); gl.Translate(-420, 0, 80); gl.Rotate(-90, 0, 0); gl.Scale(fsx, fsx, fsx); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Metal]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); Cylinder st = new Cylinder(); st.Height = lightPointPos[1]; st.BaseRadius = 7f; st.TopRadius = 7f; st.CreateInContext(gl); st.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); TextDraw3D(gl); gl.PopMatrix(); gl.Flush(); }