Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно динамически создать масив GLubyte mas[100][100][4]? / 8 сообщений из 8, страница 1 из 1
12.07.2005, 23:44
    #33162409
dinam
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
Как правильно динамически создать масив GLubyte mas[100][100][4]?

код:

GLubyte ***CVET_PIXSEL;
int p_CHIRINA=100, p_VISOTA=100, p_CVET=4;
int i,j;
scanf("%d %d %d",&p_CHIRINA,&p_VISOTA,&p_CVET);
CVET_PIXSEL=(GLubyte ***)calloc(p_CHIRINA,sizeof(GLubyte **));
for (i=0; i<=p_CHIRINA; i++)
{
CVET_PIXSEL =(GLubyte **)calloc(p_VISOTA,sizeof(GLubyte *));
for (j=0; j<=p_VISOTA; j++) CVET_PIXSEL[j]=(GLubyte *)calloc(p_CVET,sizeof(GLubyte));
}

работает некорректно с функцией opengl - "glTexSubImage2D".
Статически созданый масив GLubyte mas[100][100][4] работает прекрасно.
Тут проблема в размерности динамически созданного масива, или функция "glTexSubImage2D" не работает с динамически созданными масивами.
Если кто знает - ответьте.
...
Рейтинг: 0 / 0
13.07.2005, 00:17
    #33162424
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
Нет, тут проблема с неумением считать звезды. И непониманием что такое массив вообще.
Код: plaintext
1.
2.
3.
4.
GLubyte *CVET_PIXEL;
CVET_PIXEL = (GLubyte*)malloc(p_CHIRINA * p_VISOTA * p_CVET * sizeof(GLubyte));

CVET_PIXEL[x*p_CHIRINA*p_VISOTA + y*p_VISOTA + z] = RED;
Никогда не называй переменные по русски - через полгода сам не сможешь их прочитать.
...
Рейтинг: 0 / 0
18.07.2005, 22:37
    #33172358
_Alexei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
Или, если еще больше на С++, то вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
template <typename C> C*const*const*const Alloc3DArray (const int sx,const int sy,const int sz)
{
	typedef C** PPVAL;
	typedef C*  PVAL;
	C** pTemp;
	PPVAL *pPPVAL = new PPVAL[sx];//C** *pppVal = new C**[sx];
	for (int i =  0 ;i<sx;++i)
	{
		
		pPPVAL[i]= new PVAL[sy];
		

		for (int j =  0 ;j<sy;++j)
		{
			pPPVAL[i][j] = new C[sz];
		
		}

	}
	return pPPVAL;

}
int _tmain()
{
	
	char*const*const*const pchar  = Alloc3DArray<char>( 5 , 5 , 5 );
pchar[ 1 ][ 1 ][ 1 ] = 1 ; 
	Dealloc3DArray(C*const*const*const pppC, int sX,int sY, int sZ)
	{
/*Сами пишите*/ 
	}
	
Или ссуть такая, в деталях(например, порядке выделения памяти, я мог перепутать чего-нибудь, а думать - лень, потому, что выпил)

А еще я бы сделал свой класс
Или шаблонный класс
...
Рейтинг: 0 / 0
18.07.2005, 23:10
    #33172379
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
_AlexeiИли, если еще больше на С++, то вот так:
....
Или ссуть такая, в деталях(например, порядке выделения памяти, я мог перепутать чего-нибудь, а думать - лень, потому, что выпил)
А думать никогда не вредно.
Человеку явно нужен массив для работы с OpenGL. А оно, как и большинство интерфейсов, работает с линейными массивами а не с ветвистой структурой.
...
Рейтинг: 0 / 0
19.07.2005, 09:33
    #33172588
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
Существует единая формула равертывания многомерного
вектора в одномерный. Проблема для автора топика
может быть в том, насколько удобно обращатся
к многомерному вектору через cube_vector::get(i,j,k....).
Возможно постановка задачи более тривиальна и не потребует
такого подхода.

ИМХО.
...
Рейтинг: 0 / 0
19.07.2005, 09:33
    #33172589
dwl
dwl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
Лучше имхо написать враппер на одномерном массиве (физически, то что в памяти будет лежать - это будет тоже самое), с перекрытыми operator[].
...
Рейтинг: 0 / 0
19.07.2005, 11:59
    #33173037
_Alexei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
White Owl _AlexeiИли, если еще больше на С++, то вот так:
....
Или ссуть такая, в деталях(например, порядке выделения памяти, я мог перепутать чего-нибудь, а думать - лень, потому, что выпил)
А думать никогда не вредно.
Человеку явно нужен массив для работы с OpenGL. А оно, как и большинство интерфейсов, работает с линейными массивами а не с ветвистой структурой.
Читать тоже полезно уметь:)
Прочтите вопрос еще раз
Надо массив
GLubyte***
просили обращение
GLubyte[x][y][z]
у вас же
GLubyte*
и обращение GLubyte(x+y+z)

разница есть?

"Ты минералочки хотел, так я тебе печенья принес"
...
Рейтинг: 0 / 0
19.07.2005, 12:22
    #33173111
Сергей Ильич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно динамически создать масив GLubyte mas[100][100][4]?
_Alexei
Читать тоже полезно уметь:)
Прочтите вопрос еще раз
Надо массив
GLubyte***
просили обращение
GLubyte[x][y][z]
у вас же
GLubyte*
и обращение GLubyte(x+y+z)
Сам читать не умеешь. GLubyte*** несовместим с GLubyte[100][100][4], исходя из этого автору GLubyte*** не нужен.
Чтобы были тройные скобочки нужен operator[], который возвращает тип к которому применим operator[], который в свою очередь возвращает тип к которому тоже применим operator[]. типа

Код: C++
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
class Array3D
{
  GLubyte *const _rawData;
public:
  ...
  class Array2D
  {
    class Array1D
    {
      ...
      GLubyte& operator[](int index)
      {
       ...
      }
    }
    ...
    Array1D& operator[](int index)
    {
     ...
    }
  }
  ...
  Array2D& operator[](int index)
  {
   ...
  }
};
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно динамически создать масив GLubyte mas[100][100][4]? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]