Tunel-AngelAdolfo LavadoresMis

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

Facilitador: Cesar Zenet Lopez Cruz

INGENIERÍA EN SISTEMAS
COMPUTACIONALES

Graficación.

ESTUDIANTE:

LAVADORES MIS ANGEL ADOLFO

Tunel.

YUCATÁN. 16/Noviembre/2023
COMENTARIOS:

Este segundo proyecto en 3D ha sido muy entretenido. Al enfrentar el reto de construir un túnel
interactivo, destaco la implementación de un método que genera cada sección del túnel a partir de
solo dos coordenadas inferiores. Este enfoque modular ha simplificado considerablemente la
construcción del túnel, permitiéndome ajustar su forma y dimensiones con facilidad.

En resumen, este proyecto ha sido una valiosa experiencia que ha ampliado mi habilidad para
desarrollar entornos visuales interactivos en 3D. La creación de un método eficiente para generar
secciones del túnel destaca mi progreso en la programación gráfica y me ha preparado para
enfrentar proyectos más complejos en el futuro.
Capturas.

Inicio.

Final.
Por dentro.
Por fuera distintos ángulos.
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 System.Drawing.Imaging;
using SharpGL;

namespace Tunel_de_ANGELADOLFO_LAVADORESMIS
{
public partial class Form1 : Form
{

float rotaX = 0;
float rotaY = 0;
float rotaZ = 0;
float trasX = 0;
float trasY = -2.5f;
float trasZ = -8;
int fast = 5;
double BanD = 0;

// El arreglo que almacena las texturas


uint[] textura = new uint[1];

// Tiene que ser bmp(BitMap) y se declara la variable


Bitmap texturaImg;

public Form1()
{
InitializeComponent();

// Se hacen las modificaciones en el constructor del formulario


// Acá se asigna la textura al openGLControl

SharpGL.OpenGL lavadores = this.openGLCtrl1.OpenGL;


texturaImg = new Bitmap("Crate.bmp");
lavadores.Enable(OpenGL.TEXTURE_2D);

// Se especifica la posicion de la textura dentro del arreglo


lavadores.GenTextures(1, textura);

// Asigna la textyra al control de forma 2D


lavadores.BindTexture(OpenGL.TEXTURE_2D, textura[0]);
// Llamada a OpenGL donde el dato es la textura
lavadores.TexImage2D(OpenGL.TEXTURE_2D, 0, 3,
texturaImg.Width, texturaImg.Height, 0,
OpenGL.RGB, OpenGL.UNSIGNED_BYTE,
texturaImg.LockBits(new Rectangle(0, 0, texturaImg.Width, texturaImg.Height),
ImageLockMode.ReadOnly,
PixelFormat.Format24bppRgb).Scan0);

lavadores.TexParameter(OpenGL.TEXTURE_2D, OpenGL.TEXTURE_MIN_FILTER, OpenGL.LINEAR);


// Filtración lineal
lavadores.TexParameter(OpenGL.TEXTURE_2D, OpenGL.TEXTURE_MAG_FILTER, OpenGL.LINEAR);
// Filtración lineal
}

private void lavadores(object sender, PaintEventArgs e)


{

SharpGL.OpenGL lavadores = this.openGLCtrl1.OpenGL; //.openGLCtrl1.OpenGL;


lavadores.Clear(OpenGL.COLOR_BUFFER_BIT | OpenGL.DEPTH_BUFFER_BIT);
lavadores.LoadIdentity();
lavadores.Translate(trasX, trasY, trasZ);
lavadores.Rotate(rotaX, rotaY, rotaZ);

// izquierda
MiCuadro3D(-5, 0, 0, -5, 0, -10, lavadores);
MiCuadro3D(-5, 0, -10, -5, 3, -15, lavadores);
MiCuadro3D(-5, 3, -15, -5, 3, -25, lavadores);
MiCuadro3D(-5, 3, -25, -5, 5, -28, lavadores);
MiCuadro3D(-5, 5, -28, -5, 5, -38, lavadores);
MiCuadro3D(-5, 5, -38, -5, 0, -50, lavadores);
MiCuadro3D(-5, 0, -50, -5, 0, -70, lavadores);

if (BanD == 1)
{
trasZ += 0.5f;
if(trasZ >= 5 && trasZ <= 10)
{
trasY -= 0.2f;
}
if (trasZ >= 20 && trasZ <= 23.5)
{
trasY -= 0.2f;
}
if (trasZ >= 37 && trasZ <= 45)
{
trasY += 0.2f;
}
if(trasZ >= 55)
{
BanD = 0;
}

}
if (BanD == 2)
{

trasZ -= 0.5f;
if (trasZ >= 5 && trasZ <= 10)
{
trasY += 0.2f;
}
if (trasZ >= 20 && trasZ <= 23.5)
{
trasY += 0.2f;
}
if (trasZ >= 37 && trasZ <= 45)
{
trasY -= 0.2f;
}
if (trasZ <= -8)
{
BanD = 0;
}

// 3 Lineas al final delimitando la META // o salida del laberinto


lavadores.Begin(OpenGL.LINES);
lavadores.Color(1.0f, 0.0f, 0.01);
lavadores.Vertex(-5, 1, -70);
lavadores.Vertex(5, 1, -70);
lavadores.Vertex(-5, 2, -70);
lavadores.Vertex(5, 2, -70);
lavadores.Vertex(-5, 3, -70);
lavadores.Vertex(5, 3, -70);
lavadores.Vertex(-5, 4, -70);
lavadores.Vertex(5, 4, -70);

lavadores.End();

private void MiCuadro3D(float x1, float y1, float z1, float x2, float y2, float z2,
SharpGL.OpenGL lavadores)
{
lavadores.Begin(OpenGL.QUADS);

lavadores.Color(1.0f, 0.0f, 0.0f);


lavadores.TexCoord(1.0f, 1.0f); lavadores.Vertex(x1, y1, z1);
lavadores.Color(0.0f, 1.0f, 0.0f);
lavadores.TexCoord(0.0f, 1.0f); lavadores.Vertex(x2, y2, z2);
lavadores.Color(0.0f, 0.0f, 1.0f);
lavadores.TexCoord(0.0f, 0.0f); lavadores.Vertex(x2, y2 + 5, z2);
lavadores.Color(1.0f, 1.0f, 0.0f);
lavadores.TexCoord(1.0f, 0.0f); lavadores.Vertex(x1, y1 + 5, z1);

lavadores.Color(1.0f, 0.0f, 0.0f);


lavadores.TexCoord(1.0f, 1.0f); lavadores.Vertex(x1 + 10, y1, z1);
lavadores.Color(0.0f, 1.0f, 0.0f);
lavadores.TexCoord(0.0f, 1.0f); lavadores.Vertex(x2 + 10, y2, z2);
lavadores.Color(0.0f, 0.0f, 1.0f);
lavadores.TexCoord(0.0f, 0.0f); lavadores.Vertex(x2 + 10, y2 + 5, z2);
lavadores.Color(1.0f, 1.0f, 0.0f);
lavadores.TexCoord(1.0f, 0.0f); lavadores.Vertex(x1 + 10, y1 + 5, z1);

lavadores.Color(1.0f, 0.0f, 0.0f);


lavadores.TexCoord(1.0f, 1.0f); lavadores.Vertex(x1, y1, z1);
lavadores.Color(0.0f, 1.0f, 0.0f);
lavadores.TexCoord(0.0f, 1.0f); lavadores.Vertex(x2, y2, z2);
lavadores.Color(0.0f, 0.0f, 1.0f);
lavadores.TexCoord(0.0f, 0.0f); lavadores.Vertex(x2 + 10, y2, z2);
lavadores.Color(1.0f, 1.0f, 0.0f);
lavadores.TexCoord(1.0f, 0.0f); lavadores.Vertex(x1 + 10, y1, z1);

lavadores.Color(1.0f, 0.0f, 0.0f);


lavadores.TexCoord(1.0f, 1.0f); lavadores.Vertex(x1, y1 + 5, z1);
lavadores.Color(0.0f, 1.0f, 0.0f);
lavadores.TexCoord(0.0f, 1.0f); lavadores.Vertex(x2, y2 + 5, z2);
lavadores.Color(0.0f, 0.0f, 1.0f);
lavadores.TexCoord(0.0f, 0.0f); lavadores.Vertex(x2 + 10, y2 + 5, z2);
lavadores.Color(1.0f, 1.0f, 0.0f);
lavadores.TexCoord(1.0f, 0.0f); lavadores.Vertex(x1 + 10, y1 + 5, z1);

lavadores.End();
}

private void openGLCtrl1_KeyDown(object sender, KeyEventArgs e)


{
switch (e.KeyCode)
{
case Keys.D1:
BanD = 1;
break;
case Keys.D2:
BanD = 2;
break;
case Keys.I:
rotaX += fast;
break;
case Keys.K:
rotaX -= fast;
break;
case Keys.L:
rotaY += fast;
break;
case Keys.J:
rotaY -= fast;
break;
case Keys.Z:
rotaZ += fast;
break;
case Keys.X:
rotaZ -= fast;
break;
case Keys.A: //A
trasX += fast;
break;
case Keys.D: //D
trasX -= fast;
break;
case Keys.N:
trasY += fast;
break;
case Keys.M:
trasY -= fast;
break;
case Keys.W: //W
trasZ += fast;
break;
case Keys.S: //S
trasZ -= fast;
break;
case Keys.R:
Application.Restart();
break;
}
}

}
}

También podría gustarte