Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Gllogicop

Iniciado por Zaelsius, 29 de Abril de 2005, 01:49:59 AM

« anterior - próximo »

Zaelsius

 Me ha llamado la atención esta función de OpenGL que no conocía: glLogicOp

Permite especificar la operación lógica a efectuar en el rendering de un nuevo objeto contra el contenido actual del backbuffer.

Es decir, podemos hacer cosas como invertir el fondo donde pintemos, pintar objetos de color invertido(lo que yo buscaba), pintar un cursor en modo XOR de manera que siempre destaque sobre el fondo, etc...

En mi caso, necesitaba pintar elementos texturizados con color invertido, que aparecen en un juego tipo puzzle en el que estoy trabajando. El código es parecido a esto:

if ( condition )
{
glEnable( GL_COLOR_LOGIC_OP );
glLogicOp( GL_COPY_INVERTED );
}

// Pintar objeto
// ...

glDisable( GL_COLOR_LOGIC_OP );


He buscado un método equivalente en DirectX por Google, pero no he encontrado nada(he buscado muy poco y mal). Si alguien tiene la SDK a mano y conoce la manera de hacer lo mismo en Direct3D se lo agradecería ^^, ya que quizá este verano escriba un tutorial sobre el tema, mostrando algunos efectos chorra pero que puedan ser útiles.


_Grey

 Pues supongo que el D3DRS_BLENDOP de la funcion SetRenderState(); deberia servir para estas cosas.....

Saludos.

[EX3]

 
Cita de: "ZaelSiuS"Es decir, podemos hacer cosas como invertir el fondo donde pintemos, pintar objetos de color invertido(lo que yo buscaba), pintar un cursor en modo XOR de manera que siempre destaque sobre el fondo, etc...
Te refieres a invertir la posicion de los pixeles, osea, un espejado o a invertir los colores?
Si existe algo similar en DirectX deberia ser mediante algun parametro de la funcion SetRenderState(), pero ni idea, en la documentacion en principio no he visto nada de invertir color excepto por funciones como:

D3DXColorAdd() - Adds two color values together to create a new color value.
D3DXColorAdjustContrast() - Adjusts the contrast value of a color.
D3DXColorAdjustSaturation() - Adjusts the saturation value of a color.
D3DXColorLerp() - Uses linear interpolation to create a color value.
D3DXColorLerp() - Uses linear interpolation to create a color value.
D3DXColorNegative() - Creates the negative color value of a color value.
D3DXColorScale() - Scales a color value.
D3DXColorSubtract() - Subtracts two color values to create a new color value.

Pero estas funciones funcionan trabajando pixel a pixel y no en cojunto. Todas estas funciones pertenecen, al menos en la interfaz de VB, a la libreria D3DXMATH_COLOR.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Zaelsius

 @Grey: He consultado la MSDN sobre D3DRS_BLENDOP:

typedef enum _D3DBLENDOP {
   D3DBLENDOP_ADD = 1,
   D3DBLENDOP_SUBTRACT = 2,
   D3DBLENDOP_REVSUBTRACT = 3,
   D3DBLENDOP_MIN = 4,
   D3DBLENDOP_MAX = 5,
   D3DBLENDOP_FORCE_DWORD = 0x7fffffff
} D3DBLENDOP;


Pero parece que sólo define la operación al usar alpha blending:
http://msdn.microsoft.com/library/default....erstatetype.asp
D3DRS_BLENDOP
Value used to select the arithmetic operation applied when the alpha blending render state, D3DRS_ALPHABLENDENABLE, is set to TRUE. Valid values are defined by the D3DBLENDOP enumerated type. The default value is D3DBLENDOP_ADD.


Luego, me parece que no es lo que busco :P

@EX3: Sí, me refiero a modificar(invertir p.e.j.) los colores.







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.