Me gustaría obtener el color del píxel en mi juego y guardar este color en la variable. ¿Cómo hacerlo en OpenGL?¿Cómo obtener el color del píxel? OpenGL
5
A
Respuesta
9
#include <GL/glut.h>
#include <iostream>
using namespace std;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10, 10, -10, 10, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glScalef(5,5,5);
glBegin(GL_TRIANGLES);
glColor3ub(255,0,0);
glVertex2f(-1,-1);
glColor3ub(0,255,0);
glVertex2f(1,-1);
glColor3ub(0,0,255);
glVertex2f(1,1);
glEnd();
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y)
{
y = glutGet(GLUT_WINDOW_HEIGHT) - y;
unsigned char pixel[4];
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixel);
cout << "R: " << (int)pixel[0] << endl;
cout << "G: " << (int)pixel[1] << endl;
cout << "B: " << (int)pixel[2] << endl;
cout << endl;
}
int main(int argc, char **argv)
{
glutInitWindowSize(640,480);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow("glReadPixels()");
glutDisplayFunc(display);
glutPassiveMotionFunc(motion);
glutMainLoop();
return 0;
}
5
struct{ GLubyte red, green, blue; } pixel;
glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &pixel);
1
#include <math.h>
#include <gl/glut.h>
struct Point {
GLint x;
GLint y;
};
struct Color {
GLfloat r;
GLfloat g;
GLfloat b;
};
void init() {
glClearColor(1.0, 1.0, 1.0, 0.0);
glColor3f(0.0, 0.0, 0.0);
glPointSize(1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 640, 0, 480);
}
//this function is used for getting color of pixel
Color getPixelColor(GLint x, GLint y) {
Color color;
glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, &color);
return color;
}
void setPixelColor(GLint x, GLint y, Color color) {
glColor3f(color.r, color.g, color.b);
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
glFlush();
}
void floodFill(GLint x, GLint y, Color oldColor, Color newColor) {
Color color;
color = getPixelColor(x, y);
if(color.r == oldColor.r && color.g == oldColor.g && color.b == oldColor.b)
{
setPixelColor(x, y, newColor);
floodFill(x+1, y, oldColor, newColor);
floodFill(x, y+1, oldColor, newColor);
floodFill(x-1, y, oldColor, newColor);
floodFill(x, y-1, oldColor, newColor);
}
return;
}
void onMouseClick(int button, int state, int x, int y)
{
Color newColor = {1.0f, 0.0f, 0.0f};
Color oldColor = {1.0f, 1.0f, 1.0f};
floodFill(320, 240, oldColor, newColor);
}
void draw_circle(Point pC, GLfloat radius) {
GLfloat step = 1/radius;
GLfloat x, y;
for(GLfloat theta = 0; theta <= 360; theta += step) {
x = pC.x + (radius * cos(theta));
y = pC.y + (radius * sin(theta));
glVertex2i(x, y);
}
}
void display(void) {
Point pt = {320, 240};
GLfloat radius = 50;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
draw_circle(pt, radius);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(640, 480);
glutInitWindowPosition(200, 200);
glutCreateWindow("Open GL");
init();
glutDisplayFunc(display);
glutMouseFunc(onMouseClick);
glutMainLoop();
return 0;
}
Cuestiones relacionadas
- 1. Obtener el color del píxel en su ubicación con pygame
- 2. Obtener color de píxel de UIImage
- 3. ¿Cómo obtener el color de un píxel en una UIView?
- 4. OpenGL - Cómo dibujar píxel cuadrado con GL_POINTS
- 5. Obtener el RGB de píxel con PIL
- 6. Obtener el valor de píxel del archivo BMP
- 7. Obtener el color actual
- 8. rmagick valor de color de píxel
- 9. obteniendo color de píxel con Magick ++
- 10. Configuración de color de píxel del archivo BMP/JPG
- 11. ¿Cómo obtener el color de coordenada x, y de un píxel de una imagen?
- 12. Obtén color de píxel más rápido?
- 13. Encontrar el color del píxel en una coordenada específica de un sampler2D usando GLSL
- 14. iOS Performance Tuning: forma más rápida de obtener el color de píxel para imágenes grandes
- 15. OpenGL ES: Cómo teñir la textura con el color
- 16. DirectX establece el color de un solo píxel
- 17. cómo obtener el color de fondo del botón en Android?
- 18. Como lee el color del píxel en un BufferedImage java con la transparencia
- 19. color de fondo en OpenGL
- 20. ¿Cómo obtengo el color de un píxel en X, Y usando C#?
- 21. Actionscript 3: obtener objeto de visualización en el píxel
- 22. Java obtener color y tamaño del borde
- 23. Obtener el color de fondo predeterminado del componente oscilante
- 24. ¿Cómo acceder al color de píxel dentro de un mapa de bits?
- 25. ¿Cómo encontrar el valor de transparencia del canal alfa de un píxel en una imagen png?
- 26. OpenGL: Cargar una textura cambia el color actual
- 27. ¿Cómo dejar que el borde izquierdo se superponga al borde inferior del píxel inferior izquierdo?
- 28. Cómo cambiar el color de HUD lugar del color gris
- 29. ¿Cómo puedo activar (cambiar el color) de un solo píxel por coordenadas en WPF
- 30. ¿Cómo puedo establecer el color de un píxel en un lienzo usando WebGL?
código Hermosa, corto y funciona como se esperaba. Ha colocado un código para verificar/mostrar el color del píxel dentro del procedimiento de visualización. Funciona rápido, pero cuando el dibujo es más complicado, el programa no funciona correctamente. ¿Qué hay de poner encima del código dentro del procedimiento de movimiento, como [aquí]? (Http://en.wikibooks.org/wiki/Fractals/Computer_graphic_techniques/2D/gfile#Viewer_for_programmers) – Adam
@ Adam: Sí, editado. – genpfault