Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Inicio a programación grafica, Diapositivas de Programación C

Es una introducción al mundo 3d en la programación

Tipo: Diapositivas

2020/2021

Subido el 28/06/2023

random-videos-10
random-videos-10 🇧🇴

3 documentos

1 / 117

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Inicio a programación grafica y más Diapositivas en PDF de Programación C solo en Docsity!

PROGRAMACIÓN

GRÁFICA

PARA LA WEB

M.Sc. Ing. Juan Pablo Luna Felipez

Ingeniería Informática

Universidad Nacional “Siglo XX”

Llallagua, Bolivia

Septiembre, 2021

  • I Fundamentos
    • 1.1 Programación Grafica
    • 1.2 Sistema de Coordenadas
    • 1.3 OpenGL
    • 1.4 WebGL
    • 1.5 Three.JS
    • 1.6 Estructura básica de un programa de grafico 3D para la WEB
  • II Objetos Primitivos Gráficos
    • 2.1 Objetos para la Creación de Primitivos
    • 2.2 Objetos Primitivos 2D
      • 2.2.1 La Linea
      • 2.2.2 El Circulo
      • 2.2.3 Elipse
      • 2.2.4 Curva de Bezier
      • 2.2.5 Plano
    • 2.3 Objetos Primitivos 3D
      • 2.3.1 Cubo
      • 2.3.2 Esfera
      • 2.3.3. Toroide
      • 2.3.4 Cono
      • 2.3.5 Cilindro
      • 2.3.6 Dodecaedro
      • 2.3.7 Icosaedro
      • 2.3.8 Tubo
      • 2.3.9 Nudo Toroidal
  • III Transformaciones de objetos
    • 3.1 Representación matricial
    • 3.2 Traslación
    • 3.3 Rotación
    • 3.4 Escalación
  • IV Vistas y Proyecciones
    • 4.1 Proyecciones
    • 4.2 Proyección paralela o cilíndrica
    • 4.3 Estableciendo una proyección Ortogonal
    • 4.4 Proyección Perspectiva o Cónica
    • 4.5 Estableciendo una Proyección en perspectiva
  • V Luces e Iluminación
    • 5.1 Luz Ambiental
    • 5.2 Luz Direccional
    • 5.3 Luz Puntual
    • 5.4 Luz de Área
    • 5.5 Luz Spot
    • 5.6 Luz Hemiesfera
  • VI Materiales
    • 6.1 MeshBasicMaterial
    • 6.2 MeshLambertMaterial
    • 6.3 MeshPhongMaterial
    • 6.4 MeshStandardMaterial
    • 6.5 MeshPhysicalMaterial
    • 6.6 MeshToonMaterial
    • 6.7 Propiedades de los materiales
      • 6.7.1 Color
      • 6.7.2 Emisividad
      • 6.7.3 FlatShading
      • 6.7.4 Brillo
      • 6.7.5 Wireframe
  • VII Texturas
    • 7.1 Carga y aplicación de Texturas
    • 7.2 Mezclas
      • 7.2.1 NormalBlending
      • 7.2.2 AdditiveBlending
      • 7.2.3 SubtractiveBlending
      • 7.2.4 MultiplyBlending
      • 7.2.5 CustomBlending
    • 7.3 Ejemplo
  • VIII Carga de modelos 3D
    • 8.1 Carga de Modelos FBX
    • 8.2 Carga de Archivos GLB
  • IX Animaciones
    • 9.1 Carga de animaciones de modelos FBX
    • 9.2 Carga de animaciones de modelos GLB
    • 9.3 Ejemplo completo de animación de personaje

I FUNDAMENTOS

1.1 Programación Grafica

La revolución en el uso de gráficos para mostrar la información a través de diversos

dispositivos es vital para cualquier sistema, hoy en día gracias a ello existen diversidad de

nuevas tecnologías como la Realidad Virtual, Realidad Aumentada, Realidad Mixta, Visión

Artificial, Procesamiento digital de Imágenes, Desarrollo de Juegos, Hologramas y otros

que tienen gran impacto debido al alto manejo de elementos gráficos.

La Programación Gráfica se encarga de procesar, generar, almacenar, manipular,

visualizar datos gráficos digitales, es decir información gráfica que puede ser: imágenes

(en dos o tres dimensiones), animaciones, imágenes interactivas (realidad virtual, realidad

aumentada, realidad mixta), etc.

Aplicación 3D Sistema Solar

Aplicación Web 3D Sistema Solar

1.5 Three.JS

Emplea WEBGL para los procesos de realizar los procesos de dibujado, ThreeJS maneja

elementos mas complejos como escenas, iluminación, luces, sombras, materiales,

texturas, etc, que se tendría que trabajar bastante al emplear directamente en WEBGL

Three.Js entre sus componentes tiene tres elementos fundamentales para crear una

aplicación WEB 3D

Scene: Representa la escena tridimensional, esta compuesto por diferentes los diferentes

objetos que se insertaran dentro del mundo virtual.

Camera: Es una cámara virtual que representa a una cámara real, obtiene una porción de

la escena virtual generada, a partir de su posicionamiento y enfoque.

Renderer: Es uno de los objetos principales, ya que se encarga de renderizar la parte

visible por la camara de toda la escena 3D

También es necesario trabajar con dos métodos o funciones principales en un programa

que implementa three.js para crear sitios web con contenido 3D, estas funciones son: la

función init y la función animate

Función init: La función función init inicializa la escena y se llama una vez al inicio

durante la carga de script en la pagina web, por tanto se debe iniciar el objeto Scene con

todos sus objetos tridimensionales requeridos y su s configuraciones deseadas, también

se debe inicializar y configurar el objeto Camera y finalmente también se debe inicializar

el objeto renderizados con sus configuradas deseadas.

Función animate: La función animate es la función que actualiza los procesos de

dibujado de la pagina WEB en cada frame, por tanto se llama constantemente

dependiendo de la tasa de actualización que se da en cuadros por segundo, en esta

función deberá realizarse los procesos de actualización de los objetos que se

transformaran, de las posiciones, movimientos, etc.

Para su funcionamiento implementa requestAnimateFrame que es una función que enviá

una solicitud al navegador para realizar procesos de actualización, redibujado, animación

en una pagina web

1.6 Estructura básica de un programa de grafico 3D para la WEB

A continuación se presenta la estructura básica de un programa para trabajar con la

tecnología three.js en nuestras paginas webs.

texto

II OBJETOS PRIMITIVOS GRÁFICOS

Los objetos primitivos son figuras geométricas básicas elementales y que a partir de ellas

permiten crear objetos compuestos, escenas, etc.

Los objetos primitivos en 2D son la linea, la curva, la circunferencia, la elipse, el plano, etc.

En cambio los objetos primitivos en 3D, también denominados sólidos primitivos son: el

plano, el cubo, la esfera, Toroide, Cono, Tubo, etc.

WebApp en base a la primitiva gráfica linea

2.1 Objetos para la Creación de Primitivos

Para crear objetos primitivos empleando Three.js requerimos tres objetos básicos: malla

(mesh),geometría (geometry) y material(material).

Malla (Mesh)

En three.js los objetos primitivos se generan a partir de un objeto Mesh, un objeto mesh o

malla, es un objeto genérico compuesto a su vez de dos objetos: el objeto Geometry que

define la geometría de mesh y el objeto material, que asigna un material al mesh.

Una ventaja de que una malla tenga esa estructura es que se puede crear dos objetos con

la misma geometría, por ejemplo dos cubos de diferente color, o también a su vez dos

objetos con el mismo material, por ejemplo un cubo y una esfera con el color rojo y sus

propiedades.

Geometría (Geometry)

Representa la geometría de un objeto, el cual esta compuesto a su vez por vértices y

caras con una disposición de acuerdo a la geometría deseada como triángulos,

cuadrados, rectángulos, cubos, esferas, curvas, etc.

Material

Un material representa las propiedades que se aplican a la superficie de un objeto como el

color, brillo, textura, normales, etc.

2.2 Objetos Primitivos 2D

Entre los objetos primitivos básicos tenemos la línea, la circunferencia, la curva, etc.

2.2.1 La Linea

Una linea es una sucesión continua y recta de puntos que se forma a partir de un punto

inicial y otro punto final.

Podemos graficar lineas empleando la clase Line

Su sintaxis es:

Line( geometry : BufferGeometry, material : Material )

Donde:

Geometry : Vértices que representan los segmentos de línea. El valor predeterminado es

una geometría de tipo BufferGeometry.

Material : Es el material que se apicará a la línea. El valor predeterminado es un material

de tipo LineBasicMaterial.

Programa para graficar Lineas.

//IMPORTANDO LAS CLASES NECESARIAS

import * as THREE from '../../three/build/three.module.js'; var scene; var camera;

Resultado:

2.2.2 El Circulo

Un circulo es una curva cerrada, donde todos sus puntos están a la misma distancia del

centro, es una forma simple de geometría euclidiana y que se construye a partir de una

serie de segmentos triangulares con origen en el puntos central y se extienden hasta un

radio determinado.

Podemos graficar círculos empleando la clase CircleGeometry

Su sintaxis es:

CircleGeometry (radius: Float , segments: Integer , thetaStart: Float , thetaLength: Float )

Donde:

radius: Es el radio del círculo, por defecto su valor es 1.

segments: número de segmentos (triángulos), mínimo 3, valor por defecto 8.

thetaStart: ángulo de inicio para el primer segmento, por defecto 0 (posición de las tres en

punto).

ThetaLength: El ángulo central, a menudo llamado theta al sector circular. El valor

predeterminado es 2 * Pi, lo que lo convierte en un círculo completo.

Programa para graficar el primitivo grafico circulo

//IMPORTANDO LAS CLASES NECESARIAS

import * as THREE from '../../three/build/three.module.js'; var scene; var camera; var renderer; var circle; var circle1; function init() { //inicializamos la escena scene = new THREE.Scene(); //inicializamos la camara camera = new THREE.PerspectiveCamera( 75 , window.innerWidth / window.innerHeight, 0.1, 1000 ); camera.position.z = 5 ; //inicializamos el renderizador renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); //Definimos nuestra geometria const radius= 2 ; const segments= 12 ; const geometry = new THREE.CircleGeometry(radius, segments); const material = new THREE.MeshBasicMaterial( { color: 0x990000 } ); const wire_material = new THREE.MeshBasicMaterial( { color: 0x999999, wireframe: true} ); circle = new THREE.Mesh( geometry, material ); circle1 = new THREE.Mesh( geometry, wire_material ); //Adicionamos los objetos a la escena scene.add( circle ); scene.add( circle1 ); } function animate() { requestAnimationFrame(animate ); circle.rotation.x += 0.001; circle.rotation.y += 0.001;

yRadius : Representa el radio de la elipse en la dirección y. El valor predeterminado es 1.

aStartAngle : Representa el ángulo de inicio de la curva en radianes a partir del eje X

positivo. El valor predeterminado es 0.

aEndAngle : Representa el ángulo final de la curva en radianes a partir del eje X positivo.

Por defecto es 2 x Math.PI.

aClockwise: Representa si la elipse se dibuja en el sentido de las agujas del reloj. El valor

predeterminado es falso.

aRotación : Representa el ángulo de rotación de la elipse en radianes, en sentido

antihorario desde el eje X positivo (opcional). El valor predeterminado es 0.

Programa para graficar el primitivo Elipse.

//IMPORTANDO LAS CLASES NECESARIAS

import * as THREE from '../../three/build/three.module.js'; var scene; var camera; var renderer; var primitive; function init() { //inicializamos la escena scene = new THREE.Scene(); //inicializamos la camara camera = new THREE.PerspectiveCamera( 75 , window.innerWidth / window.innerHeight, 0.1, 1000 ); camera.position.z = 5 ; //inicializamos el renderizador renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); //Definimos nuestra geometria const curve = new THREE.EllipseCurve( 0 , 0 , // centerx, centerY

2 , 3 , // xRadius, yRadius 0 , 2 * Math.PI, // StartAngle, EndAngle false, // Clockwise 0 // Rotation ); const points = curve.getPoints( 50 ); const geometry = new THREE.BufferGeometry().setFromPoints( points ); const material = new THREE.LineBasicMaterial( { color : 0xffff00} ); // Create the final object to add to the scene primitive = new THREE.Line( geometry, material ); scene.add(primitive); renderer.render( scene, camera ); } function animate() { requestAnimationFrame(animate ); primitive.rotation.x += 0.001; primitive.rotation.y += 0.001; renderer.render( scene, camera ); } //Llamamos a los metodos init(); animate();

renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); //Definimos nuestra geometria const curve = new THREE.CubicBezierCurve( new THREE.Vector2( - 5 , 0 ), new THREE.Vector2( 7 , 4 ), new THREE.Vector2( - 7 , 4 ), new THREE.Vector2( 5 , 0 ) ); const points = curve.getPoints( 50 ); const geometry = new THREE.BufferGeometry().setFromPoints( points ); const material = new THREE.LineBasicMaterial( { color : 0xff0000 } ); // Create the final object to add to the scene primitive = new THREE.Line( geometry, material ); scene.add(primitive); renderer.render( scene, camera ); } function animate() { requestAnimationFrame(animate ); primitive.rotation.x += 0.001; primitive.rotation.y += 0.001; renderer.render( scene, camera ); } //Llamamos a los metodos init(); animate();

Resultado

2.2.5 Plano

El plano es un objeto ideal de dos dimensiones, es una superficie compuesta por longitud

y anchura.

Podemos graficar una plano empleando la clase PlaneGeometry

Su sintaxis es:

PlaneGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments :

Integer)

Donde:

width: Es el ancho a lo largo del eje X. El valor predeterminado es 1.

height: Es el alto a lo largo del eje Y. El valor predeterminado es 1.

widthSegments: segmentos que tendra el plano a lo largo del eje X, es opcional. El valor

predeterminado es 1.

heightSegments: Segmentos que tendra el plano a lo largo del eje Y, es un valor opcional.

El valor predeterminado es 1.

Programa para graficar el primitivo plano.

//IMPORTANDO LAS CLASES NECESARIAS

import * as THREE from '../../three/build/three.module.js'; var scene; var camera; var renderer; var primitive3D; var wire_primitive3D; function init() { //inicializamos la escena scene = new THREE.Scene(); //inicializamos la camara camera = new THREE.PerspectiveCamera( 75 , window.innerWidth / window.innerHeight, 0.1, 1000 );