Mam problem z ustaleniem współrzędnych dla owoców. Muszę narysować: jabłko z ogonkiem, gruszkę z ogonkiem i banana.
Zaczęłam od gruszki i wychodzi mi głupota.
Kompletnie tego nie ogarniam jak to narysować.
Błagam o pomoc. Jakie ustalić współrzędne dla tych owoców
Kod programu:
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
// punkty kontrolne krzywej
//gruszka odcinek 1
GLfloat points[ 12 ] =
{
25.0, 255.0, 0.0,
15.0, 295.0, 0.0,
45.0, 255.0, 0.0,
50.0, 295.0, 0.0
};
//50.0, 50.0, 0.0, 50.0, 450.0, 0.0, 450.0, 50.0, 0.0, 450.0, 450.0, 0.0
//nowa wersja 80.0, 100.0, 0.0, 10.0, 450.0, 0.0, -10.0, 50.0, 0.0, 100.0, 200.0, 0.0
////gruszka odcinek 2
GLfloat points2[ 12 ] =
{
55.0, 255.0, 0.0,
35.0, 295.0, 0.0,
55.0, 255.0, 0.0,
50.0, 295.0, 0.0
};
////gruszka odcinek 3
GLfloat points3[ 12 ] =
{
//55.0, 255.0, 0.0,
//35.0, 295.0, 0.0,
//55.0, 255.0, 0.0,
//50.0, 295.0, 0.0
};
//25.0, 25.0, 0.0, 25.0, 200.0, 0.0, 200.0, 25.0, 0.0, 200.0, 200.0, 0.0
// identyfikatory wyświetlanych obiektów
enum
{
NONE,
CURVE,
POINT_0,
POINT_1,
POINT_2,
POINT_3
};
// funkcja generująca scenę 3D
void Display()
{
// kolor tła - zawartość bufora koloru
glClearColor( 1.0, 1.0, 1.0, 1.0 );
// czyszczenie bufora koloru
glClear( GL_COLOR_BUFFER_BIT );
// włączenie generowana współrzędnych (x,y,z) punktów krzywej
glEnable( GL_MAP1_VERTEX_3 );
// ewaluator jednowymiarowy dla czterech punktów kontronych
glMap1f( GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, points );
// ustawienie grubości linii
glLineWidth( 2.0 );
// kolor krzywej
glColor3f( 1.0, 0.0, 0.0 );
// narysowanie krzywej złożonej z 25 odcinków
glBegin( GL_LINE_STRIP );
for( int i = 0; i <= 25; i++ )
glEvalCoord1f(( GLfloat ) i / 25.0 );
glEnd();
// ewaluator jednowymiarowy dla czterech punktów kontronych
glMap1f( GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, points2 );
// ustawienie grubości linii
glLineWidth( 2.0 );
// kolor krzywej
glColor3f( 1.0, 0.0, 0.0 ); //kolor żółty 1,1,0
// narysowanie krzywej złożonej z 25 odcinków
glBegin( GL_LINE_STRIP );
for( int i = 0; i <= 25; i++ )
glEvalCoord1f(( GLfloat ) i / 25.0 );
glEnd();
// ewaluator jednowymiarowy dla czterech punktów kontronych
glMap1f( GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, points3 );
// ustawienie grubości linii
glLineWidth( 2.0 );
// kolor krzywej
glColor3f( 1.0, 0.0, 0.0 );
// narysowanie krzywej złożonej z 25 odcinków
glBegin( GL_LINE_STRIP );
for( int i = 0; i <= 25; i++ )
glEvalCoord1f(( GLfloat ) i / 25.0 );
glEnd();
// kolor punktów
glColor3f( 0.0, 1.0, 0.0 );
// narysowanie pierwszego punktu kontrolnego
glRectf( points[ 0 ] - 5, points[ 1 ] - 5, points[ 0 ] + 5, points[ 1 ] + 5 );
// narysowanie drugiego punktu kontrolnego
glRectf( points[ 3 ] - 5, points[ 4 ] - 5, points[ 3 ] + 5, points[ 4 ] + 5 );
// narysowanie trzeciego punktu kontrolnego
glRectf( points[ 6 ] - 5, points[ 7 ] - 5, points[ 6 ] + 5, points[ 7 ] + 5 );
// narysowanie czwartego punktu kontrolnego
glRectf( points[ 9 ] - 5, points[ 10 ] - 5, points[ 9 ] + 5, points[ 10 ] + 5 );
// skierowanie poleceń do wykonania
glFlush();
// zamiana buforów koloru
glutSwapBuffers();
}
// zmiana wielkości okna
void Reshape( int width, int height )
{
// obszar renderingu - całe okno
glViewport( 0, 0, width, height );
// wybór macierzy rzutowania
glMatrixMode( GL_PROJECTION );
// macierz rzutowania = macierz jednostkowa
glLoadIdentity();
// rzutowanie prostokątne
gluOrtho2D( 0, width, 0, height );
// generowanie sceny 3D
Display();
}
int main( int argc, char * argv[] )
{
// inicjalizacja biblioteki GLUT
glutInit( & argc, argv );
// inicjalizacja bufora ramki
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
// rozmiary głównego okna programu
glutInitWindowSize( 500, 500 );
// utworzenie głównego okna programu
#ifdef WIN32
glutCreateWindow( "Krzywa Béziera" );
#else
glutCreateWindow( "Krzywa Beziera" );
#endif
// dołączenie funkcji generującej scenę 3D
glutDisplayFunc( Display );
// dołączenie funkcji wywoływanej przy zmianie rozmiaru okna
glutReshapeFunc( Reshape );
// wprowadzenie programu do obsługi pętli komunikatów
glutMainLoop();
return 0;
}
Proszę o pomoc