Está en la página 1de 9

Facilitador: Cesar Zenet Lopez Cruz

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

Graficación.

ESTUDIANTE:

LAVADORES MIS ANGEL ADOLFO

Esferas.

YUCATÁN. 28/Noviembre/2023
COMENTARIOS:

Mi experiencia desarrollando este programa fue bastante gratificante y relajada. Aunque este
proyecto marcó mi primera incursión en el diseño de esferas específicamente, mi experiencia
previa en trabajos en 3D me proporcionó una base sólida.

Lo más destacado fue el desarrollo de un método único que simplificó enormemente la tarea de
dibujar esferas. Al diseñar una función (DivEsfera) que acepta parámetros como el número de
divisiones, el radio y la posición, pude reutilizar este método para crear y visualizar fácilmente
esferas en diversas partes de la aplicación.

Además, la incorporación de botones para alternar entre modos ("Esferas" y "Rebote") hizo que la
visualización de las esferas y su comportamiento fuera muy intuitiva. Esta característica facilitó la
interacción con la aplicación y proporcionó una forma sencilla de cambiar entre diferentes
escenarios de visualización.

En resumen, el proyecto me permitió aplicar mis conocimientos previos en programación en 3D, al


tiempo que me desafiaba a diseñar un método eficiente y a incorporar una interfaz de usuario
amigable. En general, fue una experiencia de desarrollo satisfactoria y relajada que contribuyó
positivamente a mi aprendizaje graficación.
Capturas.

Seis Esferas.
Esferas Revotando.
Código Fuente.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SharpGL;

namespace Esferas_AngelAdolfoLavadoresMis
{
public partial class Form1 : Form
{
float rotx;
float roty;
float rotz;
float a=-2.0f;
float b=2.0f;
int ban=0;
int Caso = 3;
public Form1()
{
InitializeComponent();
SharpGL.OpenGL gl = this.openGLCtrl1.OpenGL;
float[] light_ambient = { 0.2f, 0.2f, 0.2f, 1.0f };
float[] light_diffuse = { 1, 0, 1, 0, 1, 0, 1, 0 };
float[] light_specular = { 1, 0, 1, 0, 1, 0, 1, 0 };
float[] light_position = { 5.5f, 0.0f, 1.5f, 1.0f };
gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.Light (OpenGL.LIGHT0, OpenGL.SPECULAR, light_specular);
gl.Enable(OpenGL.LIGHTING);
gl.Enable(OpenGL.LIGHT0);
gl.Enable(OpenGL.DEPTH_TEST);
}

private void openGLCtrl1_OpenGLDraw(object sender, PaintEventArgs e)


{
SharpGL.OpenGL lavadores = this.openGLCtrl1.OpenGL;
lavadores.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT);
lavadores.LoadIdentity();

lavadores.Translate(0.0f, 0.0f, -3.0f);


SharpGL.SceneGraph.Quadrics.Sphere Esfera = new SharpGL.SceneGraph.Quadrics.Sphere();
if (Caso == 1)
{
Esfera.Material.Ambient = System.Drawing.Color.Red;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Point;
Vertex Rotacion = new Vertex(rotx, 0.0f, 0.0f);
Esfera.Rotate = Rotacion;
DivEsfera(50, 16, 0.4f, 0.0f, 0.5f, 0.0f, lavadores, Esfera);

Esfera.Material.Ambient = System.Drawing.Color.Blue;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Silhouette;
Vertex Rotacion2 = new Vertex(0.0f, roty, 0.0f);
Esfera.Rotate = Rotacion2;
DivEsfera(50, 16, 0.4f, -2.0f, 0.5f, 0.0f, lavadores, Esfera);

Esfera.Material.Ambient = System.Drawing.Color.Orange;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Line;
Vertex Rotacion3 = new Vertex(rotx, roty, rotz);
Esfera.Rotate = Rotacion3;
DivEsfera(50, 16, 0.4f, +2.0f, 0.5f, 0.0f, lavadores, Esfera);

Esfera.Material.Ambient = System.Drawing.Color.Orange;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Line;
Vertex Rotacion4 = new Vertex(0.0f, 0.0f, rotz);
Esfera.Rotate = Rotacion4;
DivEsfera(50, 16, 0.4f, 0.0f, -0.5f, 0.0f, lavadores, Esfera);

Esfera.Material.Ambient = System.Drawing.Color.Red;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Point;
Vertex Rotacion5 = new Vertex(rotx, roty, rotz);
Esfera.Rotate = Rotacion5;
DivEsfera(50, 16, 0.4f, -2.0f, -0.5f, 0.0f, lavadores, Esfera);

Esfera.Material.Ambient = System.Drawing.Color.Blue;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Silhouette;
Vertex Rotacion6 = new Vertex(rotx, 0.0f, 0.0f);
Esfera.Rotate = Rotacion6;
DivEsfera(50, 16, 0.4f, +2.0f, -0.5f, 0.0f, lavadores, Esfera);

rotx += 0.2f;
roty += 0.2f;
rotz += 0.2f;
}
if (Caso == 0)
{
Esfera.Material.Ambient = System.Drawing.Color.Red;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Point;
DivEsfera(50, 16, 0.4f, a, 0.0f, 0.0f, lavadores, Esfera);

Esfera.Material.Ambient = System.Drawing.Color.Blue;
Esfera.QuadricDrawStyle = SharpGL.SceneGraph.Quadrics.Quadric.DrawStyle.Silhouette;
DivEsfera(50, 16, 0.4f, b, 0.0f, 0.0f, lavadores, Esfera);
//*********************************************************
if (a < -0.4f && ban == 0)
{
a += 0.02f;
}

else
{
ban = 1;
if (a > -2.0f)
{
a -= 0.02f;
}
else
{ ban = 0; }
}
//*********************************************************
if (b > 0.4f && ban == 0)
{
b -= 0.02f;
}
else
{
ban = 1;
if (b < 2.0f)
{
b += 0.02f;
}
else
{ ban = 0; }
}
//*********************************************************
}

private void DivEsfera(int SLI, int STA, float RAD, float POSX, float POSY, float POSZ,
SharpGL.OpenGL gl,SharpGL.SceneGraph.Quadrics.Sphere Esfera)
{

/*SharpGL.SceneGraph.Quadrics.Sphere Esfera = new


SharpGL.SceneGraph.Quadrics.Sphere();*/
Esfera.Create(gl);
Esfera.Slices = SLI;
Esfera.Stacks = STA;
Esfera.Radius = RAD;

Vertex EsferaPos = new Vertex(POSX, POSY, POSZ);


Esfera.Translate = EsferaPos;

Esfera.Draw(gl);

private void Esferas_Click(object sender, EventArgs e)


{
Caso = 1;
Rebote.Visible = true;
Esferas.Visible = false;

private void Rebote_Click(object sender, EventArgs e)


{
Caso = 0;
Rebote.Visible = false;
Esferas.Visible = true;

}
}
}

También podría gustarte