Tworzenie tablic - pytania

0

Witam,
Chciałbym rozwiać moje wątpliwości na temat tablic, gdyż albo ja ich nie rozumiem, albo coś jest nie tak ;) Ale po kolei:
zaczynam robić coś w openGL'u i chcę narysować kwadrat. Na początek muszę określić współrzędne wszystkich wierzchołków. Do tego służy mi tablica vertices.
Wg. tutoriala, mam to zrobić tak:

 
//tablica
private float vertices[] = {
			-1.0f, -1.0f,  0.0f,		// V1 - bottom left
			-1.0f,  1.0f,  0.0f,		// V2 - top left
			 1.0f, -1.0f,  0.0f,		// V3 - bottom right
			 1.0f,  1.0f,  0.0f			// V4 - top right
	};
[...]
//wewnatrz ktorejs z funkcji
vertexBuffer.put(vertices); //ta funkcja przyjmuje tylko i wyłącznie zmienne float

Ja niestety nie mogę z góry określić wielkości tego kwadratu, gdyż wymyśliłem że będzie to robił użytkownik. Zrobiłem więc tak:

 
private float vertices[][];
[...]
//wewnątrz którejś z funkcji
vertices[0][0] = -(width/2);
vertices[0][1] = -(width/2);
vertices[1][0] = -(width/2);
vertices[1][1] = (width/2);
vertices[2][0] = (width/2);
vertices[2][1] = -(width/2);
vertices[3][0] = (width/2);
vertices[3][1] = (width/2);
[...]
vertexBuffer.put(vertices);

No i lekko mnie zaskoczył ten błąd:

The method put(float) in the type FloatBuffer is not applicable for the arguments (float[][])

Występuje on w tej linijce:
vertexBuffer.put(vertices);
Kiedy stosuję drugi sposób. Czytałem tutaj: http://javastart.pl/podstawy-jezyka/tablice-jednowymiarowe/ że oba przypadki są tablicami i różnią się jedynie sposobem zapisu.
Dlaczego więc zmienna vertices w sposobie 1 jest widziana jako float, a w sposobie 2 jaki float[][]?
Z góry dziękuję.

0

Deklaracje są różne, w pierwszym przypadku deklarujesz zmienna vertices jako tablicę jednowymiarową (float[]), w drugi jako tablice dwuwymiarową (float[][]).

0

Faktycznie 0.0 Byłem przekonany że ta tablica jest dwuwymiarowa -.-
A czy jest jakaś możliwość, żeby gdzieś w którejś z funkcji podmienić dane w tej tablicy na jakieś inne w ten sam sposób (otaczając klamrą).
Taki typ zapisu jest trochę mało wygodny:

vertices[0] = -(width/2);
		vertices[1] = -(height/2);
		vertices[3] = -(width/2);
		vertices[4] = (height/2);
		vertices[6] = (width/2);
		vertices[7] = -(height/2);
		vertices[9] = (width/2);
		vertices[10] = (height/2);

Dużo lepiej jest użyć tego:

private float vertices[] = {
			-1.0f, -1.0f,  0.0f,		// V1 - bottom left
			-1.0f,  1.0f,  0.0f,		// V2 - top left
			 1.0f, -1.0f,  0.0f,		// V3 - bottom right
			 1.0f,  1.0f,  0.0f			// V4 - top right
	};

Tyle że za każdym razem sypie błędem...

EDIT:
W sumie da się zrobić tak:

float vertices[] = {
				-1.0f, -1.0f,  0.0f,		// V1 - bottom left
				-1.0f,  1.0f,  0.0f,		// V2 - top left
				 1.0f, -1.0f,  0.0f,		// V3 - bottom right
				 1.0f,  1.0f,  0.0f			// V4 - top right
		};

Ale to już chyba nie ta sama zmienna

1 użytkowników online, w tym zalogowanych: 0, gości: 1