|
| 2D med opengl/directx Fra : Klaus Petersen |
Dato : 22-03-03 21:00 |
|
Hej.
Kan nogen forklare mig teknikken bag det at vise 2D grafik med opengl og
directx?
| |
Ukendt (23-03-2003)
| Kommentar Fra : Ukendt |
Dato : 23-03-03 09:38 |
|
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in news:b5ifct$93j$1
@sunsite.dk:
> Kan nogen forklare mig teknikken bag det at vise 2D grafik med opengl og
> directx?
Nu ved jeg ikke hvad du mener med teknikken bag det, men i bund og grund
nøjes man blot med at bruge de 2 dimensioner. Det gør mange ting lettere,
hvis man fx vil rotere eller skalere sine sprites, og da API'erne benytter
hardware-acceleration vil det køre hurtigt.
DirectX kender jeg ikke, men OpenGL kan nemt sættes op til at vise 2d
grafik. Man opretter blot en orthografisk projektionsmatrix, og benytter
glVertex2() funktionerne, som kun tager 2 parametre (nemlig x- og y-
koordinaterne). Eksempel:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// her kan du indsætte diverse transformationer
// tegn et kvadrat
glBegin(GL_QUADS)
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f);
glEnd();
Håber det kan hjælpe :)
-Christian
| |
Klaus Petersen (23-03-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 23-03-03 15:32 |
|
> glMatrixMode(GL_PROJECTION);
> glLoadIdentity();
> gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
Hm.. ville man ikke med fordel kunne bruge:
gluOrtho2D (0, 1023, 768, 0);
.... for en 1024x768 opløsning ? - Så ville man måske undgå at regne alm.
skærmkoordinater om til at passe i intervallet [-1, 1]
Kan man være sikker på at gluOrtho2D virker ens på alle implementationer af
glu?
>
> glMatrixMode(GL_MODELVIEW);
> glLoadIdentity();
> // her kan du indsætte diverse transformationer
>
> // tegn et kvadrat
> glBegin(GL_QUADS)
> glVertex2f( 0.5f, 0.5f);
> glVertex2f(-0.5f, 0.5f);
> glVertex2f(-0.5f, -0.5f);
> glVertex2f( 0.5f, -0.5f);
> glEnd();
>
> Håber det kan hjælpe :)
> -Christian
| |
Ukendt (23-03-2003)
| Kommentar Fra : Ukendt |
Dato : 23-03-03 19:07 |
|
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in
news:b5kgh1$cqc$1@sunsite.dk:
> ville man ikke med fordel kunne bruge: gluOrtho2D (0, 1023, 768, 0);
Jo, selvfølgelig. Det er faktisk præcis det fx Quake2 Engine gør, når fx
konsollen skal vises ovenpå 3d scenen.
> Kan man være sikker på at gluOrtho2D virker ens på alle
> implementationer af glu?
Det er jeg faktisk ikke sikker på, for jeg bruger kun Windows. Ellers kan
du jo bruge:
glOrtho(
GLdouble left,
GLdouble right,
GLdouble bottom,
GLdouble top,
GLdouble zNear,
GLdouble zFar
);
Som i hvert fald er den samme for alle ogl implementationer. Faktisk er det
eneste gluOrtho2D gør, at kalde glOrtho() med zNear=1.0 og zFar=-1.0,
hvilket i praksis ikke har den store betydning, medmindre du bruger z-
bufferen til at sikre, at objekterne vises i den rigtige rækkefølge/dybde.
-Christian
| |
Klaus Petersen (23-03-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 23-03-03 19:58 |
|
Tak for dit svar. Det er et svar, jeg virkelig kan bruge til noget!
| |
Morten F. Hansen (23-03-2003)
| Kommentar Fra : Morten F. Hansen |
Dato : 23-03-03 13:15 |
|
> Kan nogen forklare mig teknikken bag det at vise 2D grafik med opengl og
> directx?
Med hensyn til DirectX skal du lave din vertex-definition noglelunde som
følger:
struct VERTEX_2D {
float x, y, z, rhw;
DWORD diffuse;
float u, v;
};
static const DWORD VERTEX_2D_FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;
Tricket er at bruge D3DFVF_XYZRHW så DirectX sender dine punkter uden
om view-, world- og projection-transformationerne og opfatter x og y direkte som
skærm-koordinater. Du skal sætte z til noget fornuftigt (0 f.eks.) og rhw til 1.
| |
Klaus Petersen (23-03-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 23-03-03 15:37 |
|
Takker for dit svar.
Du skulle vel ikke have noget kode liggende (Delphi eller C), hvor du bruger
den teknik, som jeg må se og prøve af?
Jeg kunne godt bruge at se det i en størrere samhæng - så er det lettere at
forstå.
Hvis du har må du meget gerne sende det til klaus<snabel
a>spectual.ra.bnaa.dk.
Klaus.
| |
|
|