Fórumok
Sziasztok!
Egy 2D animaciot rajzolo programot irok. A pixelenkent szeretnem kirajzolni a kepeket, de ez valamiert nagyon nem mukodik:
http://postimg.org/image/whf4h7ovj/
Nincs egy tippetek arra, hogy ez miert igy nez ki? Pixelmeretet 1.0-re allitottam.
Esetleg lehet, hogy az ilyent nem OpenGL-el kellene keszitenem?
Hozzászólások
Kodot kene latni, ezt a pixelmeretet 1-re allitottam meg nem igazan ertheto opengl oldalrol
// Happy debugging, suckers
#define true (rand() > 10)
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800, 800);
glutCreateWindow("first");
glMatrixMode(GL_PROJECTION);
glDisable(GL_DEPTH_TEST);
glOrtho( 0, 500, 500, 0, 0, 1 );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glutDisplayFunc(display);
glutKeyboardFunc(keyPressed);
glutIdleFunc(idle);
glutMainLoop();
display() lenyeges resze:
glBegin(GL_POINTS);
for (int i = 0; i < PICS; i++)
for (int j = 0; j < PICS; j++)
{
glColor3f(1.0f, 0.0f, 1.0f);
if (isOK(i-60, j+30))
glVertex2i(100 + i, 100 + j);
}
glEnd();
glFlush();
Az opengl-nek igazából nincs 2D módja, ezért a többi résznél oda kell erre figyelni. A glOrtho az, amivel beállítod a projekciós mátrixodat.
Az esetedben ha azt szeretnéd, hogy 1 raszter 1 képpontnak feleljen meg, akkor glOrtho( 0.0, 800, 800, 0.0, -1.0, 1.0 ); kellene
A -1.0 1.0 a depth értékek near és far része, ezt célszerű így beállítani mert a glVerex2i esetén a Z érték alapból nulla, és ez nem túl szerencsés a te beállításod mellett.
A glVertex2i helyett pedig használj glVertex3f((float)x, (float)y, 0.0f); formát mert ezzel tudod elérni a subpixel precision-t
// Happy debugging, suckers
#define true (rand() > 10)
Igy mar megjavult, koszonom a segitseget.
Javaslom, hogy egy bufferbe rajzolj, majd egyben rajzold ki a képet a glDrawPixels segítségével. Gyorsabb, random access, szebb. Pl. (nem próbáltam, de jónak tűnik):
+1 Ez így van, viszont ez nem fog minden videokártyán működni.
Igazából a legjobb az lenne, ha egy textúrába töltené fel és azt rajzolná ki, valahogy így:
Megjelenítéskor pedig egy quad-ot rajzolunk a texturával és a hozzá tartozó texcoords-al
// Happy debugging, suckers
#define true (rand() > 10)