void CreateTree() { GL.glNewList(TREE_LIST + currentTree, GL.GL_COMPILE); GL.glPushMatrix(); GL.glPushAttrib(GL.GL_LIGHTING_BIT); GL.glCallList(TREE_MAT); GL.glScaled(amplitude, amplitude, amplitude); FractalTreeRec(0); GL.glPopAttrib(); 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 drawLake() { GL.glEnable(GL.GL_LIGHTING); GL.glCallList(WATER_MAT); GL.glPushMatrix(); if (ScrollValue[16] >= 0) { GL.glScaled(1, 1, 1 + ScrollValue[16]); } else { GL.glScaled(1 + ScrollValue[16], 1, 1); } GL.glTranslated(ScrollValue[12], 0, ScrollValue[13]); GL.glRotated(90, 1, 0, 0); GLU.gluDisk(obj, 0, ScrollValue[14], 30, 30); GL.glPopMatrix(); GL.glDisable(GL.GL_LIGHTING); }
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); }
public void drawPenguin() { GL.glPushMatrix(); // drawaxe(); GL.glRotatef(90, 0.0f, 1.0f, 0.0f); GL.glRotatef(-90, 1.0f, 0.0f, 0.0f); //drawaxe(); GL.glTranslated(0.0, -200, 0); GL.glTranslated(0.0, speed, 0); // going forward GL.glRotated(spirala, 0, 0, 1); //turn 180 deg // drawaxe(); if (speedFlg) { if (!spiralaFlg) { if (forward) { if (speed < 380) { speed += 5; GL.glRotated(flap * 6, 0, 0, 1); //Jump } if (speed >= 380) { speedFlg = false; spiralaFlg = true; forward = false; } } if (!forward) { if (speed > 0) { speed -= 5; GL.glRotated(flap * 6, 0, 0, 1); } if (speed <= 0) { speedFlg = false; spiralaFlg = true; forward = true; } } } } if (!speedFlg) { if (spiralaFlg) { if (spirala < spindLim) { spirala += 18; GL.glTranslated(0.0, 0, 0 + flap * 8); } else { spiralaFlg = false; spindLim += 180; } } if (!spiralaFlg) { speedFlg = true; } } if (!checkBox) { if (!flapFlg) { flap += 0.5f; if (flap >= 5) { flapFlg = true; } } if (flapFlg) { flap -= 0.5f; if (flap <= 0) { flapFlg = false; } } } if (checkBox) { flap = 0; } GL.glPushMatrix(); GL.glScaled(scale_inc, scale_inc, scale_inc); //size of penguin //drawaxe(); float[] front_ambuse = { 0.9f, 0.9f, 0.9f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, front_ambuse); GL.glColor3f(1.0f, 1.0f, 1.0f); //Front body GL.glBegin(GL.GL_QUADS); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-3, 3, 0); GL.glVertex3d(3, 3, 0); GL.glVertex3d(4, 4, 5); GL.glVertex3d(-4, 4, 5); GL.glEnd(); GL.glBegin(GL.GL_QUADS); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-4, 4, 5); GL.glVertex3d(4, 4, 5); GL.glVertex3d(2.5, 3, 12); GL.glVertex3d(-2.5, 3, 12); GL.glEnd(); float[] backLow_ambuse = { 0.01f, 0.01f, 0.01f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, backLow_ambuse); GL.glColor3f(0.01f, 0.01f, 0.01f); //Back body GL.glBegin(GL.GL_QUADS); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-3, 0, 0); GL.glVertex3d(3, 0, 0); GL.glVertex3d(4, -1, 5); GL.glVertex3d(-4, -1, 5); GL.glEnd(); float[] backHigh_ambuse = { 0.18f, 0.18f, 0.18f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, backHigh_ambuse); GL.glColor3f(0.18f, 0.18f, 0.18f); GL.glBegin(GL.GL_QUADS); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-4, -1, 5); GL.glVertex3d(4, -1, 5); GL.glVertex3d(2.5, 0, 12); GL.glVertex3d(-2.5, 0, 12); GL.glEnd(); float[] SideFront_ambuse = { 0.91f, 0.91f, 0.91f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, SideFront_ambuse); GL.glColor3f(0.91f, 0.91f, 0.91f); //leftSide-front body GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-3, 3, 0); GL.glVertex3d(-3.5, 1, 0); GL.glVertex3d(-4, 4, 5); GL.glVertex3d(-4.2, 1, 5.5); GL.glVertex3d(-2.5, 3, 12); GL.glEnd(); //rightSide-front body GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(3, 3, 0); GL.glVertex3d(3.5, 1, 0); GL.glVertex3d(4, 4, 5); GL.glVertex3d(4.2, 1, 5.5); GL.glVertex3d(2.5, 3, 12); GL.glEnd(); float[] SideBack_ambuse = { 0.1f, 0.1f, 0.1f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, SideBack_ambuse); GL.glColor3f(0.1f, 0.1f, 0.1f); //leftSide-front body GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-3, 0, 0); GL.glVertex3d(-3.5, 1, 0); GL.glVertex3d(-4, -1, 5); GL.glVertex3d(-4.2, 1, 5.5); GL.glVertex3d(-2.5, 0, 12); GL.glVertex3d(-2.5, 3, 12); GL.glEnd(); //rightSide-front body GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(3, 0, 0); GL.glVertex3d(3.5, 1, 0); GL.glVertex3d(4, -1, 5); GL.glVertex3d(4.2, 1, 5.5); GL.glVertex3d(2.5, 0, 12); GL.glVertex3d(2.5, 3, 12); GL.glEnd(); ////// neck GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(2.5, 3, 12); GL.glVertex3d(-2.5, 3, 12); GL.glVertex3d(0, 1.0, 15); GL.glEnd(); GL.glColor3f(0f, 0.0f, 0.0f); float[] beak_ambuse = { 0.6021f, 0.3001f, 0.0156f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, beak_ambuse); GL.glColor3f(0.6021f, 0.3001f, 0.0156f); ////// beak -left GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-2.5, 3, 12); GL.glVertex3d(0, 1.0, 15); GL.glVertex3d(0, 6.0, 10); GL.glEnd(); ////// beak -right GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(2.5, 3, 12); GL.glVertex3d(0, 1.0, 15); GL.glVertex3d(0, 6.0, 10); GL.glEnd(); float[] wing_ambuse = { 0.7421f, 0.4101f, 0.0156f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, wing_ambuse); GL.glColor3f(0.7421f, 0.4101f, 0.0156f); ////// wing -left GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(-2.5, 3, 12); GL.glVertex3d(-4.2, +1.0, 5.5); GL.glVertex3d(-5 + (float)-flap * 0.4, -5.0 + (float)flap * 0.4, 4); GL.glEnd(); ////// wing -right GL.glBegin(GL.GL_TRIANGLE_STRIP); GL.glNormal3d(0, 0, 1); GL.glVertex3d(2.5, 3, 12); GL.glVertex3d(4.2, +1.0, 5.5); GL.glVertex3d(5 + (float)flap * 0.4, -5.0 + (float)flap * 0.4, 4); GL.glEnd(); //Head float[] head_ambuse = { 0.1117f, 0.1296f, 0.1562f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, head_ambuse); GL.glColor3f(0.1117f, 0.1296f, 0.1562f); GL.glPushMatrix(); GL.glTranslated(0, 1.5, 13); GLUT.glutSolidSphere(3.2, 64, 64); GL.glPopMatrix(); //Legs float[] legs_ambuse = { 0.5021f, 0.2001f, 0.0156f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, legs_ambuse); GL.glColor3f(0.1117f, 0.1296f, 0.1562f); GL.glPushMatrix(); GL.glTranslated(-2.2, 3, 0); GLUT.glutSolidSphere(1.8, 32, 100); GL.glPopMatrix(); GL.glPushMatrix(); GL.glTranslated(2.2, 3, 0); GLUT.glutSolidSphere(1.8, 32, 100); GL.glPopMatrix(); GL.glPushMatrix(); //Eyes float[] eyesW_ambuse = { 1f, 1f, 1f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, eyesW_ambuse); GL.glColor3f(1f, 1f, 1f); GL.glPushMatrix(); GL.glTranslated(-1.2, 3.5, 13); GLUT.glutSolidSphere(1, 32, 32); GL.glPopMatrix(); GL.glPushMatrix(); GL.glTranslated(1.2, 3.5, 13); GLUT.glutSolidSphere(1, 32, 32); GL.glPopMatrix(); float[] eyesB_ambuse = { 0f, 0f, 0f, 1.0f }; GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE, eyesB_ambuse); GL.glColor3f(1f, 1f, 1f); GL.glPushMatrix(); GL.glTranslated(-1.2, 3.9, 12.8); GLUT.glutSolidSphere(0.7, 32, 32); GL.glPopMatrix(); GL.glPushMatrix(); GL.glTranslated(1.2, 3.9, 12.8); GLUT.glutSolidSphere(0.7, 32, 32); GL.glPopMatrix(); GL.glPopMatrix(); GL.glPopMatrix(); GL.glPopMatrix(); }
public void Draw() { //Shadows pos[0] = 0;//ScrollValue[9]; pos[1] = ScrollValue[8]; pos[2] = ScrollValue[7]; pos[3] = ScrollValue[9]; if (m_uint_DC == 0 || m_uint_RC == 0) { return; } GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); GL.glLoadIdentity(); // not trivial double[] ModelVievMatrixBeforeSpecificTransforms = new double[16]; double[] CurrentRotationTraslation = new double[16]; GLU.gluLookAt(ScrollValue[0], ScrollValue[1], ScrollValue[2], ScrollValue[3], ScrollValue[4], ScrollValue[5], ScrollValue[6], ScrollValue[7], ScrollValue[8]); GL.glTranslatef(0.0f, 0.0f, -1.0f); if (!bPerspective) { GL.glTranslatef(0.0f, 0.0f, 8.0f); } //3D model b3 GL.glTranslatef(0.0f, -5.0f, -15.0f); GL.glRotated(180, 0, 1, 0); //3D model e //save current ModelView Matrix values //in ModelVievMatrixBeforeSpecificTransforms array //ModelView Matrix ========>>>>>> ModelVievMatrixBeforeSpecificTransforms GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX, ModelVievMatrixBeforeSpecificTransforms); //ModelView Matrix was saved, so // GL.glLoadIdentity(); // make it identity matrix GL.glLoadIdentity(); // make it identity matrix //make transformation in accordance to KeyCode float delta; if (intOptionC != 0) { delta = 5.0f * Math.Abs(intOptionC) / intOptionC; // signed 5 switch (Math.Abs(intOptionC)) { case 1: GL.glRotatef(delta, 1, 0, 0); break; case 2: GL.glRotatef(delta, 0, 1, 0); break; case 3: GL.glRotatef(delta, 0, 0, 1); break; case 4: GL.glTranslatef(delta / 20, 0, 0); break; case 5: GL.glTranslatef(0, delta / 20, 0); break; case 6: GL.glTranslatef(0, 0, delta / 20); break; } } //as result - the ModelView Matrix now is pure representation //of KeyCode transform and only it !!! //save current ModelView Matrix values //in CurrentRotationTraslation array //ModelView Matrix =======>>>>>>> CurrentRotationTraslation GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX, CurrentRotationTraslation); //The GL.glLoadMatrix function replaces the current matrix with //the one specified in its argument. //The current matrix is the //projection matrix, modelview matrix, or texture matrix, //determined by the current matrix mode (now is ModelView mode) GL.glLoadMatrixd(AccumulatedRotationsTraslations); //Global Matrix //The GL.glMultMatrix function multiplies the current matrix by //the one specified in its argument. //That is, if M is the current matrix and T is the matrix passed to //GL.glMultMatrix, then M is replaced with M • T GL.glMultMatrixd(CurrentRotationTraslation); //save the matrix product in AccumulatedRotationsTraslations GL.glGetDoublev(GL.GL_MODELVIEW_MATRIX, AccumulatedRotationsTraslations); //replace ModelViev Matrix with stored ModelVievMatrixBeforeSpecificTransforms GL.glLoadMatrixd(ModelVievMatrixBeforeSpecificTransforms); //multiply it by KeyCode defined AccumulatedRotationsTraslations matrix GL.glMultMatrixd(AccumulatedRotationsTraslations); GL.glEnable(GL.GL_TEXTURE_2D); if (!rotate) { GL.glRotatef(0, 0, 20, 0); GL.glDepthRange(1, 1);////////if the zebra behind the cube, change to (1,1) GL.glPushMatrix(); DrawTexturedCube(); GL.glPopMatrix(); } else { GL.glRotatef(0, 0, 20, 0); GL.glDepthRange(1, 1); GL.glPushMatrix(); angle -= 0.1f; GL.glRotatef(angle, 0, 2, 0); DrawTexturedCube(); GL.glPopMatrix(); } GL.glRotated(100, 0, 90, 0); GL.glScaled(0.05, 0.05, 0.05); GL.glRotated(-90, 180, 0, 0); GL.glScaled(30, 30, 30); DrawFigures(); GL.glEnable(GL.GL_BLEND); GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); //only floor, 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); // draw floor always GL.glColorMask((byte)GL.GL_FALSE, (byte)GL.GL_FALSE, (byte)GL.GL_FALSE, (byte)GL.GL_FALSE); GL.glDisable(GL.GL_DEPTH_TEST); // 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); GL.glEnable(GL.GL_STENCIL_TEST); // draw reflected scene GL.glPushMatrix(); GL.glScalef(1, 1, -1); //swap on Z axis GL.glEnable(GL.GL_CULL_FACE); GL.glCullFace(GL.GL_BACK); DrawFigures(); GL.glCullFace(GL.GL_FRONT); DrawFigures(); GL.glDisable(GL.GL_CULL_FACE); GL.glPopMatrix(); // really draw floor //( half-transparent ( see its color's alpha byte))) // in order to see reflected objects GL.glDepthMask((byte)GL.GL_FALSE); DrawFloor(); GL.glDepthMask((byte)GL.GL_TRUE); // Disable GL.GL_STENCIL_TEST to show All, else it will be cut on GL.GL_STENCIL GL.glDisable(GL.GL_STENCIL_TEST); DrawFigures(); //REFLECTION e GL.glFlush(); WGL.wglSwapBuffers(m_uint_DC); }
public void DrawTexturedCube() { GL.glScaled(55, 55, 55); { // front GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[0]); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(0.0f, 0.0f, 1.0f); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-1.0f, -1.0f, 1.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(1.0f, -1.0f, 1.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(1.0f, 1.0f, 1.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-1.0f, 1.0f, 1.0f); GL.glEnd(); // back GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[1]); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(0.0f, 0.0f, -1.0f); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(1.0f, -1.0f, -1.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(-1.0f, -1.0f, -1.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(-1.0f, 1.0f, -1.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(1.0f, 1.0f, -1.0f); GL.glEnd(); // left GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[2]); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(-1.0f, 0.0f, 0.0f); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-1.0f, -1.0f, -1.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(-1.0f, -1.0f, 1.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(-1.0f, 1.0f, 1.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-1.0f, 1.0f, -1.0f); GL.glEnd(); // right GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[3]); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(1.0f, 0.0f, 0.0f); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(1.0f, -1.0f, 1.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(1.0f, -1.0f, -1.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(1.0f, 1.0f, -1.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(1.0f, 1.0f, 1.0f); GL.glEnd(); // top GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[4]); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(0.0f, 1.0f, 0.0f); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-1.0f, 1.0f, 1.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(1.0f, 1.0f, 1.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(1.0f, 1.0f, -1.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-1.0f, 1.0f, -1.0f); GL.glEnd(); // bottom GL.glBindTexture(GL.GL_TEXTURE_2D, Textures[5]); GL.glBegin(GL.GL_QUADS); GL.glNormal3f(0.0f, -1.0f, 0.0f); GL.glTexCoord2f(0.0f, 0.0f); GL.glVertex3f(-1.0f, -1.0f, -1.0f); GL.glTexCoord2f(1.0f, 0.0f); GL.glVertex3f(1.0f, -1.0f, -1.0f); GL.glTexCoord2f(1.0f, 1.0f); GL.glVertex3f(1.0f, -1.0f, 1.0f); GL.glTexCoord2f(0.0f, 1.0f); GL.glVertex3f(-1.0f, -1.0f, 1.0f); GL.glEnd(); } }