/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.ColorMaterial(OpenGL.GL_FRONT, OpenGL.GL_AMBIENT_AND_DIFFUSE); setUpLighting(gl); gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.PushMatrix(); if (animacijaUToku) { timer1.Start(); } gl.LookAt(500, 0, 0, 0, 0, -5000, 0, 1, 0); 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); m_scene.Draw(); m_scene_bullet.Draw(); reflektor(gl); loadGun(gl); loadBullet(gl); loadFloor(gl); loadTargetStand(gl); loadTarget(gl); loadText(gl); gl.PopMatrix(); // Oznaci kraj iscrtavanja gl.Flush(); }
private void drawBall(OpenGL gl) { gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_DECAL); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Ball]); gl.PushMatrix(); gl.Translate(-6.0f + x_red_move, -5.5f + y_red_move, -45.0f + z_red_move); gl.Scale(0.5f, 0.5f, 0.5f); //gl.Rotate(m_xRotation, 0.0f, 0.0f); //gl.Rotate(0.0f, m_yRotation, 0.0f); m_scene2.Draw(); gl.PopMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, 0); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); }
private void DrawModel(OpenGL gl) { gl.PushMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Translate(x, y, z); gl.Scale(2.5f, 2.5f, 2.5f); if (m_selectedVerticalScaling_value == 2) { gl.Translate(0f, 35, 0f); gl.Scale(1f, m_selectedVerticalScaling_value, 1f); } if (m_selectedVerticalScaling_value == 3) { gl.Translate(0f, 70, 0f); gl.Scale(1f, m_selectedVerticalScaling_value, 1f); } gl.Rotate(0.0f, 135f, 0); m_scene.Draw(); gl.PopMatrix(); gl.Flush(); }
private void DrawZamak(OpenGL gl) { gl.PushMatrix(); gl.Translate(-50.0f, -600.0f, -600); m_scene.Draw(); gl.PopMatrix(); }
private void DrawMeshModel(OpenGL gl) { gl.Translate(30f, 185.0f, 70.0f); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_DIRECTION, new float[] { 0.0f, -1.0f, 0.0f }); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, new float[] { 5.0f, 50.0f, 0f, 1.0f }); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, m_ambientColor); m_scene.Draw(); }
private void DrawHuman(OpenGL gl) { gl.PushMatrix(); gl.Translate(human_coordinateX, human_coordinateY - 1.5, human_coordinateZ); gl.Scale(1f * 0.03, MainWindow.humanHeight * 0.03, 1f * 0.03); gl.Rotate(human_rotateX, human_rotateY, human_rotateZ); m_scene.Draw(); gl.PopMatrix(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { if (m_startAnimation) { animationTimer.Start(); } else { animationTimer.Stop(); cameraRotation = 0.0f; doorRotation = 0.0f; } gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); 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); // Pozicioniranje kamere gl.LookAt(-500, 300, 1000, 0, 0, 0, 0, 1, 0); gl.PushMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.Translate(0f, 250f, -380f); gl.Scale(scale_factor * 20f, scale_factor * 20f, scale_factor * 20f); gl.Rotate(30f, cameraRotation, 0f); SetupReflectorLighting(gl, redLight); m_scene.Draw(); gl.PopMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.CONCRETE]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); DrawBase(gl); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.BRICKS]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); DrawWalls(gl); gl.Disable(OpenGL.GL_TEXTURE_2D); DrawCage(gl); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.RUST]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); DrawDoor(gl); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); DrawText(gl); gl.Flush(); }
private void drawTable(OpenGL gl) { gl.PushMatrix(); gl.Translate(-3.0f, -10.0f, -45.0f); gl.Scale(0.25f, 0.15f, 0.25f); //gl.Rotate(m_xRotation, 0.0f, 0.0f); //gl.Rotate(0.0f, m_yRotation, 0.0f); m_scene.Draw(); gl.PopMatrix(); }
private void DrawArrow(OpenGL gl) { gl.PushMatrix(); gl.Translate(ax, ay, az); gl.Scale(50.2f, skaliranje, 50.2f); gl.Rotate(0.0f, 90f, 0f); m_arrow.Draw(); gl.PopMatrix(); }
private void DrawPC() { gl.PushMatrix(); //Iscrtaj kompjuter gl.Translate(1, 0, 0); gl.Rotate(90, 1, 0, 0); gl.Rotate(-90, 0, 0, 1); gl.Scale(5, 5, 5); m_scene.Draw(); gl.PopMatrix(); }
private void Golf_Club(OpenGL gl) { gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Ball]); gl.Color(0.3f, 0.3f, 0.3f); gl.Translate(positionGolf_Club[0], positionGolf_Club[1], positionGolf_Club[2]); gl.Rotate(rotationGolf_Club[0], rotationGolf_Club[1], rotationGolf_Club[2]); gl.Scale(0.2f, 0.35f, 0.2f); m_scene.Draw(); gl.PopMatrix(); }
public void drawArrow(OpenGL gl) { gl.PushMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Translate(arrowXTranslate, arrowYTranslate, arrowZTranslate); gl.Scale(arrowVal, arrowVal, 2.0f); gl.Rotate(180.0f, 0.0f, 0.0f + arrowXRotation); gl.Color(1.0f, 0.0f, 1.0f); m_strela.Draw(); gl.PopMatrix(); }
public void drawCamera(OpenGL gl) { gl.PushMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.Color(1.0f, 0.0f, 0.0f); gl.Translate(-400.0f, 100.0f, -350.0f); gl.Rotate(0f, c_rotation, 0f); gl.Rotate(m_earthRotation, 0f, 1f, 0f); gl.Rotate(0.0f, 60.0f, 0.0f); gl.Scale(0.05f, 0.05f, 0.05f); m_scene.Draw(); gl.PopMatrix(); }
private void IscrtajDvorac(OpenGL gl) { gl.Color(0.9, 0.9, 0.9, 1.0); float[] pozicija = { 0.0f, 10.0f, 0.0f, 1.0f }; gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, pozicija); gl.PushMatrix(); var faktorSkaliranjaDvorca = 10.0f; gl.Translate(0.0f, 0.0f, -0.2f); gl.Rotate(90.0f, 1.0f, 0.0f, 0.0f); gl.Scale(faktorSkaliranjaDvorca * 5f, faktorSkaliranjaDvorca * 5.0f, faktorSkaliranjaDvorca * 5f); m_scene_castle.Draw(); gl.PopMatrix(); }
private void drawVozilo(OpenGL gl, double scale, int angleToMakeNormal) { resetMaterial(gl); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.PushMatrix(); gl.Rotate(0, angleToMakeNormal, 0); gl.Scale(scale, scale, scale); m_scene.Draw(); gl.PopMatrix(); gl.Color(1.0, 1.0, 1.0, 1.0); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Enable(OpenGL.GL_COLOR_MATERIAL); // jer assimp napravi metez gl.Color(1f, 1f, 1f, 1f); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); //#grid samo za laksu orijentaciju (obrisi) gl.PushMatrix(); gl.Translate(0.0f, 0.0f, -m_sceneDistance); gl.Rotate(15f, 0f, 1f, 1f); Grid grid = new Grid(); grid.Render(gl, RenderMode.Design); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, 0.0f, -m_sceneDistance); gl.Rotate(m_xRotation + 10, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); gl.Scale(2f, 2f, 2f); //#iscrtavanje baze drawBase(gl); //#iscrtavanje modela bureta gl.PushMatrix(); gl.Translate(-0.1f, 1.3f, -0.153f); m_scene.Draw(); gl.PopMatrix(); //#iscrtavanje cilindra drawCylinder(gl); //#iscrtavanje diska drawDisk(gl); gl.PopMatrix(); //#ispis 2d teksta drawText(gl); gl.Flush(); }
private void IscrtajStrele(OpenGL gl, float faktorSkaliranjaStrele = 1f) { int brojStrela = 10; var mojFaktorSkaliranja = 4.0f; for (float idxStrele = 1; idxStrele <= brojStrela; idxStrele++) // float kako ne bih gubio decimale pri deljenju { gl.PushMatrix(); float jedinstveniPomerajStrele; gl.Scale(faktorSkaliranjaStrele * mojFaktorSkaliranja, faktorSkaliranjaStrele * mojFaktorSkaliranja, faktorSkaliranjaStrele * mojFaktorSkaliranja); // povecavam malo strelu, jer je dosta mala jedinstveniPomerajStrele = PomerajStrele; jedinstveniPomerajStrele = Clamp(jedinstveniPomerajStrele, 0f, 3000f); gl.Translate(-2.0f + idxStrele / 3, -jedinstveniPomerajStrele, 1.0f); gl.Rotate(90.0f, 0.0f, 0.0f, 1.0f); // podizem strele gl.Rotate(180.0f, 0.0f, 1.0f, 0.0f); // okrecem ih ka meni m_scene_arrow.Draw(); gl.PopMatrix(); } }
public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.PushMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.LoadIdentity(); gl.LookAt(0.0f, 1000.0f, 300.0f, 0.0f, 950.0f, 0.0f, 0.0f, 1.0f, 0.0f); gl.Translate(m_xtranslate, m_ytranslate, -m_sceneDistance); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); drawGround(gl); drawTrack(gl); gl.PushMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); m_scene.Draw(); gl.PopMatrix(); drawArrow(gl); drawCube1(gl); drawCube2(gl); draw3DText(gl); setupLighting(gl); setupTargetLight(gl); gl.PopMatrix(); gl.Flush(); }
//ostale metode public void drawScene(OpenGL gl) { gl.MatrixMode(OpenGL.GL_MODELVIEW); //gl.ClearColor(1.0f, 1.0f, 1.0f, 1.0f); //gl.Color(1.0f, 1.0f, 1.0f, 1.0f); //gl.Color(0.0f, 0.0f, 0.0f, 1.0f); //pocetak iscrtavanja gl.PushMatrix(); //kamion gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Empty]); gl.Translate(10.0f + pozicijaKamiona[0], -5.0f + pozicijaKamiona[1], -80.0f + pozicijaKamiona[2]); gl.Rotate(0.0f, rotacijaKamiona, 0.0f); m_scene.Draw(); gl.PopMatrix(); //kontejner gl.PushMatrix(); //gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Empty]); //gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL); gl.Translate(pozicijaKontejnera[0] - 10.0f, pozicijaKontejnera[1] - 5.0f, -80.0f + pozicijaKontejnera[2]); gl.Scale(0.05f, 0.05f, 0.05f); gl.Rotate(rotacijaKontejnera[0], rotacijaKontejnera[1], rotacijaKontejnera[2]); gl.Rotate(rotacijaKontejnera2[0], rotacijaKontejnera2[1], rotacijaKontejnera2[2]); gl.Rotate(rotacijaKontejnera3[0], rotacijaKontejnera3[1], rotacijaKontejnera3[2]); m_scene2.Draw(); gl.PopMatrix(); //gl.ClearColor(1.0f, 1.0f, 1.0f, 1.0f); //podloga gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Asphalt]); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); gl.Scale(faktorSkaliranjaPodloge, faktorSkaliranjaPodloge, faktorSkaliranjaPodloge); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Translate(-80.0f, -5.0f, 0.0f); gl.Begin(OpenGL.GL_QUADS); gl.Normal(0, 1, 0); gl.TexCoord(0.0f, 0.0f); gl.Vertex(0.0f, 0.0f, 0.0f); gl.TexCoord(0.0f, brojPonavljanjaTeksturePuta); gl.Vertex(200.0f, 0.0f, 0.0f); gl.TexCoord(brojPonavljanjaTeksturePuta, brojPonavljanjaTeksturePuta); gl.Vertex(200.0f, 0.0f, -200.0f); gl.TexCoord(brojPonavljanjaTeksturePuta, 0.0f); gl.Vertex(0.0f, 0.0f, -200.0f); gl.End(); gl.PopMatrix(); //zidovi sa strana kontejnera gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Empty]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Translate(0.0f, 0.0f, -80.0f); gl.Scale(1f, 8f, 10f); cube = new Cube(); cube.Render(gl, RenderMode.Render); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(-25.0f, 0.0f, -80.0f); gl.Scale(1f, 8f, 10f); cube = new Cube(); cube.Render(gl, RenderMode.Render); gl.PopMatrix(); //bandera gl.PushMatrix(); 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); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); gl.Scale(faktorSkaliranjaBandere, faktorSkaliranjaBandere, faktorSkaliranjaBandere); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Translate(20.0f, -5.0f, -80.0f); gl.Rotate(-90.0f, 0.0f, 0.0f); gl.Scale(cylinderFactor, cylinderFactor, cylinderFactor); cylinder = new Cylinder(); cylinder.Height = lampLightPos[1]; cylinder.BaseRadius = 0.5f; cylinder.TopRadius = 0.5f; cylinder.CreateInContext(gl); cylinder.Render(gl, RenderMode.Render); cylinder.CreateInContext(gl); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(lampLightPos[0], lampLightPos[1] - 5.0f, lampLightPos[2]); gl.Scale(cubeFactor, cubeFactor, cubeFactor); cube = new Cube(); cube.Render(gl, RenderMode.Render); gl.PopMatrix(); //kraj iscrtavanja 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.FrontFace(OpenGL.GL_CCW); gl.PushMatrix(); gl.LookAt(0, 0, m_sceneDistance + 150, 0, 0, 0, 0, 1, 0); gl.Translate(TranslateX, TranslateY, -m_sceneDistance); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); //gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_DECAL); /* * gl.PushMatrix(); * gl.PointSize(50.0f); * gl.Translate(0, 0, 0); * gl.Begin(OpenGL.GL_POINTS); * gl.Color(0.0f, 1.0f, 0.0f); * gl.Vertex(0.0f, 0.0f, 0.0f); * gl.End(); * gl.PopMatrix(); */ //tackasto gl.PushMatrix(); Cube cube = new Cube(); float[] poz = new float[] { -300.0f, 180.0f, 0.0f, 1.0f }; gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, poz); gl.Translate(poz[0], poz[1], poz[2]); gl.Scale(10.0f, 10.0f, 10.0f); gl.Color(0.0f, 0.0f, 1.0f); cube.Render(gl, RenderMode.Render); gl.PopMatrix(); /* * //reflektor * gl.PushMatrix(); * Cube reflekt = new Cube(); * float[] light1pos = new float[] {0f, 180f, -215f, 1.0f }; * float[] light1diffuse = new float[] { 1.0f, 1.0f, 1.0f, 1.0f }; * float[] light1ambient = new float[] { 0f, 1f, 0f, 1.0f }; * gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, light1pos); * gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, light1ambient); * gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_DIFFUSE, light1diffuse); * gl.Translate(0.0f, 120.0f, -225f); * gl.Scale(10.0f, 10.0f, 10.0f); * gl.Color(1.0f, 0.0f, 0.0f); * reflekt.Render(gl, RenderMode.Render); * gl.PopMatrix(); */ gl.PushMatrix(); Cube reflekt = new Cube(); SetReflektor(gl); gl.Translate(0.0f, 180.0f, -225f); gl.Scale(10.0f, 10.0f, 10.0f); gl.Color(1.0f, 0.0f, 0.0f); reflekt.Render(gl, RenderMode.Render); gl.PopMatrix(); #region Floor + Walls gl.PushMatrix(); //Pod gl.Enable(OpenGL.GL_TEXTURE_2D); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Floor]); gl.LoadIdentity(); gl.Scale(3, 7, 7); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Translate(0, -50, 0); gl.Scale(300, 180, 250); gl.Begin(OpenGL.GL_QUADS); gl.Normal(0f, 1f, 0f); //Pod gl.Color(0.30f, 0.15f, 0.0f); gl.TexCoord(1f, 1f); gl.Vertex(-1.0f, -1.0f, -1.0f); gl.TexCoord(0f, 1f); gl.Vertex(-1.0f, -1.0f, 1.0f); gl.TexCoord(0f, 0f); gl.Vertex(1.0f, -1.0f, 1.0f); gl.TexCoord(1f, 0f); gl.Vertex(1.0f, -1.0f, -1.0f); gl.End(); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); gl.Scale(1, 1, 1); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); //Zidovi gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Brick]); gl.Translate(0, -50, 0); gl.Scale(300, 180, 250); gl.Begin(OpenGL.GL_QUADS); gl.Color(0.556863f, 0.419608f, 0.137255f); //Nazad zid gl.Normal(0f, 0f, 1f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(-1, -1, -1); //leva dole daleko gl.TexCoord(1.0f, 0.0f); gl.Vertex(1, -1, -1); //desna dole daleko gl.TexCoord(1.0f, 1.0f); gl.Vertex(1, 1, -1); //desna gore daleko gl.TexCoord(0.0f, 1.0f); gl.Vertex(-1, 1, -1); //leva gore daleko gl.End(); gl.Begin(OpenGL.GL_QUADS); gl.Color(0.556863f, 0.419608f, 0.137255f); //Desni zid gl.Normal(-1f, 0f, 0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(1.0f, 1.0f, -1.0f); gl.TexCoord(1.0f, 0.0f); gl.Vertex(1.0f, -1.0f, -1.0f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(1.0f, -1.0f, 1.0f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(1.0f, 1.0f, 1.0f); gl.End(); gl.Begin(OpenGL.GL_QUADS); gl.Color(0.556863f, 0.419608f, 0.137255f); //Levi zid gl.Normal(1f, 0f, 0f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(-1, 1, 1); //levo gore blizu gl.TexCoord(0.0f, 1.0f); gl.Vertex(-1, -1, 1); //levo dole blizu gl.TexCoord(1.0f, 1.0f); gl.Vertex(-1, -1, -1); //levo dole lako gl.TexCoord(1.0f, 0.0f); gl.Vertex(-1, 1, -1); //levo gore daleko gl.End(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region postolje gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Wood]); Cube postolje = new Cube(); gl.Normal(0f, 0f, 1f); gl.Translate(0.0f, 0.0f, -235.0f); gl.Scale(100.0f, 80.0f, 10f); gl.Color(0.4f, 0.4f, 0.4f); //gl.Color(1f, 1f, 1f); gl.Rotate(0f, 0f, -90f); postolje.Render(gl, RenderMode.Render); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region pikado gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); //gl.Translate(0.0f, 0.0f, -225.0f); gl.Translate(translateBoard, 0.0f + this.m_BoardFall_y, -225.0f); //gl.Scale(2.0f, 2.0f, 2.0f); gl.Scale(scaleBoard, scaleBoard, scaleBoard); m_scene.Draw(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region Strelice gl.PushMatrix(); //1 gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); //gl.Translate(0.0f, 0.0f, 0.0f); gl.Translate(0.0f, 0.0f, 0.0f + this.m_Dart3_z); gl.Scale(10.0f, 10f, 5.0f); m_scene2.Draw(); gl.PopMatrix(); gl.PushMatrix(); //2 //gl.Translate(-50.0f, 0.0f, 0.0f); gl.Translate(-50.0f, 0.0f, 0.0f + this.m_Dart1_z); gl.Scale(10.0f, 10f, 5.0f); m_scene2.Draw(); gl.PopMatrix(); gl.PushMatrix(); //3 // gl.Translate(50.0f, 0.0f, 0.0f); gl.Translate(50.0f, 0.0f, 0.0f + this.m_Dart2_z); gl.Scale(10.0f, 10f, 5.0f); m_scene2.Draw(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region tekst gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PushMatrix(); gl.Viewport(m_width / 2, 0, m_width / 2, m_height / 2); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Ortho2D(-10, 10, -10, 10); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.LoadIdentity(); gl.Translate(-3.0f, -4.0f, 0.0f); gl.Color(10.0f, 10.0f, 0.0f); gl.PushMatrix(); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "Predmet: Racunarska grafika"); gl.PopMatrix(); gl.PushMatrix(); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "_________________________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -1.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "Sk.god: 2020/21"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -1.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "_____________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -2.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "Ime: Stefan"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -2.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "__________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -3.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "Prezime: Aradjanin"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -3.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "________________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -4.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "Sifra: 9.1"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0.0f, -4.0f, 0.0f); gl.DrawText3D("Arial Bold", 14.0f, 0f, 0f, "_______"); gl.PopMatrix(); Resize(gl, m_width, m_height); gl.PopMatrix(); #endregion // Oznaci kraj iscrtavanja gl.PopMatrix(); gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.Viewport(0, 0, m_width, m_height); gl.PushMatrix(); gl.LookAt(0, 0, m_sceneDistance, 0, 0, 0, 0, 1, 0); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_DIRECTION, new float[] { 0.0f, -1.0f, 0.0f }); float[] pos = { 0f, 300F, 105f, 1.0f }; gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, pos); gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.TRAVA]); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.PushMatrix(); gl.Scale(3, 3, 3); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Begin(OpenGL.GL_QUADS); gl.Normal(0, 1f, 0); gl.Color(0.1f, 0.1f, 0.1f); gl.TexCoord(0f, 0f); gl.Vertex(300f, 0.0f, -300f); gl.TexCoord(0f, 1f); gl.Vertex(-300f, 0.0f, -300f); gl.TexCoord(1f, 1f); gl.Vertex(-300f, 0.0f, 300f); gl.TexCoord(1f, 0f); gl.Vertex(300f, 0.0f, 300f); gl.End(); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(-100.0f, 0.0f, -100.0f - distance); gl.Scale(3f, 250f, 3f); gl.Rotate(-90f, 1, 0, 0); gl.Color(1.0f, 1.0f, 1.0f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.PLASTIKA]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); Cylinder target = new Cylinder(); target.TextureCoords = true; target.TopRadius = 1; target.CreateInContext(gl); target.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(100.0f, 0.0f, -100.0f - distance); gl.Scale(3f, 250f, 3f); gl.Rotate(-90f, 1, 0, 0); Cylinder target1 = new Cylinder(); //target1.NormalGeneration = Normals.Smooth; target1.TextureCoords = true; target1.TopRadius = 1; target1.CreateInContext(gl); target1.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(0f, 100.0f, -100f - distance); gl.Scale(100f, 3f, 3f); gl.Rotate(90f, 1, 0, 0); Cylinder target2 = new Cylinder(); target2.TextureCoords = true; target2.TopRadius = 1; target2.CreateInContext(gl); target2.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.PushMatrix(); gl.Translate(0, jumpH + 10 * size, 100 - ballDistance); gl.Rotate(jumpR, 0, 0); gl.Translate(0, -10 * size, 0); gl.Scale(size, size, size); gl.Color(0.3f, 0.3f, 0.3f); gl.Rotate(-90, 0, 0); m_scene.Draw(); gl.PopMatrix(); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.PushMatrix(); gl.Viewport(m_width / 2, 0, m_width / 2, m_height / 2); gl.LoadIdentity(); gl.Ortho2D(-20.0f, 20.0f, -20.0f, 20.0f); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.LoadIdentity(); gl.Color(0.5f, 0.1f, 0.1f); gl.PushMatrix(); gl.Translate(5f, -15f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "Predmet:Racunarska grafika"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -15f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "_______________________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -16f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "Sk.god:2020/21"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -16f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "_____________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -17f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "Ime:Nastasja"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -17f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "___________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -18f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "Prezime:Damjanac"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -18f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "_______________"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -19f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "Sifra zad:7.2"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(5f, -19f, 0f); gl.DrawText3D("Tahoma", 10, 1.0f, 0, "__________"); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.Viewport(0, 0, m_width, m_height); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); gl.Color(0.4f, 0.4f, 0.4f); /* * * double eyex, double eyey, double eyez, * double centerx, double centery, double centerz, * double upx, double upy, double upz) * */ gl.LookAt(-40, 20, -m_sceneDistance + 10, 0, 0, -m_sceneDistance + 10, 0, 1, 0); float[] ambijentalnaKomponenta2 = { Rvalue, Gvalue, Bvalue, 1.0f }; float[] difuznaKomponenta2 = { 0.1f, 0.1f, 0.1f, 1.0f }; // float[] spekularnaKomponenta2 = { 0.1f, 0.1f, 0.1f, 1 }; gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, ambijentalnaKomponenta2); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_DIFFUSE, difuznaKomponenta2); // gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPECULAR, // spekularnaKomponenta2); float[] pozicija2 = { polozajX, 100.0f, -m_sceneDistance + 25, 1.0f }; //x,y,z,w gde je 1 gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, pozicija2); gl.PushMatrix(); gl.PushMatrix(); gl.PopMatrix(); gl.PushMatrix(); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_CULL_FACE); gl.FrontFace(OpenGL.GL_CCW); gl.Translate(5f, -10.0f, -m_sceneDistance + 10); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_CULL_FACE); gl.FrontFace(OpenGL.GL_CCW); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Wood]); gl.Translate(-20f, 0f, 0f); gl.Rotate(0f, 0f, -90f); gl.Rotate(90f, 0f, 0f); if (rotiranjeDrzaca) { gl.Rotate(0f, -angle, 0f); gl.Translate(0f, 0f, blagoPodizanjeDrzaca); } gl.Translate(4.0f, 0f, 0); gl.Scale(3f, 7f, 5f); //gl.Color(0.5f, 0.5f, 0.5f); Cube cube = new Cube(); gl.Normal(0f, -1f, 0f); cube.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Metal]); gl.FrontFace(OpenGL.GL_CCW); gl.Translate(30.0f, -6.5f, 0f); //gl.Color(0.5f, 0.5f, 0.5f); gl.Rotate(90f, 0f, 0f); Disk disk = new Disk(); disk.Material = new SharpGL.SceneGraph.Assets.Material(); disk.Material.Shininess = 10f; disk.OuterRadius = 10f; disk.CreateInContext(gl);; disk.TextureCoords = true; gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); gl.Scale(0.7f, 0.7f, 0.7f); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Rotate(0f, -180f, 0f); disk.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); disk.NormalGeneration = SharpGL.SceneGraph.Quadrics.Normals.Smooth; disk.NormalOrientation = Orientation.Outside; gl.PopMatrix(); gl.FrontFace(OpenGL.GL_CCW); gl.PushMatrix(); gl.Translate(0f, -7f, 0f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Concrete]); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); gl.Scale(1.4f, 1.4f, 1.4f); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Begin(OpenGL.GL_QUADS); //gl.Color(0.9f, 0.9f, 0.9f); gl.Normal(0f, 1f, 0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(50, 0, 50); gl.TexCoord(1.0f, 0.0f); gl.Vertex(50, 0, -50); gl.TexCoord(0.0f, 0.0f); gl.Vertex(-50, 0, -50); gl.TexCoord(0.0f, 1.0f); gl.Vertex(-50, 0, 50); gl.End(); gl.PopMatrix(); //gl.Enable(OpenGL.GL_TEXTURE_2D); // gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Roses]); // gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.PushMatrix(); gl.Translate(-20f, 0f, -7f); if (kotrljanje) { gl.Translate(pomeraj, 0f, 0f); gl.Rotate(0f, 0f, ugaoKotrljanja); } if (propadanje) { gl.Translate(0f, spustanje, 0f); } gl.Translate(0f, blagoPodizanjeBureta, 0f); gl.Scale(1, skaliranjeFaktor, 1); // gl.Scale(1,1 , skaliranjeFaktor); //if (skaliranjeFaktor != 1) //{ // float centarDrzaca = 10f / 2f; // Console.WriteLine(centarDrzaca); // float NoviCentar = (skaliranjeFaktor * 10f )/ 2f; // Console.WriteLine(NoviCentar); // float pomerajBuretaNakonSkaliranja = centarDrzaca - NoviCentar; // Console.WriteLine(pomerajBuretaNakonSkaliranja); // gl.Translate(0f, 0f, pomerajBuretaNakonSkaliranja); //} gl.Rotate(0f, 0f, -90f); gl.Rotate(90f, 0f, 0f); m_scene.Draw(); gl.PopMatrix(); gl.PushMatrix(); // (clipping) prozora u fizički prozor //aplikacije – mapiranje logičkog koordinatnog sistema u fizički gl.Viewport(m_width / 2, m_height / 2, m_width / 2, m_height / 2); //X,Y,W,H gl.MatrixMode(OpenGL.GL_PROJECTION); //matrica definiše vidljivi volumen, kao i tip projekcije scene na ekran (ortogonalna ili perspektiva) gl.LoadIdentity(); gl.Ortho2D(-15, 15, -15, 15); //left, right – min/maks po x-osi, bottom, top – min / maks po y-osi,definiše „2D“ projekciju. gl.MatrixMode(OpenGL.GL_MODELVIEW); //Izbor matrice nad kojom se vrše transformacije gl.LoadIdentity(); gl.Color(1f, 1f, 0f); gl.PushMatrix(); gl.Translate(3f, -10f, 0f); gl.DrawText3D("Arial", 14f, 1f, 0.1f, "Predmet: Racunarska grafika"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(3f, -11f, 0f); gl.DrawText3D("Arial", 14f, 1f, 0.1f, "Sk.god: 2019/20."); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(3f, -12f, 0f); gl.DrawText3D("Arial", 14f, 1f, 0.1f, "Ime: Tamara"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(3f, -13f, 0f); gl.DrawText3D("Arial", 14f, 1f, 0.1f, "Prezime: Lazarevic"); gl.PopMatrix(); gl.PushMatrix(); gl.Translate(3f, -14f, 0f); gl.DrawText3D("Arial", 14f, 1f, 0.1f, "Sifra zad: 13.2"); gl.PopMatrix(); gl.PopMatrix(); gl.PopMatrix(); gl.PopMatrix(); gl.Viewport(0, 0, m_width, m_height); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Perspective(60f, (double)m_width / m_height, 1f, 20000f); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.LoadIdentity(); // Oznaci kraj iscrtavanja gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { // Ocisti sadrzaj kolor bafera i bafera dubine gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); // Sacuvaj stanje ModelView matrice i primeni transformacije gl.PushMatrix(); gl.Translate(this.translateX, this.translateY, -m_sceneDistance); //Udalji se od scene po z osi gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); gl.LookAt(0, 0, m_sceneDistance, 0, 0, 0, 0, 1, 0); #region Tackasto osvetljenje gl.PushMatrix(); float[] pos = new float[] { 0.0f, 90.0f, 90.0f, 1.0f }; gl.Color(0.4f, 0.3f, 0.0f); gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, pos); gl.Translate(pos[0], pos[1], pos[2]); sphereLamp.Material.Bind(gl); sphereLamp.Render(gl, RenderMode.Render); gl.PopMatrix(); #endregion #region Koordinatni pocetak gl.PushMatrix(); gl.PointSize(5.0f); gl.Begin(OpenGL.GL_POINTS); gl.Color(0.0f, 1.0f, 0.0f); gl.Vertex(0.0f, 0.0f, 0.0f); gl.End(); gl.PopMatrix(); #endregion #region Pod gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); //Stavka 5 gl.MatrixMode(OpenGL.GL_TEXTURE); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Floor]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.LoadIdentity(); gl.Scale(5, 5, 5); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Begin(OpenGL.GL_QUADS); gl.Color(1.0f, 1.0f, 1.0f); gl.Normal(0f, 1f, 0f); gl.TexCoord(1f, 1f); gl.Vertex(-60.0f, -60.0f, 0.0f); gl.TexCoord(0f, 1f); gl.Vertex(-60.0f, -60.0f, 150.0f); gl.TexCoord(0f, 0f); gl.Vertex(90.0f, -60.0f, 150.0f); gl.TexCoord(1f, 0f); gl.Vertex(90.0f, -60.0f, 0.0f); gl.End(); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.LoadIdentity(); gl.Scale(1, 1, 1); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region Zidovi gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); //for (float z = 60.0f; z >= 0.0f; z -= 10.0f) //{ gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Brick]); gl.Begin(OpenGL.GL_QUADS); //Zadnji gl.Normal(0f, 0f, 1f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(-60.0f, 90.0f, 0.0f); //gornja leva gl.TexCoord(0.0f, 0.0f); gl.Vertex(-60.0f, -60.0f, 0.0f); //donja leva gl.TexCoord(1.0f, 0.0f); gl.Vertex(90.0f, -60.0f, 0.0f); //donja desna gl.TexCoord(1.0f, 1.0f); gl.Vertex(90.0f, 90.0f, 0.0f); //gornja desna gl.End(); gl.Begin(OpenGL.GL_QUADS); //Desni gl.Normal(-1f, 0f, 0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(90.0f, 90.0f, 0.0f); //gornja leva gl.TexCoord(1.0f, 0.0f); gl.Vertex(90.0f, -60.0f, 0.0f); //donja leva gl.TexCoord(0.0f, 0.0f); gl.Vertex(90.0f, -60.0f, 150.0f); //donja desna gl.TexCoord(0.0f, 1.0f); gl.Vertex(90.0f, 90.0f, 150.0f); //gornja desna gl.End(); gl.Begin(OpenGL.GL_QUADS); //Prednji gl.Normal(0f, 0f, -1f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(90.0f, 90.0f, 150.0f); //gornja leva gl.TexCoord(0.0f, 0.0f); gl.Vertex(90.0f, -60.0f, 150.0f); //donja leva gl.TexCoord(1.0f, 0.0f); gl.Vertex(-60.0f, -60.0f, 150.0f); // donja desna gl.TexCoord(1.0f, 1.0f); gl.Vertex(-60.0f, 90.0f, 150.0f); //gornja desna gl.End(); gl.Begin(OpenGL.GL_QUADS); //Levi gl.Normal(1f, 0f, 0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(-60.0f, 90.0f, 150.0f); //gornja leva gl.TexCoord(1.0f, 0.0f); gl.Vertex(-60.0f, -60.0f, 150.0f); // donja leva gl.TexCoord(0.0f, 0.0f); gl.Vertex(-60.0f, -60.0f, 0.0f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(-60.0f, 90.0f, 0.0f); gl.End(); //} gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region Plafon gl.PushMatrix(); gl.Begin(OpenGL.GL_QUADS); gl.Color(1.0f, 1.0f, 1.0f); gl.Vertex(-60.0f, 90.0f, 150.0f); gl.Vertex(-60.0f, 90.0f, 0.0f); gl.Vertex(90.0f, 90.0f, 0.0f); gl.Vertex(90.0f, 90.0f, 150.0f); gl.End(); gl.PopMatrix(); #endregion #region Postolje gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Floor]); gl.Scale(20.0f, 30.0f, 2f); gl.Translate(0.0f, 0.0f, 1.0f); Cube postolje = new Cube(); postolje.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region Pikado tabla gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Scale(0.5f * this.m_dartboardScale, 0.6f * this.m_dartboardScale, 1.0f); //gl.Translate(0.0f, 15.0f, 4.0f); gl.Translate(0.0f, 0.0f, 4.0f); m_scene.Draw(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region Strelice //Prva gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Scale(scaleDarts, scaleDarts, scaleDarts); gl.Translate(0.0f + this.m_throwDart1_x, 5.0f + this.m_throwDart1_y, 5.0f + this.m_throwDart1_z); m_scene2.Draw(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); //Druga gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Scale(scaleDarts, scaleDarts, scaleDarts); gl.Translate(0.0f + this.m_throwDart2_x, 10.0f + this.m_throwDart2_y, 5.0f + this.m_throwDart2_z); m_scene2.Draw(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); //Treca gl.PushMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Scale(scaleDarts, scaleDarts, scaleDarts); gl.Translate(0.0f, 0.0f, 5.0f + this.m_throwDart3_z); m_scene2.Draw(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); #endregion #region Slova gl.PushMatrix(); gl.Viewport(m_width / 2, 0, m_width / 2, m_height / 2); //donji desni ugao gl.DrawText3D("Arial Bold", 14, 0, 0, ""); gl.DrawText(sirina - 220, 100, 1.0f, 0.0f, 0.0f, "Arial Bold", 14, "Predmet: Racunarska grafika"); gl.DrawText(sirina - 220, 80, 1.0f, 0.0f, 0.0f, "Arial Bold", 14, "Sk.god: 2019/20."); gl.DrawText(sirina - 220, 60, 1.0f, 0.0f, 0.0f, "Arial Bold", 14, "Ime: Ana"); gl.DrawText(sirina - 220, 40, 1.0f, 0.0f, 0.0f, "Arial Bold", 14, "Prezime: Svitlica"); gl.DrawText(sirina - 220, 20, 1.0f, 0.0f, 0.0f, "Arial Bold", 14, "Sifra zad: 3.2"); gl.PopMatrix(); #endregion #region Reflektor float[] light1pos = new float[] { m_spotPosition1[0], m_spotPosition1[1], m_spotPosition1[2], 1.0f }; float[] light1diffuse = new float[] { 1.0f, 1.0f, 1.0f, 1.0f }; float[] light1ambient = new float[] { ReflectorAmbientRed, ReflectorAmbientGreen, ReflectorAmbientBlue, 1.0f }; gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, light1pos); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, light1ambient); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_DIFFUSE, light1diffuse); gl.Translate(m_spotPosition1[0], m_spotPosition1[1], m_spotPosition1[2]); //sijalica.Material.Emission = Color.Red; sijalica.Material.Bind(gl); sijalica.Render(gl, RenderMode.Render); gl.PopMatrix(); #endregion gl.PopMatrix(); // Oznaci kraj iscrtavanja gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Enable(OpenGL.GL_CULL_FACE); gl.LoadIdentity(); gl.PushMatrix(); gl.Translate(-60f, -100f, -m_sceneDistance); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); gl.Rotate(m_zRotation, 0.0f, 0.0f, 1.0f); gl.Viewport(0, 0, m_width, m_height); // gl.Scale(10f, 10f, 10f); //gl.PopMatrix(); gl.PushMatrix(); //pROBAA sa gridom gl.Translate(0f, 100f, 0f); gl.Scale(92f, 72f, 0f); Grid mreza = new Grid(); mreza.Render(gl, RenderMode.Design); gl.PopMatrix(); //gl.PushMatrix(); //Ima na pocetku push gl.Rotate(-90f, 0f, 180f); //iscrtavanje modela m_scene2.Draw(); gl.Color(1f, 0f, 0f); gl.Translate(-60f, -20f, 260f); m_scene.Draw(); // gl.Scale(-10f, -10f, -10f); gl.Rotate(-90f, 0f, 0f); Cube cube = new Cube(); //prepreke gl.Color(1f, 0.4f, 0.1f); // gl.Translate(-130f, -6000f, 0f); gl.Translate(-130f, -580f, 0f); gl.Scale(4f, 4f, 4f); for (int i = 0; i < 62; i++) { cube.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.Translate(0.0f, 6.0f, 0f); } gl.Translate(80f, -372.0f, 0.0f); for (int i = 0; i < 62; i++) { cube.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.Translate(0.0f, 6f, 0f); } gl.Color(0.4f, 0.4f, 0.4f); gl.Translate(0f, -480f, -1f); gl.Begin(OpenGL.GL_QUADS); gl.Vertex(200f, 100f); gl.Vertex(200f, 480f); gl.Vertex(-250f, 480f); gl.Vertex(-250f, 100f); gl.End(); gl.Translate(0f, 0f, 0.1f); gl.Begin(OpenGL.GL_QUADS); gl.Color(0.7f, 0.7f, 0.7f); gl.Vertex(0f, 100f); gl.Vertex(0f, 480f); gl.Vertex(-80f, 480f); gl.Vertex(-80f, 100f); gl.End(); gl.Viewport(m_width * 3 / 4, 0, m_width / 2, m_height / 2); // Predefinisan ViewPort .... gl.Color(0f, 1f, 0f); gl.DrawText(10, 214, 0.5f, 1f, 1f, "Arial", 14, "Predmet:Racunarska grafika"); gl.DrawText(10, 174, 0.5f, 1f, 1f, "Arial", 14, "Sk.god: 2017/18"); gl.DrawText(10, 134, 0.5f, 1f, 1f, "Arial", 14, "Ime: Dejan"); gl.DrawText(10, 94, 0.5f, 1f, 1f, "Arial", 14, "Prezme: Stojkic"); gl.DrawText(10, 54, 0.5f, 1f, 1f, "Arial", 14, "Sifra zad: 2.1"); gl.PopMatrix(); gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { if (shooting) { drawShooting(gl); return; } if (count >= 50) { dole = true; gore = false; } if (count <= 0) { gore = true; dole = false; } if (zoom >= 600) { zoom = 600; } if (zoom <= -300) { zoom = -300; } if (m_xRotation <= -20) { m_xRotation = -17; } else if (m_xRotation >= 50) { m_xRotation = 50; } gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.MatrixMode(OpenGL.GL_PROJECTION); // selektuj Projection Matrix gl.LoadIdentity(); gl.Perspective(50.0, (double)m_width / (double)m_height, 0.5, 1500.0); gl.LookAt(0f, 0f, 200f, 0f, 0f, -400, 0f, 1f, 0f); // Sacuvaj stanje modelview matrice i primeni transformacije gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.PushMatrix(); gl.PushMatrix(); gl.Translate(0, 0, zoom); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); SetupLighting(gl); gl.PushMatrix(); gl.Viewport(0, 0, m_width, m_height); gl.PushMatrix(); //kamera #region PODLOGA gl.PushMatrix(); gl.Translate(0.0f, 0f, 0f); gl.Color(0.42f, 0.81f, 0.67f); //da li treba ovde da se postavi za normalizaciju, ili u inicijalizaciji gl.Enable(OpenGL.GL_NORMALIZE); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Grass]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.LoadIdentity(); gl.Scale(10, 10, 10); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Begin(OpenGL.GL_QUADS); gl.TexCoord(0.0f, 0.0f); gl.Vertex4f(600f, -200f, 1000, 1); gl.TexCoord(0.0f, 1.0f); gl.Vertex4f(-600f, -200f, 1000, 1); gl.TexCoord(1.0f, 1.0f); gl.Vertex4f(-600f, -200f, -1200, 1); gl.TexCoord(1.0f, 0.0f); gl.Vertex4f(600f, -200f, -1200, 1); gl.End(); gl.PopMatrix(); #endregion #region MODEL gl.PushMatrix(); gl.Translate(10.0f, (-191 + scaleBall / 2) + count, -300); if (gore) { count += 3; } if (dole) { count -= 3; } rotateBall += rotateBall0; gl.Rotate(rotateBall, 0, 1, 0); gl.Color(1f, 1f, 1f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Ball]); gl.Scale(scaleBall, scaleBall, scaleBall); m_scene.Draw(); gl.PopMatrix(); #endregion #region GOL //levo gl.PushMatrix(); gl.Translate(-180f, -200f, -600); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Rotate(-90, 1.0f, 0.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil1 = new Cylinder(); cil1.Slices = 50; cil1.Height = 40; cil1.BaseRadius = 2; cil1.TopRadius = 2; cil1.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil1.CreateInContext(gl); cil1.Render(gl, RenderMode.Render); gl.PopMatrix(); //desno gl.PushMatrix(); gl.Translate(180f, -200, -600); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Rotate(-90, 1.0f, 0.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil2 = new Cylinder(); cil2.Slices = 50; cil2.Height = 40; cil2.BaseRadius = 2; cil2.TopRadius = 2; cil2.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil2.CreateInContext(gl); cil2.Render(gl, RenderMode.Render); gl.PopMatrix(); //gore gl.PushMatrix(); gl.Translate(-192f, 0f, -600); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil3 = new Cylinder(); cil3.Height = 76.8; cil3.Slices = 50; cil3.BaseRadius = 2; cil3.TopRadius = 2; cil3.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil3.CreateInContext(gl); cil3.Render(gl, RenderMode.Render); gl.PopMatrix(); //iza levo dole gl.PushMatrix(); gl.Translate(-180f, -190f, -600); gl.Scale(5, 5, 5); gl.Rotate(180, 0.0f, 1.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil4 = new Cylinder(); cil4.Height = 20; cil4.Slices = 50; cil4.BaseRadius = 2; cil4.TopRadius = 2; cil4.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil4.CreateInContext(gl); cil4.Render(gl, RenderMode.Render); gl.PopMatrix(); //iza desno dole gl.PushMatrix(); gl.Translate(180f, -190f, -600); gl.Scale(5, 5, 5); gl.Rotate(180, 0.0f, 1.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil5 = new Cylinder(); cil5.Height = 20; cil5.Slices = 50; cil5.BaseRadius = 2; cil5.TopRadius = 2; cil5.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil5.CreateInContext(gl); cil5.Render(gl, RenderMode.Render); gl.PopMatrix(); //iza dole gl.PushMatrix(); gl.Translate(-190f, -195f, -700); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil6 = new Cylinder(); cil6.Height = 74.5; cil6.Slices = 50; cil6.BaseRadius = 1; cil6.TopRadius = 1; cil6.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil6.CreateInContext(gl); cil6.Render(gl, RenderMode.Render); gl.PopMatrix(); //iza gore gl.PushMatrix(); gl.Translate(-190f, -25f, -700); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil11 = new Cylinder(); cil11.Height = 74.5; cil11.Slices = 50; cil11.BaseRadius = 1; cil11.TopRadius = 1; cil11.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil11.CreateInContext(gl); cil11.Render(gl, RenderMode.Render); gl.PopMatrix(); //levo iza dole gl.PushMatrix(); gl.Translate(-180f, -200f, -690); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Rotate(-90, 1.0f, 0.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil7 = new Cylinder(); cil7.Slices = 50; cil7.Height = 35; cil7.BaseRadius = 1; cil7.TopRadius = 1; cil7.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil7.CreateInContext(gl); cil7.Render(gl, RenderMode.Render); gl.PopMatrix(); //desno iza dole gl.PushMatrix(); gl.Translate(180f, -200f, -690); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Rotate(-90, 1.0f, 0.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil8 = new Cylinder(); cil8.Slices = 50; cil8.Height = 35; cil8.BaseRadius = 1; cil8.TopRadius = 1; cil8.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil8.CreateInContext(gl); cil8.Render(gl, RenderMode.Render); gl.PopMatrix(); //desno iza gore gl.PushMatrix(); gl.Translate(180f, 0, -600); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Rotate(90, 1.0f, 0.0f, 0.0f); gl.Rotate(75, 0.0f, 1.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil9 = new Cylinder(); cil9.Slices = 50; cil9.Height = 22; cil9.BaseRadius = 1; cil9.TopRadius = 1; cil9.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil9.CreateInContext(gl); cil9.Render(gl, RenderMode.Render); gl.PopMatrix(); //desno iza gore gl.PushMatrix(); gl.Translate(-180f, 0, -600); gl.Scale(5, 5, 5); gl.Rotate(90, 0.0f, 1.0f, 0.0f); gl.Rotate(90, 1.0f, 0.0f, 0.0f); gl.Rotate(75, 0.0f, 1.0f, 0.0f); gl.Color(0.5f, 0.5f, 0.5f); Cylinder cil10 = new Cylinder(); cil10.Slices = 50; cil10.Height = 22; cil10.BaseRadius = 1; cil10.TopRadius = 1; cil10.TextureCoords = true; gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Plastic]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); cil10.CreateInContext(gl); cil10.Render(gl, RenderMode.Render); gl.PopMatrix(); gl.PopMatrix(); #endregion #region TEKST gl.PushMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Color(0, 0, 0); gl.Viewport(m_width - 200, m_height - 150, 200, 150); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Ortho2D(-5.0, 10.0, 0, 6.0); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.LoadIdentity(); gl.PushMatrix(); gl.Color(0, 0, 0); String[] tekst = { "Predmet: Racunarska grafika", "Sk.god: 2017/18", "Ime: Nina", "Prezime: Miladinovic", "Sifra zad: 9.2" }; for (int i = 0; i < tekst.Length; i++) { gl.PushMatrix(); gl.Translate(-5.0f, 5.0f - i, 0f); gl.DrawText3D("Arial Bold", 10f, 1f, 0.1f, tekst[i]); gl.PopMatrix(); } gl.PopMatrix(); gl.PopMatrix(); #endregion gl.PopMatrix(); gl.PopMatrix(); gl.PopMatrix(); gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.Enable(OpenGL.GL_DEPTH_TEST); gl.Viewport(0, 0, m_width, m_height); gl.ClearColor(0.2f, 0.2f, 0.2f, 1.0f); gl.Disable(OpenGL.GL_LIGHTING); gl.Disable(OpenGL.GL_TEXTURE_2D); WriteText2(gl); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.Enable(OpenGL.GL_LIGHTING); gl.PushMatrix(); gl.LookAt(0.0f, 0f, 100.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f); gl.Translate(0.0f, 0.0f, -m_sceneDistance); gl.Scale(10f, 10f, 10f); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); gl.Rotate(m_zRotation, 0.0f, 0.0f, 1.0f); gl.Translate(40f, 200f, 0.0f); //reflektor SetupLighting1(gl); //iscrtavanje 1/2jabuke //nacin stapanja teksture sa modelom ( sabira teksel sa bojom materijala) gl.Color(0.0f, 0.1f, 0.0f, 1.0f); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); gl.PushMatrix(); gl.Rotate(0.0f + leftFruitRotation, 0.0f, 0.0f); gl.PushMatrix(); gl.Translate(35, -80f, -40f + fruitHeight); gl.Rotate(90f - fruitRotation, 0.0f, 0.0f); gl.Scale(200f, 200f, 200f); m_scene.Draw(); gl.PopMatrix(); //iscrtavanje 2/2jabuke gl.PushMatrix(); gl.Rotate(90f, 180f - fruitRotation, 0f); gl.Translate(50f, -40f + fruitHeight, -130f); gl.Scale(200f, 200f, 200f); m_scene.Draw(); gl.PopMatrix(); gl.PopMatrix(); gl.PushMatrix(); // gl.Rotate(0.0f, 0.0f + leftFruitRotation, 0.0f); //iscrtavanje narandza gore gl.PushMatrix(); gl.Rotate(180f, 0f, 0f); gl.Translate(-125f, 137f, -50f - fruitHeight); gl.Scale(150f, 150f, 150f); m_scene2.Draw(); gl.PopMatrix(); //iscrtavanje narandza dole gl.PushMatrix(); gl.Rotate(0f, 0f, 0f); gl.Translate(-125f, -258f, 12f + fruitHeight); gl.Scale(150f, 150f, 150f); m_scene2.Draw(); gl.PopMatrix(); gl.PopMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); //postolja gl.PushMatrix(); gl.Translate(-5.0f, -100.0f, 0.0f); gl.Color(0.0f, 0.7f, 0.0f); Cylinder cyl = new Cylinder { TopRadius = 20f, BaseRadius = 20f, Height = 20f + fruitHeight }; cyl.CreateInContext(gl); gl.Normal(0.0f, 1.0f, 0.0f); cyl.Render(gl, RenderMode.Render); Disk disk = new Disk(); disk.InnerRadius = 0f; disk.OuterRadius = 20f; disk.CreateInContext(gl); gl.Normal(0.0f, 1.0f, 0.0f); gl.Translate(0.0f, 0.0f, 20f + fruitHeight); disk.Render(gl, RenderMode.Render); gl.Normal(0.0f, 1.0f, 0.0f); gl.Translate(-150f, -100f, -20f - fruitHeight); cyl.Render(gl, RenderMode.Render); gl.Translate(0.0f, 0.0f, 20f + fruitHeight); gl.Normal(0.0f, 1.0f, 0.0f); disk.Render(gl, RenderMode.Render); gl.PopMatrix(); //iscrtavanje podloge drawFloor(gl); //gl.Color(0.0f, 0.0f, 0.7f); //dole zid gl.PushMatrix(); Cube wall = new Cube(); gl.Translate(-45.0f, 150.0f, 10.0f); gl.Scale(200f, 5f, 10f); gl.Normal(0f, 1f, 0f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[0]); wall.Render(gl, RenderMode.Render); //skidanje tekstura gl.PopMatrix(); //gore zid gl.PushMatrix(); gl.Translate(-45.0f, 430.0f, 10.0f); gl.Scale(200f, 5f, 10f); wall.Render(gl, RenderMode.Render); gl.PopMatrix(); //levo zid gl.PushMatrix(); gl.Rotate(0.0f, 0.0f, 90.0f); gl.Translate(290.0f, 240.0f, 10.0f); gl.Scale(135f, 5f, 10f); wall.Render(gl, RenderMode.Render); gl.PopMatrix(); //desni zid gl.PushMatrix(); gl.Rotate(0.0f, 0.0f, 90.0f); gl.Translate(290.0f, -150.0f, 10.0f); gl.Scale(135f, 5f, 10f); wall.Render(gl, RenderMode.Render); gl.PopMatrix(); //crtanje grid mreze gl.PushMatrix(); gl.Translate(-50f, 250f, 0); gl.Scale(40f, 30f, 0f); Grid grid = new Grid(); grid.Render(gl, RenderMode.Design); gl.PopMatrix(); gl.PopMatrix(); // Oznaci kraj iscrtavanja gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { String[] message = new string[] { "Predmet: Racunarska grafika", "Sk.god: 2019/20", "Ime: Igor", "Prezime: Srajer", "Sifra zad: 11.1" }; //-------------------------------------------------------------------------------------------- gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.Viewport(0, 0, m_width, m_height); gl.LoadIdentity(); //Podesavanje kamere 25.0f, 43.0f, -50.0f -1000, -1000, 0 gl.LookAt(0, 2500, -9000, 0, -300, 55, 0, 1, 0); gl.Translate(0.0f, -300.0f, -m_sceneDistance); gl.Rotate(m_xRotation, 1.0f, 1.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); gl.Scale(10.0f, 10.0f, 15.0f); gl.Enable(OpenGL.GL_POINT_SMOOTH); //restrikcija rotacije if (m_xRotation >= 40.0f) { m_xRotation = 40.0f; } if (m_xRotation <= -160.0f) { m_xRotation = -160.0f; } gl.PushMatrix(); //animacija if (m_earthRotation >= 0) { if (m_earthRotation < 50) { gl.Translate(0.0f, 0.0f, m_earthRotation); m_earthRotation += 5; } else if (m_earthRotation >= 50 && m_earthRotation < 105) { gl.Translate(0.0f, m_earthTranslation + visina, m_earthRotation); m_earthTranslation += 19; m_earthRotation += 5; } else if (m_earthRotation >= 105 && m_earthRotation < 170) { gl.Translate(0.0f, m_earthTranslation, m_earthRotation); m_earthRotation += 5; } else if (m_earthRotation >= 170) { System.Threading.Thread.Sleep(2000); m_earthRotation = -1; m_earthTranslation = -1; animation = false; } } gl.Color(0.196078, 0.196078, 0.8); gl.Translate(25.0f, 43.0f, -50.0f); gl.Rotate(90.0f, 1.0f, 0.0f, 0.0f); gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Platforma]); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); gl.Scale(1.0f, 1.0f, visina + 1); gl.Translate(0.0f, 0.0f, -visina * 14); m_scene.Draw(); gl.PopMatrix(); gl.PopMatrix(); //stub gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Platforma]); gl.Color(0.55, 0.09, 0.09); DrawCylinder(gl); gl.PopMatrix(); //postolje gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Postolje]); gl.Color(0.5, 1.5, 0.5); DrawPlatform(gl); DrawGround(gl); gl.PopMatrix(); //stepenice 1 gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Stairs]); gl.Color(0.137255, 0.419608, 0.556863); gl.Translate(10.0f, 0.0f, 0.0f); DrawStairs(gl); gl.PopMatrix(); //stepenice 2 gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Stairs]); gl.Translate(-45.0f, 0.0f, 0.0f); DrawStairs(gl); gl.PopMatrix(); //stair fence 1 gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Postolje]); gl.Color(0.59, 0.41, 0.31); gl.Translate(36.0f, 10.0f, -10.0f); gl.Rotate(14.0f, 1.0f, 0.0f, 0.0f); DrawStairFence(gl); gl.PopMatrix(); //stair fence 2 gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Postolje]); gl.Color(0.59, 0.41, 0.31); gl.Translate(-18.0f, 10.0f, -10.0f); gl.Rotate(14.0f, 1.0f, 0.0f, 0.0f); DrawStairFence(gl); gl.PopMatrix(); //stair fence 3 gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Postolje]); gl.Color(0.59, 0.41, 0.31); gl.Translate(-70.0f, 10.0f, -10.0f); gl.Rotate(14.0f, 1.0f, 0.0f, 0.0f); DrawStairFence(gl); gl.PopMatrix(); //tekst gl.PushMatrix(); SharpGL.FontBitmaps font = new FontBitmaps(); for (int i = 0; i < message.Length; i++) { gl.Viewport(26 * m_width / 30, ((-i + 5) * m_height) / 30, m_width / 5, m_height / 5); font.DrawText(gl, 0, 0, 1.0f, 0.0f, 0.0f, "Verdana italic", 10.0f, message[i]); } gl.PopMatrix(); gl.Viewport(0, 0, m_width, m_height); //oznaci kraj iscrtavanja gl.Flush(); }
/// <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.PushMatrix(); gl.Viewport(0, 0, m_width, m_height); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.PushMatrix(); gl.LoadIdentity(); gl.LookAt(-300, 150, m_sceneDistance, 0, 0, 0, 0, 1, 0); //Pozicioniranje kamere (gore levo ne mnogo od podloge) (6) float[] pos = { 0, 120, 0, 1.0f }; //STACIONARNO SVETLO gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_POSITION, pos); //POZICIJA STACIONARNOG SVETLA gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); #region Bure gl.PushMatrix(); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_DIRECTION, new float[] { 0.0f, -1.0f, 0.0f }); //REFLETOR BACA SVETLO NA DOLE, ZASTO OVDE A NE U METODI Z ASVETLO? DA BI SE ROTACIJE PROMENILE I NA OVO float[] pos2 = { 200 + lightPositionX, 150, 0f, 1.0f }; //IZNAD BURETA I POSOTLJA, ALI SE DODAJE I VREDNOST SLAJDERA KOJI POMERA SVETLO (7) gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, pos2); //REFLEKTOR, POZICIJA float[] COLOR = { r, g, b }; //VREDNOST SLAJDERA gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, COLOR); //SVE KOMPONENTE REFLEKTORSKOG IZVORA PODESI NA ONO STO SLADJERI POKAZUJU (7) gl.Light(OpenGL.GL_LIGHT0, OpenGL.GL_DIFFUSE, COLOR); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPECULAR, COLOR); gl.Translate(200f + barrelX, 90 + barrelY + barrelY_Free, 0); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); //EZIM STAPANJA ZA MODEL BURETA : ADD (10) gl.Scale(barrelScale, barrelScale, barrelScale); //UNIFORMNO SKLAIRANJE ZA PARAMETAR SA SLAJDERA (7) gl.Translate(0, 13.575, 0); //DONJI DEO U KOORINATNI POCETAK gl.Rotate(0f, 0, barrelRotation); //OKRENI ZBOG KOTRLJANJA, barrelRotation JE 0 KAD NEMA ANIMACIJE gl.Translate(0, -13.575, 0); //CENTAR U KOORDIANTNI POCETAK m_scene.Draw(); gl.PopMatrix(); #endregion gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE);//DECAL ZA SVE OSTALE TEKSTURE #region Podloga gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, textures[(int)TextureObjects.Concrete]); //Podloga od betona (5) gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); // prazna matrica (da se poniste prethodne) gl.Scale(6, 6, 6); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Normal(0, 1, 0); // normala na podlogu (2) // gl.Translate(-400.0f, -60.0f, 0.0f); gl.Rotate(0, 0, 10); gl.Scale(55, 1, 55); gl.Begin(OpenGL.GL_QUADS); gl.Color(0.5f, 0.5f, 0.5f); gl.TexCoord(0f, 0f); gl.Vertex(-5f, 0.0f, -5f); gl.TexCoord(0f, 1f); gl.Vertex(-5.0f, 0.0f, 5.0f); gl.TexCoord(1f, 1f); gl.Vertex(5.0f, 0.0f, 5.0f); gl.TexCoord(1f, 0f); gl.Vertex(5.0f, 0.0f, -5.0f); gl.End(); gl.PopMatrix(); #endregion #region Rupa gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, textures[(int)TextureObjects.Metal]); //IZABERI METAL gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); //UCITAJ PRAZNU TEXTURE MATRICU, DA SE PONISTE TRANSFORMACIJE OD RANIEJ AKO IH IMA gl.MatrixMode(OpenGL.GL_MODELVIEW); //gl.Translate(300f, -50f, 250f); gl.Translate(-200f, -35f, 0f); //gl.Scale(20f, 12f, -20f); gl.Rotate(-90, 1, 0, 0); gl.Rotate(-10, 0, 1, 0); Disk disk = new Disk(); disk.TextureCoords = true; disk.NormalGeneration = Normals.Smooth; disk.Loops = 120; disk.Slices = 30; disk.InnerRadius = 0f; disk.OuterRadius = 70; disk.CreateInContext(gl); disk.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); #endregion #region Postolje gl.PushMatrix(); gl.BindTexture(OpenGL.GL_TEXTURE_2D, textures[(int)TextureObjects.Wood]); //IZABERI DRVO gl.MatrixMode(OpenGL.GL_TEXTURE); gl.LoadIdentity(); //UCITAJ PRAZNU TEXTURE MATRICU, DA SE PONISTE TRANSFORMACIJE OD RANIEJ AKO IH IMA gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.Translate(200, 20, 0); gl.Rotate(holderRotation, 0, 0, 1);//ROTIRANJE PRILIKOM ANIMACIJE, U SUPROTNOM JE holderRotation 0 gl.Rotate(-90f, 0f, 0f); Cylinder cil = new Cylinder(); cil.TextureCoords = true; cil.NormalGeneration = Normals.Smooth; cil.BaseRadius = 70; cil.Slices = 4; cil.Height = 80; cil.CreateInContext(gl); cil.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); #endregion #region Tekst gl.PushMatrix(); gl.Viewport(0, 0, m_width / 2, m_height / 2); //donji desni ugao gl.DrawText3D("Helvetica", 14, 0, 0, ""); gl.DrawText(Sirina_prozora - 250, 100, 1.0f, 1.0f, 0.0f, "Helvetica ", 14, "Predmet: Racunarska grafika"); gl.DrawText(Sirina_prozora - 250, 80, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Sk.god: 2019/20."); gl.DrawText(Sirina_prozora - 250, 60, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Ime: Veljko"); gl.DrawText(Sirina_prozora - 250, 40, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Prezime: Vukovic"); gl.DrawText(Sirina_prozora - 250, 20, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Sifra zad: 13.1"); gl.DrawText(Sirina_prozora - 250, 100, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "_______________________"); gl.DrawText(Sirina_prozora - 250, 80, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "______________"); gl.DrawText(Sirina_prozora - 250, 60, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "________"); gl.DrawText(Sirina_prozora - 250, 40, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "______________"); gl.DrawText(Sirina_prozora - 250, 20, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "___________"); gl.PopMatrix(); #endregion gl.PopMatrix(); // Oznaci kraj iscrtavanja gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); // gl.Scale(3.5f, 3.5f, 3.5f); gl.PushMatrix(); SetupLighting(gl); // gl.Translate(0.0f, 1.0f, -m_sceneDistance); gl.Translate(0.0f, 1.0f, m_sceneDistance); gl.Rotate(m_xRotation, 1.0f, 0.0f, 0.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); //faza 2 : tacka 6 gl.LookAt(1.0f, 1.0f, 4.0f, 0.0f, 0.0f, 0.0f, 0.0f, 5.0f, 0.0f); //postolje gl.PushMatrix(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Translate(0.0f, visinaPodloge, 0.0f); gl.Rotate(180, 0, 0); cylinder.Height = 1; cylinder.BaseRadius = 3.0f; cylinder.TopRadius = 3.0f; gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(0.2265625f, 0f, 0.0f); gl.Rotate(-90f, 0f, 0f); cylinder.CreateInContext(gl); gl.FrontFace(OpenGL.GL_CCW); cylinder.Render(gl, RenderMode.Render); //zatvara se postolje gl.PushMatrix(); // gl.Translate(0.0f, 0.0f, 4.0f); gl.Rotate(0.0f, 180.0f, 0.0f); Disk disk = new Disk(); gl.Color(0.2265625f, 0f, 0.0f); disk.InnerRadius = 0; disk.OuterRadius = 3.0f; disk.CreateInContext(gl); // faza 2 : tacka 5 gl.FrontFace(OpenGL.GL_CCW); disk.Render(gl, RenderMode.Render); gl.PopMatrix(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); //sto gl.PushMatrix(); gl.Translate(0.0f, visinaTable, 0.0f); gl.Scale(3.5f, 0.5f, 3.5f); gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Color(0.30859375f, 0.1484375f, 0.07421875f); // faza 2 : tacka 4 gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Wood]); gl.FrontFace(OpenGL.GL_CCW); cube.Render(gl, RenderMode.Render); gl.PopMatrix(); gl.PushMatrix(); Cube c = new Cube(); gl.Translate(0.0f, -5.0f, 0.0f); gl.Scale(0.5f, visinaStola, 0.5f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Wood]); gl.FrontFace(OpenGL.GL_CCW); c.Render(gl, RenderMode.Render); gl.PopMatrix(); //ono dole, hehe gl.PushMatrix(); Cube s = new Cube(); gl.Translate(0.0f, visinaPostolja, 0.0f); gl.Scale(3.5f, 0.4, 3.5f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Wood]); gl.FrontFace(OpenGL.GL_CCW); s.Render(gl, RenderMode.Render); gl.PopMatrix(); //tepih? gl.PushMatrix(); gl.Translate(5.0f, visinaTepiha, 5.0f); gl.Rotate(-90.0f, 180.0f, 0.0f); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.Carpet]); gl.Begin(OpenGL.GL_QUADS); gl.TexCoord(1.0f, 0.0f); gl.Vertex(0.0f, 0.0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(0.0f, 5.0f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(5.0f, 5.0f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(5.0f, 0.0f); gl.End(); gl.Begin(OpenGL.GL_QUADS); gl.TexCoord(1.0f, 0.0f); gl.Vertex(0.0f, 5.0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(0.0f, 10.0f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(5.0f, 10.0f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(5.0f, 5.0f); gl.End(); gl.Begin(OpenGL.GL_QUADS); gl.TexCoord(1.0f, 0.0f); gl.Vertex(5.0f, 5.0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(5.0f, 10.0f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(10.0f, 10.0f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(10.0f, 5.0f); gl.End(); gl.Begin(OpenGL.GL_QUADS); gl.TexCoord(1.0f, 0.0f); gl.Vertex(5.0f, 0.0f); gl.TexCoord(1.0f, 1.0f); gl.Vertex(5.0f, 5.0f); gl.TexCoord(0.0f, 1.0f); gl.Vertex(10.0f, 5.0f); gl.TexCoord(0.0f, 0.0f); gl.Vertex(10.0f, 0.0f); gl.End(); // gl.Enable(OpenGL.GL_CULL_FACE); gl.PopMatrix(); gl.PushMatrix(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Translate(0.0f, visinaMikrotalasne, 0.0f); gl.Scale(scale_x, scale_x, scale_x); gl.FrontFace(OpenGL.GL_CCW); m_scene.Draw(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); // crtanje pljeskavice gl.PushMatrix(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Translate(hranaX, visinaHrane, hranaZ); //gl.Translate(5.0f, 0.0f, 0.0f); gl.Scale(scale_x, scale_x, scale_x); gl.PushMatrix(); gl.Rotate(0.0f, rotacijaHrane, 0.0f); gl.PopMatrix(); m_scene2.Draw(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); gl.PushMatrix(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Translate(vrataX, visinaVrati, vrataZ); gl.Rotate(0.0f, vrataY, 0.0f); gl.Scale(scale_x, scale_x, scale_x); m_scene_door.Draw(); gl.Enable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); gl.PopMatrix(); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.Viewport(0, m_width / 2, m_width / 2, m_height / 2); gl.PushMatrix(); gl.Translate(2.0f, -3.5f, 0.0f); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Ortho2D(-15.0f, 15.0f, -12.0f, 12.0f); gl.MatrixMode(OpenGL.GL_MODELVIEW); //poruka gl.PushMatrix(); gl.Color(1.0f, 1f, 0.0f); gl.Translate(1.5f, -4.0f, 0.0f); gl.DrawText3D("Times New Roman Bold", 10, 0.0f, 0.0f, "Predmet: Racunarska grafika"); gl.Translate(-11.5f, -1.0f, 0.0f); gl.DrawText3D("Times New Roman Bold", 10, 1f, 1f, "Sk.god: 2017/18."); gl.Translate(-6.370f, -1.0f, 0.0f); gl.DrawText3D("Times New Roman Bold", 10, 1f, 1f, "Ime: Vladimir"); gl.Translate(-5.55f, -1.0f, 0.0f); gl.DrawText3D("Times New Roman Bold", 10, 1f, 1f, "Prezime: Jovicic"); gl.Translate(-6.3f, -1.10f, 0.0f); gl.DrawText3D("Times New Roman Bold", 10, 1f, 1f, "Sifra zad: 16.1"); gl.PopMatrix(); gl.Viewport(0, 0, m_width, m_height); gl.MatrixMode(OpenGL.GL_PROJECTION); gl.LoadIdentity(); gl.Perspective(45f, (float)m_width / m_height, 1.0f, 20000f); gl.MatrixMode(OpenGL.GL_MODELVIEW); // gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.Disable(OpenGL.GL_TEXTURE_2D); gl.PopMatrix(); gl.Flush(); }
/// <summary> /// Iscrtavanje OpenGL kontrole. /// </summary> public void Draw(OpenGL gl) { gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.Viewport(0, 0, m_width, m_height); gl.PushMatrix(); gl.LookAt(-m_sceneDistance, 0f, 0f, 0f, 0f, 0, 0f, 1f, 0f);//sa leve strane je - deo X-ose // gl.Translate(0.0f, 0.0f, -m_sceneDistance); gl.Rotate(m_xRotation, 0.0f, 0.0f, 1.0f); gl.Rotate(m_yRotation, 0.0f, 1.0f, 0.0f); ///REFLEKTOR float[] rc = new float[] { r, g, b, 1.0f }; //BOJA REGLEKTORA gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_AMBIENT, rc); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_DIFFUSE, rc); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPECULAR, rc); gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_POSITION, new float[] { 0, 100, 195, 1.0f }); //svetlo iznad mola gl.Light(OpenGL.GL_LIGHT1, OpenGL.GL_SPOT_DIRECTION, new float[] { 0.0f, -1.0f, 0.0f }); //sija na dole //podloga vode gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.WATER]); //VODA ZA PODLOGU //bindujemo teksturu gl.MatrixMode(OpenGL.GL_TEXTURE); // UINUTAR TEXT MATRICE SE SKALIRA ,mora da bi mogle transformacije sa teksturama gl.PushMatrix(); //unutar texture space se sad sve ovo radi gl.Scale(10, 10, 1); gl.MatrixMode(OpenGL.GL_MODELVIEW); //vracamo na model view gl.PushMatrix(); //gl.Translate(0.0f, 0.0f, -120f); gl.Begin(OpenGL.GL_QUADS); gl.Normal(0f, 1f, 0f); //normala za podlogu gl.Color(0.0f, 0.0f, 1.0f); gl.TexCoord(0f, 0f); //koordinate teksture za podlogu gl.Vertex(200f, -0.5f, -200f); gl.TexCoord(0f, 1f); gl.Vertex(-200f, -0.5f, -200f); gl.TexCoord(1f, 1f); gl.Vertex(-200f, -0.5f, 200f); gl.TexCoord(1f, 0f); gl.Vertex(200f, -0.5f, 200f); gl.End(); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_TEXTURE); gl.PopMatrix(); gl.MatrixMode(OpenGL.GL_MODELVIEW); gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.WOOD]); //drvo za mol i stubove if (Modulate) { gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_MODULATE); } gl.Translate(0.0f, 0.0f, 120f); //cube Cube cube = new Cube(); gl.PushMatrix(); gl.Color(0.5f, 0.5f, 0.5f); gl.Translate(0.0f, 20.0f, 70.0f); gl.Scale(30.0f, 5.0f, 30.0f); //dimenzije cube.Render(gl, RenderMode.Render); gl.PopMatrix(); //gl.Scale(size, size, size); //dimenzije //cilindar1 gl.PushMatrix(); gl.Translate(-20.0f, -2.0f, 90.0f); gl.Translate(0, 25, 0); //I VRATI ZA 25 NA GORE DA GORNNJA IVICA BUDE ISPOD KOCKE (3) gl.Scale(size, size, size); //SKLIARA SE ZA ONO SA SLEJDERA (2) gl.Translate(0, -25, 0); //VISINA IM JE 25, ZATO -25 DA BUDE GORANJA IVICA NA 0 JER TADA SKALIRANJE SIRI STUB SAMO DOLE (1) gl.Rotate(-90f, 0f, 0f); gl.Scale(5.0f, 5.0f, 5.0f); //dimenzije Cylinder cil = new Cylinder(); cil.TextureCoords = true;//KOORDIANTE TEKSTURA ZA CILINDRE cil.CreateInContext(gl); cil.BaseRadius = 0.5; cil.Height = 5; cil.TopRadius = 0.5; cil.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); //cilindar2 gl.PushMatrix(); gl.Translate(20.0f, -2.0f, 90.0f); gl.Translate(0, 25, 0); gl.Scale(size, size, size);//SKALIRANJE gl.Translate(0, -25, 0); gl.Rotate(-90f, 0f, 0f); gl.Scale(5.0f, 5.0f, 5.0f); //dimenzije cil.CreateInContext(gl); cil.BaseRadius = 0.5; cil.Height = 5; cil.TopRadius = 0.5; cil.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); //cilindar3 gl.PushMatrix(); gl.Translate(20.0f, -2.0f, 50.0f); gl.Translate(0, 25, 0); gl.Scale(size, size, size);//SKALIRANJE gl.Translate(0, -25, 0); gl.Rotate(-90f, 0f, 0f); gl.Scale(5.0f, 5.0f, 5.0f); //dimenzije cil.CreateInContext(gl); cil.BaseRadius = 0.5; cil.Height = 5; cil.TopRadius = 0.5; cil.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); //cilindar4 gl.PushMatrix(); gl.Translate(-20.0f, -2.0f, 50.0f); gl.Translate(0, 25, 0); gl.Scale(size, size, size);//SKALIRANJE gl.Translate(0, -25, 0); gl.Rotate(-90f, 0f, 0f); gl.Scale(5.0f, 5.0f, 5.0f); //dimenzije cil.CreateInContext(gl); cil.BaseRadius = 0.5; cil.Height = 5; cil.TopRadius = 0.5; cil.Render(gl, SharpGL.SceneGraph.Core.RenderMode.Render); gl.PopMatrix(); //cube stepenice(vrata) gl.BindTexture(OpenGL.GL_TEXTURE_2D, m_textures[(int)TextureObjects.METAL]); //metal za stepenice gl.PushMatrix(); gl.Translate(0.0f + shipOffsetX, 0.0f, 50.0f + shipOffsetZ); //pomera brod gl.Rotate(0, shipRotation, 0); Cube cubeStairs = new Cube(); gl.PushMatrix(); gl.Color(0.5f, 0.50f, 0.50f); gl.Translate(0.0f, stairsY, -53.0f); //poemri da se ivica poklopi sa brodom, stairsY KAD NEMA ANIMACIJE JE 40, TOKOM ANIMACIJE JE NA POCETKU -20 KASNIJE SE PODIZE gl.Rotate(-stairs, 1f, 0.0f, 0.0f); //ROTIRA ZA ONO SA SLAJDERA, TOKOM ANIMACIJE SE ISTO OVO MENJA gl.Scale(30.0f, 1.0f, 30.0f); //dimenzije gl.Translate(0, 1, 1); //pomeri se da bi se skalirao samo na gore u prema molu cube.Render(gl, RenderMode.Render); gl.PopMatrix(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_ADD); //za brod je stapanje ADD gl.Translate(-20.0f, 0f, 0.0f); //priblizi se brod molu gl.Color(0.5f, 0.50f, 0.50f); gl.Scale(0.2f, 0.32f, 0.32f); m_scene.Draw(); gl.TexEnv(OpenGL.GL_TEXTURE_ENV, OpenGL.GL_TEXTURE_ENV_MODE, OpenGL.GL_DECAL); //ZA OSTALO OPET VRATIMO NA DECAL gl.PopMatrix(); gl.PopMatrix(); // Oznaci kraj iscrtavanja //Tekst gl.PushMatrix(); gl.DrawText(m_width - 200, 90, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Predmet:Racunarska grafika"); gl.DrawText(m_width - 200, 90, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "_______________________"); gl.DrawText(m_width - 200, 70, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Sk.god: 2020/21."); gl.DrawText(m_width - 200, 70, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "______________"); gl.DrawText(m_width - 200, 50, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Ime: Maja "); gl.DrawText(m_width - 200, 50, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "________"); gl.DrawText(m_width - 200, 30, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Prezime: Dragojlovic"); gl.DrawText(m_width - 200, 30, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "________________"); gl.DrawText(m_width - 200, 10, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "Sifra zad: 10.1"); gl.DrawText(m_width - 200, 10, 1.0f, 1.0f, 0.0f, "Helvetica", 14, "____________"); gl.PopMatrix(); gl.Flush(); }