pierwsze zajęcia
Transkrypt
pierwsze zajęcia
1. Clipping area
Obszar naszego ukladu współrzędnych w którym tworzymy naszą scenę
2. Viewport
Fragment okna na ekranie w które mapowany jest clipping area. Zazwyczaj jest to całe okno, ale
nic nie stoi na przeszkodzie aby była to ćwiartka okna. W takim przypadku nasza scena
znajdująca się w clipping area lub w clipping volume rysowana jest w ćwiartce okna.
3. Projections
a. prostokątna - orthogtraphic projection
b. perspektywiczna
obiekty bliżej wydają się większe niż obiekty ulokowanej dalej
4. Rodzaje bibliotek używanych w OpenGL
5. Typy danych:
OpenGL Data Type
Internal
representation
Defined as C Type
C Literal Suffix
GLbyte
8 – bit integer
Signed char
b
GLshort
16 – bit integer
short
s
GLint, GLsizei
32 – bit integer
long
I
GLfloat, GLclampf
32 – bit floating point
float
f
GLdouble, GLclampd
64 – bit floating point
double
d
GLubyte, GLboolean
8 – bit unsigned integer Unsigned char
ub
GLushort
16 – bit unsigned
integer
Unsigned short
us
GLuint, GLenum,
GLbitfield
32 – bit unsigned
integer
Unsigned long
ui
6. Nazewnictwo funkcji
glColor3f(...)
7. Sprawdzić czy jest w systemie plik:
a. opengl32.dll (c:\winnt\system32)
b. glu32.dll (c:\winnt\system32)
c. glaux.lib lub glut.dll (c:\winnt\system32)
d. w przypadku pliku glaux.lib mozna go zbudować ze źródeł
Jeśli nie ma tych plików to trzeba je ściągnąć z sieci i ewentualnie skompilować
8. Sprawdzić czy w katalogu bibliotek kompilatora znajdują się następujące pliki:
a. opengl32.lib
b. glu32.lib
c. glut.lib
d. w przypadku glaux.lib umieścić plik we własnym katalogu
Jeśli nie to należy te pliki zbudować (na przykład w pakietach borlanda:
implib glu32.lib glu32.dll)
i umieścić w katalogu bibliotek
9. napisać program:
#define GLUT_NO_LIB_PRAGMA
//#define GLUT_DISABLE_ATEXIT_HACK
#include <gl/glut.h>
#include <conio.h>
#include <gl/gl.h>
void display(void)
{
glFlush();
#include <gl/glaux.h>
#include <conio.h>
#include <gl/gl.h>
void main()
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
auxInitPosition(100,100, 250, 250);
auxInitWindow("Nasz pierwszy program w
OpenGL");
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(500, 250);
glutCreateWindow("Nasz pierwszy program w
}
OpenGL");
glFlush();
cprintf("wcisnij dowolny klawisz\n");
getch();
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glutDisplayFunc (display);
}
glutMainLoop();
10.Wykonać ćwiczenia:
a. utwórz okno o nazwie “moj program w OpenGL”
b. Utwórz okno na pozycji 250, 100 i rozmiarze 200x200
c. utwórz okno wypełnione kolorem czerwonym, zielonym, żółtym, białym, szarym, cyan i
magenta
#include <windows.h>
#include <conio.h>
#include <gl/gl.h>
#include <gl/glaux.h>
double r = 0;
void CALLBACK RenderScene()
{
glClearColor(r, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
void CALLBACK IdleFunction()
{
r += 0.1;
if(r > 1.0)
r=0;
::Sleep(10);
RenderScene();
}
void main()
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
auxInitPosition(100,100, 250, 250);
auxInitWindow("Nasz pierwszy program w OpenGL");
auxIdleFunc(IdleFunction);
glFlush();
}
auxMainLoop(RenderScene);
11.napisać powyższy program.
12.Wykonać ćwiczenia:
a. Zmienić program tak aby wyświetlał wszystkie kolory
r → 0 .. 1, b → 0 .. 1 i g → 0 .. 1 np.: r=0, b=0, g=0; ...; r=0, b=0, g=1; r=0, b=0.1, g=0; ...;
r=0, b=0.1, g=0..1; r=1, b=1, g=1
13.napisać poniższy program:
Należy sobie uzmysłowić że współrzędne w openGL są liczone od lewego dolnego rogu okna! W
WIN jest inaczej!
#include <gl/glaux.h>
#include <conio.h>
void main()
#include <gl/gl.h>
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
void CALLBACK RenderScene()
auxInitPosition(100,100, 250, 250);
{
auxInitWindow("program w OpenGL");
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
auxMainLoop(RenderScene);
}
glColor3f(1.0f, 0.0f, 0.0f);
glRectf(100.0f, 150.0f, 150.0f, 100.0f);
glFlush();
}
14.Poniższy program demonstruje reakcję na zmianę rozmiaru okna
#include <gl/glaux.h>
void CALLBACK RenderScene()
{
#include <conio.h>
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
#include <gl/gl.h>
glClear(GL_COLOR_BUFFER_BIT);
void CALLBACK ChangeSize(GLsizei w, GLsizei h)
glColor3f(1.0f, 0.0f, 0.0f);
{
glRectf(100.0f, 150.0f, 150.0f, 100.0f);
if(h == 0)
h = 1;
if(w == 0)
glFlush();
}
w = 1;
glViewport(0, 0, w, h);
void main()
glLoadIdentity();
{
if(w <= h)
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
glOrtho(0, 250, 0, 250 *h/w, 1, -1);
auxInitPosition(100,100, 250, 250);
else
auxInitWindow("program w OpenGL");
glOrtho(0, 250*w/h, 0, 250, 1, -1);
auxReshapeFunc(ChangeSize);
}
auxMainLoop(RenderScene);
}
15. Program w GLUT
#define GLUT_NO_LIB_PRAGMA
#include <gl/glut.h>
void main(int argc, char** argv)
#include <conio.h>
{
#include <gl/gl.h>
void RenderScene()
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(250, 250);
glutCreateWindow("Nasz pierwszy program w
OpenGL");
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glOrtho(0, 250, 0, 250, 1, -1);
glClear(GL_COLOR_BUFFER_BIT);
glutDisplayFunc (RenderScene);
glColor3f(1.0f, 0.0f, 0.0f);
glRectf(100.0f, 150.0f, 150.0f, 100.0f);
glutMainLoop();
glFlush();
}
16.
}