How to distort a bitmap in C++

Status
Niet open voor verdere reacties.

Crypt545

Gebruiker
Lid geworden
16 jun 2009
Berichten
352
Ik werk met Allegro en Dev C++ en ben een spel aan het maken. Ik heb eerder eens een spel in Flash geprogrammeerd en daar had ik een distort image class. Nou ben ik zoiets voor C++ aan het zoeken maar kan het niet vinden.

Ik wil een Bitmap (een foto dus geen getekend viekantje in code) kunnen distorten.

++++++
++++++
++++++
++++++

***+++***
**++++**
*+++++*
++++++

een vierkante foto dus bijvoorbeeld in een trapezius veranderen zoals hierboven.
Je moet in de 4 nieuwe hoekpunten aan kunnen geven zoals je de nieuwe hight en width aangeeft in een resize functie als dit:

BITMAP *a,*b;
a = load_bitmap("tile.bmp",NULL);
b = create_bitmap(lalax,lalay);
stretch_blit(a, b, 0, 0, a->w, a->h, 0, 0, b->w, b->h);
destroy_bitmap(a);
 
Ik wordt er niet goed van... Voor Flash, Java voor alles kun je gewoon ff distort image classes of filters vinden, waarom niet voor C++?!!!
 
Hoe het kan dat je geen classes en filters kan vinden? Allegro is een erg oude graphics library (uit begin jaren '90) en toen waren de mogelijkheden beperkt. Computers konden nog niet veel aan, en programmeren was toen vrijwel alleen mogelijk voor professionals. De ontwikkeling van Allegro is midden jaren '90 stopgezet. Wel zijn er door derden later vele uitbreidingen uitgebracht, zoals libPNG en libMP3, welke te maken hadden met nieuwe populaire bestandsformaten. Wanneer je echt goed zoekt zal je uiteindelijk wel wat vinden, maar optimaal zal het nooit werken.

ps. Trapezius bestaat niet, het is een trapezium.
 
Stuk code for OpenGL welk een vierkant tekent en deze distort/draait. Als iemand weet hoe je dit aanpast voor een bitmap zou dat geweldig zijn.

int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer

glLoadIdentity(); // Reset The Current Modelview Matrix
glTranslatef(1.5f,0.0f,-6.0f); // Move Right 1.5 Units And Into The Screen 6.0
glRotatef(rquad,1.0f,0.0f,0.0f); // Rotate The Quad On The X axis ( NEW )
glColor3f(0.5f,0.5f,1.0f); // Set The Color To Blue One Time Only
glBegin(GL_QUADS); // Draw A Quad
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // Done Drawing The Quad
rtri+=0.2f; // Increase The Rotation Variable For The Triangle ( NEW )
rquad-=0.15f; // Decrease The Rotation Variable For The Quad ( NEW )
return TRUE; // Keep Going
}
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan