Duvida openGL

12 respostas
F

Vini
assim, eu consiguo pegar a cor da tela com o
BufferedImage image;
image.getRGB(start_x, start_y); //assim eu pego a cor dessa posição na tela

Color c;

int cor = c.getRGB();

imagem.setRGB(x, y, cor); e assim eu seto a cor dessa posição

Tem como fazer isso OpenGL ?

Obrigado pela atenção!!!

12 Respostas

ViniGodoy

Você quer fazer isso numa textura?

ViniGodoy

Dê uma olhada na função:

F

Tipo, eu tenho essa função,

public void floodfill(BufferedImage image, int new_color, int start_x, int start_y) {

final int width = image.getWidth();

final int height = image.getHeight();

final int old_color = image.getRGB(start_x, start_y);

.

.

.

if (x > 0 && image.getRGB(x - 1, y) == old_color) { // aqui eu vou recuperar a cor do pixel da esquerda
eu preciso recuperar a cor do pixel da coordenada x e y
	
	com essa função "glReadPixels" eu consigo fazer isso?
F

Vini,
tem alguma função que fça mais ou menos o q essa glReadPixels faz, mas que me retorne um “int” ?

pode me passar um exemplo dessa função c/ os dados?

Obrigado!!

ViniGodoy

Não sei, que eu me lembre não. Mas pq vc mesmo não transforma num int?

F

vini,
Eu simplesmente queria recuperar a cor do pixel da coordenada q estou passando para poder comparar com outra cor que eu pegar de outra coordenada. eu preciso fazer um for e ir pegando pixel por pixel e olhando a cor dele. como faço isso? pode me dá uma rotina se souber?

vlw =)

ViniGodoy

Ok, mas é o pixel da geometria, do back buffer, de alguma textura ou de uma imagem arbitrária?

F

sim,
eu tenho,

initComponents();
GLCanvas canvas = new GLCanvas();

setTitle("Transformacoes 2D");
    add(canvas);
    //Tamanho do frame
    setSize(808, 634);       
    canvas.addGLEventListener(t);
    //Define o tamanho do canvas no frame
    canvas.setBounds(200, 0, 600, 600);

dai eu desenho tipo um triangulo e depois vou querer no click do mouse recuperar a cor do pixel de dentro do triangulo.

ViniGodoy

Ok, se vc quer só recuperar a cor do triängulo, então é do backbuffer que estamos falando. É só usar o método que eu te passei.

Use ela para ler um carro de bytes. Cada 3 ou 4 bytes (dependendo se vc tem alfa ou não) representam cada canal de cor. Se quiser transformar essas cores num int, é só fazer:

int cor = r; cor = (cor << 8) + g; cor = (cor << 8) + b; cor = (cor << 8) + a;

Agora, o OpenGL também tem um recurso chamado "Picking", que permite a seleção de formas num ambiente 3D.
http://www.lighthouse3d.com/opengl/picking/

F
ok.

como se faz?

gl.glReadPixels(start_x,start_y,width,height,gl.GL_LUMINANCE,gl.GL_INT,0);

int cor =  r;

cor = (cor << 8) + g;

cor = (cor << 8) + b;

cor = (cor << 8) + a;

de onde vem rgba?

desse jeito eu posso ir pegando a cor pixel a pixel? pq eu preciso saber, para q o algoritmo possa ir pintando ou não, pixel a pixel

desculpe :slight_smile: eu sou novo nesse negocio de usar openGL

ViniGodoy

É melhor você começar a estudar o básico, antes de tentar voos mais altos, então.

Pega o meu site e lê os artigos sobre cores, luzes, transformações.
Infelizmente ainda não escrevi sobre os diversos buffers do OpenGL (preferi uma abordagem mais prática).

Procure sobre os diversos buffers do OpenGL: BackBuffer, ClipBuffer, TextureBuffer, etc.

F

Vinni,

Como eu sei se um pixel esta pintado ou não na tela? como verifico isso?
isto é, alguma função que me retorne:
int cor = getCor_da_Coordenada(x,y);

vlw?

Criado 10 de setembro de 2008
Ultima resposta 12 de set. de 2008
Respostas 12
Participantes 2