Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Abc7 en 29 de Enero de 2006, 10:39:33 PM

Título: [vb][d3d8] Dibujar Rectangulos Con Contorno
Publicado por: Abc7 en 29 de Enero de 2006, 10:39:33 PM
 EDIT: ERA CON D3D7, SI ALGUIEN ME PUEDE CAMBIAR EL TITULO PORQUE DE ACA NO ME DEJA u.u gracias..

hola que tal, hacia mucho que no pasaba por aca.. es una lastima que en vez de saludar  venga con una duda, pero buen..

resumiendo, yo venia trabajando con directdraw, en sus funciones DrawBox(), en la que le indico el color de background y el color de foreground.
el color de foreground lo que hace es dibujarme un contorno.
bueno, estaba haciendo toda mi libreria de controles en directdraw, (listbox, textbox, forms, etc), y decidi pasarme a d3d, ya que toda mi aplicacion la estaba portando a d3d.
pero al pasar los controles me surgio este problema, de que SE como dibujar rectangulos usando el trianglestrip, pero lo que necesito es saber como dibujar ese triangulo pero con contorno, como me dejaba hacerlo directdraw.

la unica opcion que se me ocurrio fue dibujar primero un rect con el color del borde, mas grande que el rect original, y despues dibujar el rect original arriba de este, quedando asi un 'borde' a la vista, aunque en realidad es uno tapando al otro.
pero este metodo me parece un poco lento, y ademas no puedo usar la capacidad de alpha fading de d3d, ya que el rect original se mezclaria con el rect del borde que esta atras, quedando algo muy feo.

sisi, ya se q me hago mucho lio con las palabras, asi que lo q necesito es esto:
(http://i1.tinypic.com/mtuqtl.png)
pero en d3d, y que pueda usar alpha blending


bueno gracias anticipadas ^^!


muchos saludos!
Título: [vb][d3d8] Dibujar Rectangulos Con Contorno
Publicado por: BeRSeRKeR en 29 de Enero de 2006, 10:42:53 PM
 Pues en vez de meter un polígono más grande detrás para crear el borde, genera el borde con polígonos, cuatro en este caso.

Saludos.
Título: [vb][d3d8] Dibujar Rectangulos Con Contorno
Publicado por: Abc7 en 29 de Enero de 2006, 10:52:49 PM
Cita de: "BeRSeRKeR"Pues en vez de meter un polígono más grande detrás para crear el borde, genera el borde con polígonos, cuatro en este caso.

Saludos.
claro.. serian 4 primitivas no? (1 para cada lado)
o sino no entendi.

igualmente crei que habia una forma de que el d3d te dibuje el contorno de las primitivas, alguna vez lei que opengl te dejaba hacerlo, y pense q d3d tambien

escribiendo esto se me ocurrio otra forma =S
podria hacerlo con lineas, recorrer el rectangulo pero.. pregunta: a las lineas tambien se les puede aplicar alpha fading? y se les puede cambiar el grosor?

gracias por sus respuestas, me son de gran ayuda como siempre ^^!
Título: [vb][d3d8] Dibujar Rectangulos Con Contorno
Publicado por: BeRSeRKeR en 29 de Enero de 2006, 11:04:41 PM
 La opción de crear el borde con 4 polígonos (o los que hagán falta) me parece correcta. Si no recuerdo mal, cuando salió el código de quake1 le eché un vistazo y lo hacía así a la hora de crear los marcos de las ventanas de la interface.

Si lo que te preocupa es el rendimiento, dudo que a la aceleradora le afecte mucho que renderices 4 polígonos más (8 triángulos)... jeje

Además, a la hora de ponerle una textura al marco será más sencillo.

Saludos.
Título: [vb][d3d8] Dibujar Rectangulos Con Contorno
Publicado por: [EX3] en 30 de Enero de 2006, 01:36:23 AM
 Yo en la dx_lib32 por ejemplo, para la funcion DRAW_Box() que permite dibujar cajas con o sin relleno genero una lista de 4 primitivas (en realidad vertices para ser mas exactos) que renderizo configuradas como lineas mediante el parametro D3DPT_LINESTRIP para generar el borde. El relleno, en caso de realizarse, seria otra lista de primitivas que configuro como D3DPT_TRIANGLESTRIP que generan dos triangulos.

Salu2...
Título: [vb][d3d8] Dibujar Rectangulos Con Contorno
Publicado por: Abc7 en 30 de Enero de 2006, 01:55:09 AM
 
Cita de: "[EX3"] Yo en la dx_lib32 por ejemplo, para la funcion DRAW_Box() que permite dibujar cajas con o sin relleno genero una lista de 4 primitivas (en realidad vertices para ser mas exactos) que renderizo configuradas como lineas mediante el parametro D3DPT_LINESTRIP para generar el borde. El relleno, en caso de realizarse, seria otra lista de primitivas que configuro como D3DPT_TRIANGLESTRIP que generan dos triangulos.

Salu2...
claro, asi es como lo acabo de hacer.. solo que con 4 vertices no me cerraba el cuadrado, me quedaba algo como
.._______
|             |
|             |
|             |



osea, faltaba la parte de abajo.. y el orden de los vertices es el siguiente

1    3
|\    |
|  \  |
|    \|
0    2

el con trianglestrip me andaba bien el relleno, se cerraba el cuadrado, pero el linelist me quedaba como esta mas arriba

igualmente lo resolvi agregando un nuevo vertice, asi pasa por el 0 dos veces para cerrarse.


muchas gracias por las respuestas ^^!