Viernes 15 de Noviembre de 2024, 05:26
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Específica
»
Programación de Videojuegos
»
OpenGL
(Moderador:
Ruben3d
) »
Vectores En Opengl
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Vectores En Opengl (Leído 3447 veces)
fap1603
Miembro MUY activo
Mensajes: 135
Vectores En Opengl
«
en:
Lunes 17 de Enero de 2005, 15:21 »
0
Hola a todos, miren estoy usando opengl en vb, y necsito hacer un vetor que sea seleccionable con el mouse, es decir una linea o cadena de ellas, dibujadas en un espacio, las cuales pueda seleccionar al hacer click sobre ellas, si alguien tiene una idea se lo agradeceria mucho.
Tweet
Saludos,
Francisco Ayala Pinazo
Lima - Perú
Ruben3d
Moderador
Mensajes: 710
Nacionalidad:
Re: Vectores En Opengl
«
Respuesta #1 en:
Miércoles 19 de Enero de 2005, 13:01 »
0
Hola.
Tienes dos opciones:
a)
Trazar una línea desde el punto en el que se encuentra el ratón paralela al eje Z, y calcular colisión contra los objetos ya proyectados (multiplicados por la matriz de proyección). Si quieres saber qué coordenada es en espacio no ortogonal, habrás de multiplicar el resultado por la inversa de la matriz de proyección.
b)
Usar las funciones que OpenGL te da para la tarea. En esta web hay un buen tutorial:
NeHe - Picking, Alpha Blending, Alpha Testing, Sorting
.
Fijate en la función
void Selection(void);
Se deja como ejercicio para el lector convertir el código a Visual Basic
Un saludo.
Ruben3d
Personal
|
LinkedIn
luzop
Nuevo Miembro
Mensajes: 16
Re: Vectores En Opengl
«
Respuesta #2 en:
Sábado 5 de Febrero de 2005, 18:12 »
0
Bueno, quizás ya lo resolvistes,...pero por si las moscas.
Este codigo genera la dirección de un Rayo que apunta "hacia la pantalla".
Código: Text
private final int[] viewport = new int[4];
private final double[] modelview = new double[16];
private final double[] projection = new double[16];
private final double p0_X[] = new double [1];
private final double p0_Y[] = new double [1];
private final double p0_Z[] = new double [1];
private final double p1_X[] = new double [1];
private final double p1_Y[] = new double [1];
private final double p1_Z[] = new double [1];
private int height;
private int x;
private int y;
private final Ray rayo = new Ray();
//---------------------------------------------------------------------
// EL origen del rayo esta dado por la posición de la cámara
// gluLookAt(....)
//--------------------------------------------------------------------
private void generarDireccionRayo(GL gl,GLU glu){
gl.glGetDoublev( GL.GL_MODELVIEW_MATRIX, modelview );
gl.glGetDoublev( GL.GL_PROJECTION_MATRIX, projection );
gl.glGetIntegerv( GL.GL_VIEWPORT, viewport );
// height, es la altura de la ventana
int val = glu.gluUnProject(x,height-y,0,
modelview, projection, viewport,
p0_X , p0_Y , p0_Z);
if(val == GL.GL_FALSE)
throw new RuntimeException("Error en gluUnproject()");
val = glu.gluUnProject(x,height-y,1,
modelview, projection, viewport,
p1_X , p1_Y , p1_Z);
if(val == GL.GL_FALSE)
throw new RuntimeException("Error en gluUnproject()");
rayo.direction.x = (float)(p1_X[0] - p0_X[0]);
rayo.direction.y = (float)(p1_Y[0] - p0_Y[0]);
rayo.direction.z = (float)(p1_Z[0] - p0_Z[0]);
rayo.direction.normalize();
}
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
}
Teniendo la dirección del rayo, le das una magnitud lo suficientemente grande para
que alcance tus objetos(vectoresen este caso). Luego lo intersectas con los objetos que quieras "pickear" (intersección Rayo/segmento_de_linea supongo ).
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Específica
»
Programación de Videojuegos
»
OpenGL
(Moderador:
Ruben3d
) »
Vectores En Opengl