Autor Wątek: Własny silnik problem opengl i vbo (wyświetlanie terenu)  (Przeczytany 1375 razy)

Offline prociomen007

  • Użytkownik

# Grudzień 27, 2009, 00:37:50
Męczę się i męczę i nie mam już pojęcia co jest nie tak. Mam problem z renderowaniem terenu w opengl z wykorzystaniem vbo.

jedna ważna funkcja

m_Vertex = (int) ( 512 * 512);
Vertex = new CVertex[m_Vertex]; // Przydzielenie pamięci dla wierzchołków

int pos =0;

for(int nZ = 0; nZ < 512; nZ++)
{
for(int nX = 0; nX < 512; nX++)
{
pos = nZ*512+nX;
Vertex[pos].x = nX;
Vertex[pos].y = (float)imageData[pos * 3];
Vertex[pos].z = nZ;
}
}

druga

float *vertices = new float[m_Vertex*3];
int a;
for(int i =0 ; i<m_Vertex; i++)
{
a = i*3;
vertices[a] = Vertex.x;
vertices[a+1] = Vertex.y;
vertices[a+2] = Vertex.z;
}

glBufferDataARB( GL_ARRAY_BUFFER_ARB, m_Vertex*3*sizeof(float), vertices, GL_STATIC_DRAW_ARB );


no i w main.cpp mam coś takiego przy renderingu
muj.LoadHeightmap(1,3);
muj.BuildVBOs();   
....
....
....
glPushMatrix();
      glEnableClientState( GL_VERTEX_ARRAY );
            glBindBufferARB( GL_ARRAY_BUFFER_ARB, muj.m_nVBOVertices );
            glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL );
            glDrawArrays( GL_TRIANGLES, 0, muj.m_Vertex*3);
      glDisableClientState(GL_VERTEX_ARRAY);
      glPopMatrix();


Wszystko się kompiluje debuguje linkuje uruchamia i wywala błąd Unhandled exception at 0x69091dd2 in silnik_2012.exe: 0xC0000005: Access violation reading location 0x00000000. Korzystam z biblioteki #include <GLee.h>
« Ostatnia zmiana: Grudzień 27, 2009, 10:40:53 wysłana przez prociomen007 »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline _OskaR

  • Użytkownik

# Grudzień 27, 2009, 00:49:28
Nie wiem, w czym piszesz, ale VS ma coś takiego jak debugger - wbrew pozorom bardzo fajna funkcja - możesz dzięki temu dotrzeć do miejsca w kodzie, które powoduje wysypywanie się programu.  :)
muj
A co to za robaczek ???
« Ostatnia zmiana: Grudzień 27, 2009, 00:52:57 wysłana przez _OskaR »

Offline prociomen007

  • Użytkownik

# Grudzień 27, 2009, 10:40:23
Kod wysypuje się w tym miejscu glDrawArrays( GL_TRIANGLES, 0, muj.m_Vertex*3);   
Wszystko działa kiedy glDrawArrays( GL_TRIANGLES, 0, 2);
ale powyżej 2 mam ten błąd. muj to objekt stworzony z klasy Cterrain w kturej znajdują się podane wyżej funkcje.

Offline ShadowDancer

  • Redaktor

# Grudzień 27, 2009, 11:08:22
A wiesz, że w j.polskim jest taka litera "ó"?

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Grudzień 27, 2009, 15:25:16
Jeah cały GameDev :> zamiast powiedziec chłopakowi gdzie może być błąd to sie beda czepiać nazwy "muj" a ja sobie obiekty nazywam "zw4gxc785f" :> tez sie dowalicie ogolnie procio to sie zle alokuje pamiec przejrzalem wlasny kod i kiedys tez miałem ten problem Eliaszu :>

Problem to w wypadku kart NV wystepuje w postaci VAX'a w postaci Pure Virtual Func Call co oznacza ze nadpisujesz pamiec w karcie graficznej :)
Zgłoś sie do mnie dzis wieczorem to ci pokze jak to zrobic zeby to miało rece i nogi :] pozdrawiam.

Offline Kuba D.

  • Użytkownik

# Grudzień 27, 2009, 15:56:01
Zawsze trzeba sprawdzać błędy podczas tworzenia VBO ( od tego są funkcje w stylu glError(..) ). Jak jest jakiś błąd przy tworzeniu to wiadomo że jest coś nie tak i działać to nie będzie.