Üdv!
Ismét problémába ütköztem :)
A kérdés a következő: Androidra kéne OpenGL programot írni... Szerencsére rátaláltam az NDK-ra amivel natív C kódban tudok írni. Ezzel nincs is gond, a gáz az, hogy nem tudok OpenGL elemeket megjeleníteni. Ugyanis a régi glVertex() már nincs benne az android által használt GLES library-ben. Ezért akkor, gondoltam belekezdek a csúcstömbökbe. Találtam is jó példakódot (hello-gl2) nézegettem stb. de mivel a transzormációk nem voltak, ezért max 2D-ben tudnék tologatni dolgokat, koordináták alapján. Aztán rátaláltam erre a san-angeles sample-re ami jó volt mivel beimportálta részben az OpenGL transzformációkat. A gáz az, hogy elég összetett a kód... Próbáltam szétszedni sikerült is lebutítani, hogy csak a ground legyen, de aztán eltűnt minden a program crashel induláskor. (a problémás rész a glDrawArrays) fordító szerint OK:
a háromszög amit meg kéne jeleníteni:
const GLfloat TriangleVertices[] = { 0.0f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f };
a renderben a megjelenítés:
glPushMatrix();
glVertexPointer(3, GL_FLOAT, 0, TriangleVertices);
glDrawArrays(GL_TRIANGLES, 0, 9); //ez a problémás sor
glPopMatrix();
Bármilyen help jól jön akár egy kicsi működő példakód ahonnal el tudnék indulni, akár egy ötlet, hogy más megjelenítési próbálkozás stb.
thx:RiseR
- 2097 megtekintés
Hozzászólások
glDrawArrays() -nak syerintem utolsó paraméternek 3-at adj meg, hiszen három elemről van szó. (azt tudja a glVertexPointer alapján, hogy három koordinátája van egy-egy elemnek)
- A hozzászóláshoz be kell jelentkezni
kipróbáltam 3-al de ugyanúgy kilép, lehet, hogy az inittel van valami... (de akkor miért működik rajzolás nélkül?)
---
Where there is a shell, there is a way.
- A hozzászóláshoz be kell jelentkezni
Inicializalast bemasolod? Vagy nagyon hosszu?
--
Yesterday I set my wifi's name to "Hack this if you can".
When I checked it today, it was called "Challenge accepted".
- A hozzászóláshoz be kell jelentkezni
Itt van:
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (float)width / height, 0.5f, 150);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Mivel nincs bent alapból a gluPerspective ezért azt meg kellett írni (kódból szedtem)
void gluPerspective(GLfloat fovy, GLfloat aspect,
GLfloat zNear, GLfloat zFar)
{
GLfloat xmin, xmax, ymin, ymax;
ymax = zNear * (GLfloat)tan(fovy * PI / 360);
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
glFrustumx((GLfloat)(xmin * 65536), (GLfloat)(xmax * 65536),
(GLfloat)(ymin * 65536), (GLfloat)(ymax * 65536),
(GLfloat)(zNear * 65536), (GLfloat)(zFar * 65536));
}
---
Where there is a shell, there is a way.
- A hozzászóláshoz be kell jelentkezni
Esetleg ezzel együtt?
glEnableClientState(GL_VERTEX_ARRAY);
- A hozzászóláshoz be kell jelentkezni
Ez a draw előtt bent van...
---
Where there is a shell, there is a way.
- A hozzászóláshoz be kell jelentkezni
És egyéb tömbök nincsenek engedélyezve? Pl. GL_INDEX_ARRAY, GL_NORMAL_ARRAY, stb. ?
- A hozzászóláshoz be kell jelentkezni
csak a color array de tudtommal csak akkor kell a többit ha azokat akarjuk használni...
---
Where there is a shell, there is a way.
- A hozzászóláshoz be kell jelentkezni
Akkor azt szerintem szedd ki, mert ha engedélyezve van, de nincs definiálva hozzá tömb, akkor attól crashelhet.
- A hozzászóláshoz be kell jelentkezni
igazad volt! köszi. :) ez sokat segített!
---
Where there is a shell, there is a way.
- A hozzászóláshoz be kell jelentkezni