/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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.



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste