protected void DrawThumbFinger(int fingerPart) { switch (fingerPart) { case 1: GL.glRotated(-45, 0, 0, 1); GL.glColor3d(1, 1, 1); GLU.gluSphere(objShpere, 0.6, 50, 50); GL.glTranslated(0, 0.2, 0); GL.glRotated(-90, 1, 0, 0); GL.glColor3d(1, 0.8, 0.6); GLU.gluCylinder(objFinger, 0.5, 0.5, 1, 50, 50); GL.glRotated(90, 1, 0, 0); GL.glTranslated(0, 0.8, 0); GL.glRotated(45, 0, 0, 1); break; case 2: GL.glRotated(-45, 0, 0, 1); GL.glColor3d(1, 1, 1); GLU.gluSphere(objShpere, 0.6, 50, 50); GL.glTranslated(0, 0.2, 0); GL.glRotated(-90, 1, 0, 0); GL.glColor3d(1, 0.8, 0.6); GLU.gluCylinder(objFinger, 0.5, 0.5, 0.7, 50, 50); GL.glRotated(90, 1, 0, 0); GL.glTranslated(0, 0.6, 0); GL.glColor3d(1, 1, 1); GLU.gluSphere(objShpere, 0.5, 50, 50); GL.glRotated(45, 0, 0, 1); GL.glTranslated(-4.6, -1.8, 0); break; } }
public void draw_sun() { GL.glPushMatrix(); GL.glColor3d(1, 1, 1); GL.glEnable(GL.GL_TEXTURE_2D); GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[6]); quad = GLU.gluNewQuadric(); GLU.gluQuadricTexture(quad, 40); GL.glTranslatef(pos[0], pos[1], pos[2]); // rotating sun as well as all planets to Y axis GL.glTranslatef(0.0f, 0.0f + (float)-speed * 0.03f, 0.0f); //y - up down GL.glTranslatef(0.0f, 0.0f, 0.0f + (float)-speed * 0.01f); //z - back forward GL.glRotatef((float)moon, 0.0f, 1.0f, 0.0f); GLU.gluSphere(quad, 45, 1000, 1000); GL.glPopMatrix(); moon += 0.04f; }
public void draw_moon() { GL.glPushMatrix(); GL.glColor3d(1, 1, 1); GL.glEnable(GL.GL_TEXTURE_2D); GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[1]); quad = GLU.gluNewQuadric(); GLU.gluQuadricTexture(quad, 40); GL.glTranslatef(-200, 200, -300); // rotating moon as well as all planets to Y axis GL.glTranslatef(0.0f + (float)speed * 0.01f, 0.0f, 0.0f); GL.glTranslatef(0.0f, 0.0f + (float)speed * 0.01f, 0.0f); GL.glRotatef((float)moon++ *0.5f, 1.0f, 1.0f, 0.0f); GLU.gluSphere(quad, 18, 200, 200); GL.glPopMatrix(); }
void drawFloor() { GL.glEnable(GL.GL_LIGHTING); GL.glPushMatrix(); GL.glColor3d(0, 1, 0); GL.glTranslated(0, -0.01, 0); float[] grass_ambuse = { 0.03f, 0.56f, 0.19f, 1.0f }; float[] grass_specular = { 0.0f, 0.0f, 0.0f, 1.0f }; float[] grass_shininess = { 10 }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, grass_ambuse); GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, grass_specular); GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, grass_shininess); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(0, 1, 0); GL.glVertex3f(-200, 0, -200); GL.glVertex3f(-200, 0, 200); GL.glVertex3f(200, 0, 200); GL.glVertex3f(200, 0, -200); GL.glEnd(); GL.glDisable(GL.GL_LIGHTING); GL.glPopMatrix(); }
public override void DrawToy(double[] translateCoords, double[] rotateCoords, bool isShadow) { GL.glTranslated(translateCoords[0], translateCoords[1], translateCoords[2]); if (!isShadow) { GL.glColor3d(1, 1, 1); } else { GL.glDisable(GL.GL_TEXTURE_2D); } GL.glRotated(rotateCoords[0], rotateCoords[1], rotateCoords[2], rotateCoords[3]); if (isShadow) { GL.glCallList(SHADOW_LIST); } else { GL.glCallList(LIST); } GL.glRotated(-rotateCoords[0], rotateCoords[1], rotateCoords[2], rotateCoords[3]); GL.glTranslated(-translateCoords[0], -translateCoords[1], -translateCoords[2]); GL.glDisable(GL.GL_TEXTURE_2D); }
protected void DrawHand() { GL.glColor3d(1, 0.8, 0.6); GL.glBegin(GL.GL_QUADS); //Near GL.glVertex3d(-3.0, 2.0, 0.5); GL.glVertex3d(3.0, 2.0, 0.5); GL.glVertex3d(3.0, -2.0, 0.5); GL.glVertex3d(-3.0, -2.0, 0.5); //Far GL.glVertex3d(-3.0, 2.0, -0.5); GL.glVertex3d(3.0, 2.0, -0.5); GL.glVertex3d(3.0, -2.0, -0.5); GL.glVertex3d(-3.0, -2.0, -0.5); //Left GL.glVertex3d(-3.0, 2.0, -0.5); GL.glVertex3d(-3.0, 2.0, 0.5); GL.glVertex3d(-3.0, -2.0, 0.5); GL.glVertex3d(-3.0, -2.0, -0.5); //Right GL.glVertex3d(3.0, 2.0, 0.5); GL.glVertex3d(3.0, 2.0, -0.5); GL.glVertex3d(3.0, -2.0, -0.5); GL.glVertex3d(3.0, -2.0, 0.5); GL.glEnd(); }
void CreateApple() { GL.glColor3d(1, 0, 0); GL.glNewList(APPLE_LIST, GL.GL_COMPILE); GL.glPushMatrix(); GL.glRotatef(-90, 1, 0, 0); GLUT.glutSolidTorus(0.2, 0.1, 10, 10); GL.glPopMatrix(); GL.glEndList(); }
void DrawObjects(bool isForShades, int c) { if (!isForShades) { GL.glColor3d(1, 0, 0); } else if (c == 1) { GL.glColor3d(0.5, 0.5, 0.5); } else { GL.glColor3d(0.8, 0.8, 0.8); } GL.glRotated(90, 1, 0, 0); if (!isForShades) { GL.glColor3d(1, 1, 1); } else if (c == 1) { GL.glColor3d(0.5, 0.5, 0.5); } else { GL.glColor3d(0.8, 0.8, 0.8); } if ((c == 1) && (isForShades)) { GL.glTranslated(0, 0, 0); GL.glScaled(0.027, 0.027, 0.027); GL.glColor3d(0, 0, 0); ch1.DrawModel2(); GL.glTranslated(0, 0, -200); GL.glScaled(0.6, 0.6, 0.6); ch.DrawModel2(); } else if ((c == 1) && (!isForShades)) { GL.glTranslated(0, 0, 0); GL.glScaled(0.027, 0.027, 0.027); ch1.DrawModel(); GL.glTranslated(0, 0, -200); GL.glScaled(0.6, 0.6, 0.6); ch.DrawModel(); } }
void DrawTexturedCube() { GL.glEnable(GL.GL_TEXTURE_2D); GL.glDisable(GL.GL_BLEND); GL.glColor3d(1, 1, 1); GL.glDisable(GL.GL_LIGHTING); // front GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[0]); GL.glBegin(GL.GL_QUADS); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(300.0f, -0.01f, 300.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(-300.0f, -0.01f, 300.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(-300.0f, 300.0f, 300.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(300.0f, 300.0f, 300.0f); GL.glEnd(); // back GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[0]); GL.glBegin(GL.GL_QUADS); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-300.0f, -0.01f, -300.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(300.0f, -0.01f, -300.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(300.0f, 300.0f, -300.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-300.0f, 300.0f, -300.0f); GL.glEnd(); // left GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[2]); GL.glBegin(GL.GL_QUADS); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-300.0f, -0.01f, 300.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(-300.0f, -0.01f, -300.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(-300.0f, 300.0f, -300.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-300.0f, 300.0f, 300.0f); GL.glEnd(); // right GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[3]); GL.glBegin(GL.GL_QUADS); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(300.0f, -0.01f, -300.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(300.0f, -0.01f, 300.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(300.0f, 300.0f, 300.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(300.0f, 300.0f, -300.0f); GL.glEnd(); // top GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[4]); GL.glBegin(GL.GL_QUADS); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-300.0f, 300.0f, -300.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(300.0f, 300.0f, -300.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(300.0f, 300.0f, 300.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-300.0f, 300.0f, 300.0f); GL.glEnd(); GL.glDisable(GL.GL_TEXTURE_2D); GL.glEnable(GL.GL_BLEND); }
void drawStar(Star star, bool isForShade) { if (star.toDraw == true) { GL.glPushMatrix(); GL.glTranslatef(0f, 0f, 1f); GL.glTranslatef(star.X + (float)xExisOrigin, star.Y + (float)yExisOrigin, 3 - Math.Abs(2f * (float)Math.Cos(ballZMovement))); GL.glRotatef(ballZtranslate, 0, 0, 1f); if (!isForShade) { GL.glEnable(GL.GL_TEXTURE_2D); GL.glColor3f(1.0f, 1.0f, 1.0f); GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[6]); GL.glEnable(GL.GL_TEXTURE_GEN_S); GL.glEnable(GL.GL_TEXTURE_GEN_T); GL.glTexGeni(GL.GL_S, GL.GL_TEXTURE_GEN_MODE, (int)GL.GL_SPHERE_MAP); GL.glTexGeni(GL.GL_T, GL.GL_TEXTURE_GEN_MODE, (int)GL.GL_SPHERE_MAP); } else { GL.glColor3d(0.2, 0.2, 0.2); } for (int i = 0; i < 5; i++) { GL.glRotatef(72, 1, 0, 0); GL.glBegin(GL.GL_QUADS); GL.glVertex3f(0f, 0f, 0); GL.glVertex3f(0f, (float)Math.Sin(36), 1); GL.glVertex3f(0f, 0, 3f); GL.glVertex3f(0f, -(float)Math.Sin(36), 1); GL.glEnd(); } if (!isForShade) { GL.glDisable(GL.GL_TEXTURE_GEN_S); GL.glDisable(GL.GL_TEXTURE_GEN_T); GL.glDisable(GL.GL_TEXTURE_2D); } GL.glPopMatrix(); } }
protected void DrawLightSource() { if (enableLightSource) { GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, lightPosition); GL.glEnable(GL.GL_LIGHTING); GL.glEnable(GL.GL_COLOR_MATERIAL); GL.glTranslated(lightPosition[0], lightPosition[1], lightPosition[2]); GL.glColor3d(1, 1, 0); GLUT.glutSolidSphere(0.5, 50, 50); GL.glTranslated(-lightPosition[0], -lightPosition[1], -lightPosition[2]); } else { GL.glDisable(GL.GL_LIGHTING); } }
void drawFloorTextured() { GL.glEnable(GL.GL_TEXTURE_2D); GL.glDisable(GL.GL_BLEND); GL.glColor3d(1, 1, 1); GL.glDisable(GL.GL_LIGHTING); GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[5]); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(0, 1, 0); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-200, -0.01f, 200); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(200, -0.01f, 200); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(200, -0.01f, -200); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-200, -0.01f, -200); GL.glEnd(); GL.glDisable(GL.GL_TEXTURE_2D); GL.glEnable(GL.GL_BLEND); GL.glEnable(GL.GL_LIGHTING); }
void DrawFiguresRef() { GL.glPushMatrix(); // must be in scene to be reflected too GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, pos); //Draw Light Source GL.glDisable(GL.GL_LIGHTING); GL.glTranslatef(pos[0], pos[1], pos[2]); //Yellow Light source GL.glColor3f(1, 1, 0); GL.glTranslatef(-pos[0], -pos[1], -pos[2]); //projection line from source to plane GL.glBegin(GL.GL_LINES); GL.glColor3d(0.5, 0.5, 0); GL.glVertex3d(pos[0], pos[1], 0); GL.glVertex3d(pos[0], pos[1], pos[2]); GL.glEnd(); GL.glEnable(GL.GL_LIGHTING); GL.glRotated(intOptionB, 0, 0, 1); GL.glColor3f(1, 0, 0); GL.glTranslated(0, -0.5, 1); GL.glRotated(intOptionC, 1, 1, 1); GL.glRotated(-intOptionC, 1, 1, 1); GL.glTranslated(0, -0.5, -1); GL.glTranslated(1, 2, 1.5); GL.glRotated(90, 1, 0, 0); GL.glColor3d(0, 1, 1); GL.glRotated(intOptionB, 1, 0, 0); GL.glRotated(-intOptionB, 1, 0, 0); GL.glRotated(-90, 1, 0, 0); GL.glTranslated(-1, -2, -1.5); GL.glRotated(intOptionB, 0, 0, 1); GL.glPopMatrix(); }
protected void DrawSingleFinger(int fingerPart, double returnToZero) { switch (fingerPart) { case 1: GL.glColor3d(1, 1, 1); GLU.gluSphere(objShpere, 0.6, 50, 50); GL.glTranslated(0, 0.2, 0); GL.glRotated(-90, 1, 0, 0); GL.glColor3d(1, 0.8, 0.6); GLU.gluCylinder(objFinger, 0.5, 0.5, 1, 50, 50); GL.glRotated(90, 1, 0, 0); GL.glTranslated(0, 0.8, 0); break; case 2: GL.glColor3d(1, 1, 1); GLU.gluSphere(objShpere, 0.6, 50, 50); GL.glTranslated(0, 0.2, 0); GL.glRotated(-90, 1, 0, 0); GL.glColor3d(1, 0.8, 0.6); GLU.gluCylinder(objFinger, 0.5, 0.5, 0.7, 50, 50); GL.glRotated(90, 1, 0, 0); GL.glTranslated(0, 0.8, 0); break; case 3: GL.glColor3d(1, 1, 1); GLU.gluSphere(objShpere, 0.6, 50, 50); GL.glTranslated(0, 0.2, 0); GL.glRotated(-90, 1, 0, 0); GL.glColor3d(1, 0.8, 0.6); GLU.gluCylinder(objFinger, 0.5, 0.5, 0.7, 50, 50); GL.glRotated(90, 1, 0, 0); GL.glTranslated(0, 0.6, 0); GL.glColor3d(1, 1, 1); GLU.gluSphere(objShpere, 0.5, 50, 50); GL.glTranslated(-returnToZero, -5.1, 0); break; } }
public override void DrawToy(double[] translateCoords, double[] rotateCoords, bool isShadow) { float[] material = new float[3]; material[0] = 0.0215f; material[1] = 0.1745f; material[2] = 0.0215f; GL.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, material); material[0] = 0.07568f; material[1] = 0.61424f; material[2] = 0.07568f; GL.glMaterialfv(GL.GL_FRONT, GL.GL_DIFFUSE, material); material[0] = 0.633f; material[1] = 0.727811f; material[2] = 0.633f; GL.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, material); GL.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, 5f); GL.glTranslated(translateCoords[0], translateCoords[1], translateCoords[2]); if (!isShadow) { GL.glColor3d(1, 1, 1); } else { GL.glDisable(GL.GL_TEXTURE_2D); } GL.glRotated(rotateCoords[0], rotateCoords[1], rotateCoords[2], rotateCoords[3]); GL.glScaled(10, 10, 10); if (isShadow) { GL.glCallList(SHADOW_LIST); } else { GL.glCallList(LIST); } GL.glScaled(0.1, 0.1, 0.1); GL.glRotated(-rotateCoords[0], rotateCoords[1], rotateCoords[2], rotateCoords[3]); GL.glTranslated(-translateCoords[0], -translateCoords[1], -translateCoords[2]); GL.glDisable(GL.GL_TEXTURE_2D); }
void DrawFigures() { skyBox.DrawSkyBox(); MainLightSource.DrawLightSource(new float[] { 1, 1, 0 }); StaticRedLightSource.DrawLightSource(new float[] { 1, 0, 0 }); StaticBlueLightSource.DrawLightSource(new float[] { 0, 0, 1 }); //Banner Light source GL.glTranslatef(bannerLightPos[0], bannerLightPos[1], bannerLightPos[2]); Random r = new Random(); GL.glColor3d(r.NextDouble(), r.NextDouble(), r.NextDouble()); GLUT.glutSolidSphere(0.1, 8, 8); GL.glTranslatef(-bannerLightPos[0], -bannerLightPos[1], -bannerLightPos[2]); GL.glEnd(); GL.glDisable(GL.GL_DEPTH_TEST); GL.glDisable(GL.GL_LIGHTING); // Start Drawing Floor Shadow GL.glPushMatrix(); GL.glEnable(GL.GL_BLEND); GL.glColor4d(0, 0, 0, 0.25); mainShadowManager.MakeShadowMatrix(mainShadowManager.Ground, cubeXform); GL.glMultMatrixf(cubeXform); m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, 6 }, true); m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, -6 }, true); GL.glCallList(SHADOW_LIST); //GL.glColor4d(0.05, 0, 0, 0.25); //redShadowManager.MakeShadowMatrix(redShadowManager.Ground, cubeXform); //GL.glMultMatrixf(cubeXform); //m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, 6 }, true); //m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, -6 }, true); //GL.glCallList(SHADOW_LIST); //GL.glColor4d(0, 0, 0.05, 0.25); //blueShadowManager.MakeShadowMatrix(blueShadowManager.Ground, cubeXform); //GL.glMultMatrixf(cubeXform); //m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, 6 }, true); //m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, -6 }, true); //GL.glCallList(SHADOW_LIST); GL.glDisable(GL.GL_BLEND); GL.glPopMatrix(); //for (int i = 0; i < 4; i++) //{ // GL.glPushMatrix(); // shadowManager.MakeShadowMatrix(shadowManager.Walls[i], cubeXform); // GL.glMultMatrixf(cubeXform); // m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, 6 }, true); // m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, -6 }, true); // GL.glCallList(SHADOW_LIST); // GL.glPopMatrix(); //} //End Drawing Floor Shadow GL.glEnable(GL.GL_DEPTH_TEST); GL.glEnable(GL.GL_COLOR_MATERIAL); GL.glEnable(GL.GL_LIGHT0); GL.glEnable(GL.GL_LIGHT1); GL.glEnable(GL.GL_LIGHT2); GL.glEnable(GL.GL_LIGHT3); GL.glEnable(GL.GL_LIGHTING); GL.glPushMatrix(); m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, 6 }, false); m_SideMachine.DrawSideMachines(new double[3] { 0, -0.4, -6 }, false); //toyCar.DrawToy(new double[3] { 1.4, 0.3, 0 }, new double[4] { 40, 0, 1, 0 }, false); GL.glCallList(CLAW_MACHINE_LIST); GL.glPopMatrix(); GL.glDisable(GL.GL_COLOR_MATERIAL); GL.glDisable(GL.GL_LIGHTING); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
/********************************************************************************************************** * * * * MAIN DRAW FUNCTION * * * **********************************************************************************************************/ public void Draw() { if (m_uint_DC == 0 || m_uint_RC == 0) { return; } GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT | GL.GL_STENCIL_BUFFER_BIT); GL.glViewport(0, 0, Width, Height); GL.glLoadIdentity(); GLU.gluLookAt(ScrollValue[0], ScrollValue[1], ScrollValue[2], ScrollValue[3], ScrollValue[4], ScrollValue[5], ScrollValue[6], ScrollValue[7], ScrollValue[8]); GL.glRotatef(xAngle, 1.0f, 0.0f, 0.0f); GL.glRotatef(yAngle, 0.0f, 1.0f, 0.0f); GL.glRotatef(zAngle, 0.0f, 0.0f, 1.0f); GL.glTranslatef(xShift, yShift, zShift); pos[0] = light_position[0] = ScrollValue[9]; pos[1] = light_position[1] = ScrollValue[10]; pos[2] = light_position[2] = ScrollValue[11]; pos[3] = light_position[3] = 0; GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, light_ambient); GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, light_diffuse); GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, light_specular); GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_position); GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); GL.glEnable(GL.GL_LIGHT0); /* * * Reflection * */ GL.glEnable(GL.GL_BLEND); GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); if (reflectionOn) { //draw only to STENCIL buffer GL.glEnable(GL.GL_STENCIL_TEST); GL.glStencilOp(GL.GL_REPLACE, GL.GL_REPLACE, GL.GL_REPLACE); GL.glStencilFunc(GL.GL_ALWAYS, 1, 0xFFFFFFFF); GL.glColorMask((byte)GL.GL_FALSE, (byte)GL.GL_FALSE, (byte)GL.GL_FALSE, (byte)GL.GL_FALSE); GL.glDisable(GL.GL_DEPTH_TEST); drawLake(); // restore regular settings GL.glColorMask((byte)GL.GL_TRUE, (byte)GL.GL_TRUE, (byte)GL.GL_TRUE, (byte)GL.GL_TRUE); GL.glEnable(GL.GL_DEPTH_TEST); // reflection is drawn only where STENCIL buffer value equal to 1 GL.glStencilFunc(GL.GL_EQUAL, 1, 0xFFFFFFFF); GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP); /* * * draw reflected scene * */ GL.glEnable(GL.GL_LIGHTING); for (currentTree = 0; currentTree < numOfTrees; currentTree++) { GL.glPushMatrix(); //GL.glTranslated(randX[currentTree], 0,randZ[currentTree]); GL.glTranslated(locationX[currentTree], 0, locationZ[currentTree]); GL.glRotated(locationRotateY[currentTree], 0, 1, 0); GL.glScalef(1, -1, 1); //swap on Z axis if (scullFaceOn) { GL.glEnable(GL.GL_CULL_FACE); GL.glCullFace(GL.GL_BACK); GL.glCallList(TREE_LIST + currentTree); GL.glCullFace(GL.GL_FRONT); GL.glCallList(TREE_LIST + currentTree); GL.glDisable(GL.GL_CULL_FACE); } else { GL.glCallList(TREE_LIST + currentTree); } GL.glPopMatrix(); } drawLake(); GL.glStencilFunc(GL.GL_NOTEQUAL, 1, 0xFFFFFFFF); GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP); // really draw floor //( half-transparent ( see its color's alpha byte))) // in order to see reflected objects //GL.glDepthMask((byte)GL.GL_FALSE); GL.glDepthMask((byte)GL.GL_TRUE); if (!textureOn) { drawFloor(); } else { drawFloorTextured(); DrawTexturedCube(); } GL.glDisable(GL.GL_LIGHTING); GL.glDisable(GL.GL_STENCIL_TEST); } else { GL.glEnable(GL.GL_LIGHTING); drawLake(); if (!textureOn) { drawFloor(); } else { drawFloorTextured(); DrawTexturedCube(); } GL.glDisable(GL.GL_LIGHTING); } DrawLight(); /* * Draw trees */ GL.glEnable(GL.GL_LIGHTING); GL.glPushMatrix(); for (currentTree = 0; currentTree < numOfTrees; currentTree++) { GL.glPushMatrix(); //GL.glTranslated(randX[currentTree], 0, randZ[currentTree]); GL.glTranslated(locationX[currentTree], 0, locationZ[currentTree]); GL.glRotated(locationRotateY[currentTree], 0, 1, 0); GL.glCallList(TREE_LIST + currentTree); GL.glPopMatrix(); } GL.glPopMatrix(); /* * Draw trees shadows */ GL.glDisable(GL.GL_LIGHTING); GL.glColor3d(0, 0, 0); if (shadowOn) { GL.glPushMatrix(); MakeShadowMatrix(ground); GL.glMultMatrixf(cubeXform); for (currentTree = 0; currentTree < numOfTrees; currentTree++) { GL.glPushMatrix(); //GL.glTranslated(randX[currentTree], 0, randZ[currentTree]); GL.glTranslated(locationX[currentTree], 0, locationZ[currentTree]); GL.glRotated(locationRotateY[currentTree], 0, 1, 0); GL.glCallList(TREE_LIST + currentTree); GL.glPopMatrix(); } GL.glPopMatrix(); } GL.glFlush(); WGL.wglSwapBuffers(m_uint_DC); }
public void Draw() { if (m_uint_DC == 0 || m_uint_RC == 0) { return; } GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT | GL.GL_STENCIL_BUFFER_BIT); //TRIVIAL GL.glViewport(0, 0, Width, Height); GL.glLoadIdentity(); GL.glEnable(GL.GL_NORMALIZE); GLU.gluLookAt(ScrollValue[0], ScrollValue[1], ScrollValue[2], ScrollValue[3], ScrollValue[4], ScrollValue[5], ScrollValue[6], ScrollValue[7], ScrollValue[8]); pos[0] = light_position[0] = ScrollValue[9]; pos[1] = light_position[1] = ScrollValue[10]; pos[2] = light_position[2] = ScrollValue[11]; pos[3] = light_position[3] = 0; light_position_reflected[0] = -ScrollValue[9]; light_position_reflected[1] = -ScrollValue[10]; light_position_reflected[2] = -ScrollValue[11]; light_position[3] = 0; GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_position); GL.glEnable(GL.GL_LIGHT0); GL.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, light_position); GL.glEnable(GL.GL_LIGHT1); //beascender look angle GL.glTranslatef(0.0f, -50.0f, -340.0f); //how far from the lake GL.glTranslatef(0.0f, 1.0f, 0.0f); //height from the lake GL.glRotatef(25, 1.0f, 0, 0); //look at lake angle GL.glRotatef(xAngle, 1.0f, 0.0f, 0.0f); if (checkBox) { GL.glRotatef((float)spirala * 0.018f, 0.0f, 1.0f, 0.0f); GL.glRotatef((float)speed * 0.008f, 1.0f, 1.0f, 0.0f); GL.glRotatef((float)speed * 0.008f, 0.0f, 1.0f, 1.0f); GL.glRotatef((float)speed * -0.005f, 1.0f, 0.0f, 1.0f); } GL.glRotatef(yAngle, 0.0f, 1.0f, 0.0f); GL.glRotatef(zAngle, 0.0f, 0.0f, 1.0f); if (checkBox) { GL.glTranslatef(xShift, yShift + (float)-speed * 0.18f, zShift); } GL.glTranslatef(xShift, yShift, zShift); /* * * Reflection drawing area start here * */ GL.glPushMatrix(); GL.glEnable(GL.GL_BLEND); GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); //draw only to STENCIL buffer GL.glEnable(GL.GL_STENCIL_TEST); GL.glStencilOp(GL.GL_REPLACE, GL.GL_REPLACE, GL.GL_REPLACE); GL.glStencilFunc(GL.GL_ALWAYS, 1, 0xFFFFFFFF); GL.glColorMask((byte)GL.GL_FALSE, (byte)GL.GL_FALSE, (byte)GL.GL_FALSE, (byte)GL.GL_FALSE); GL.glDisable(GL.GL_DEPTH_TEST); Drawlake();//Draw area when we want to see reflect // restore regular seascendings GL.glColorMask((byte)GL.GL_TRUE, (byte)GL.GL_TRUE, (byte)GL.GL_TRUE, (byte)GL.GL_TRUE); GL.glEnable(GL.GL_DEPTH_TEST); // reflection is drawn only where STENCIL buffer value equal to 1 GL.glStencilFunc(GL.GL_EQUAL, 1, 0xFFFFFFFF); GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP); /* * draw reflected scene */ GL.glScalef(1, -1, 1); //swap axes down GL.glPushMatrix(); DrawTexturedCube(); //reflected penguin drawPenguin(); draw_sun(); draw_moon(); GL.glPopMatrix(); GL.glPopMatrix(); GL.glEnable(GL.GL_LIGHTING); Drawlake(); GL.glDisable(GL.GL_LIGHTING); GL.glStencilFunc(GL.GL_NOTEQUAL, 1, 0xFFFFFFFF); GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP); GL.glDepthMask((byte)GL.GL_FALSE); GL.glDepthMask((byte)GL.GL_TRUE); drawFloorTextured(); draw_sun(); draw_moon(); GL.glDisable(GL.GL_STENCIL_TEST); DrawTexturedCube(); //SKY BOX /* * * paint main scene area - start here * */ // drawaxe(); GL.glShadeModel(GL.GL_FLAT); GL.glEnable(GL.GL_LIGHTING); //Main Penguin drawPenguin(); ///////// GL.glDisable(GL.GL_LIGHTING); /* * * Draw shadows area - start here * */ GL.glDisable(GL.GL_LIGHTING); GL.glPushMatrix(); MakeShadowMatrix(ground); //sending fround matrix GL.glMultMatrixf(cubeXform); GL.glShadeModel(GL.GL_FLAT); GL.glColor3d(0, 0, 0);//black drawPenguinShade(); GL.glPopMatrix(); GL.glFlush(); WGL.wglSwapBuffers(m_uint_DC); }