Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2008, 17:57   #1
Rozalinda
Пользователь
 
Аватар для Rozalinda
 
Регистрация: 11.01.2007
Сообщений: 54
По умолчанию Маджонг под DirectX

Доброго времени суток всем!
Особенно желающим помочь
Решила переписать ранее уже написанный мною маджонг под DirectX. Литературы по этой теме мало (жалуются и тут на форуме, видела уже), в общем, умею я создавать какие-нибудь простейшие фигурки (кубики, шарики, бублики...), и текстурки на них наложить смогу, а вот сделать нормальную кость, как полагается, с закругленными углами... вот этого сделать не знаю, как. Если есть знающие в этой области, поделитесь опытом. Обращалась уже на другие форумы, но там для меня все слишком умные, возиться не хотят, просто отправляют на что-нибудь англоязычное, а в таких объемах я его все-таки не выдерживаю
нашедшего выход - затаптывают
Rozalinda вне форума Ответить с цитированием
Старый 22.07.2008, 00:18   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
а в таких объемах я его все-таки не выдерживаю
Это плохо, все таки нужно знать язык международного общения. Хотя бы читать на нем, говорить на нем большинству из нас особо не с кем, а может и незачем. Вобщем там форумов - валом, информации - еще больше. Если вы осилили программирование, кубики даже в DX рисуете, неужели "ангельский" язык настолько сложен?
Простите за оффтоп (ничего что на английском? )

Они вас туда посылали, так как вероятно сами не знали, что ответить, а вовсе не оттого что такие умные. Книги советовать думаю бесполезно, наверное из них вы и научились кубики рисовать ))

Попробуйте найти форум именно по DirectX, может вам повезет.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.07.2008, 11:22   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Тут>>> были? А тут>>>?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.07.2008, 12:28   #4
Assassin
Пользователь
 
Регистрация: 09.03.2008
Сообщений: 22
По умолчанию

Цитата:
сделать нормальную кость, как полагается, с закругленными углами
Можно создать модель кости например в 3DS Max (там есть примитив Ghamfer Box - параллелепипед с закругленными краями ), конвертировать ее в Х-файл и загрузить в ваше приложение.
Assassin вне форума Ответить с цитированием
Старый 22.07.2008, 20:10   #5
Rozalinda
Пользователь
 
Аватар для Rozalinda
 
Регистрация: 11.01.2007
Сообщений: 54
По умолчанию

Assassin, я в майе работаю, а с ней у меня кой-какие сложности... Диск у меня канул куда-то. В прошлый раз я кое-как в городе нашем нашла 2008-ю, а другая под Висту не идет Грустно это, в общем.

mutabor, вообще говоря, была на геймдеве в первую очередь(оттуда меня умные люди и отправили ))) ), но вот именно эта ссылочка весьма полезна, тысяча благодарностей!! полажу...
нашедшего выход - затаптывают
Rozalinda вне форума Ответить с цитированием
Старый 11.08.2008, 11:21   #6
Rozalinda
Пользователь
 
Аватар для Rozalinda
 
Регистрация: 11.01.2007
Сообщений: 54
По умолчанию

Так, спрашиваю дальше... как загрузить x-файл в приложение? Я умею только создать простейшие mesh-объекты, которые заложены в программе, а вот загрузить свой объект не умею.
нашедшего выход - затаптывают
Rozalinda вне форума Ответить с цитированием
Старый 11.08.2008, 12:16   #7
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Цитата:
как загрузить x-файл в приложение?
Код:
LoadMesh ("map.X", *ppiD3DDevice9, &pMsh, &pMeshTxts,"green.bmp", &matrl);

//char *filename - имя загружаемого файла
//IDirect3DDevice9 *ppiD3DDevice9 указатель на интерфейс
//ID3DXMesh ** ppMesh - интерфейс для работы с mesh поверхностями
//LPDIRECT3DTEXTURE9 **pMeshTextures - интерфейс для работы с текстурами
//char *texturefilename - указатель на имя файла текстуры по умолчанию
//D3DMATERIAL9 **pMeshMaterials - материал объекта
//Возвращаемое значение: количество загруженных объектов
DWORD LoadMesh (char *filename, IDirect3DDevice9 *ppiD3DDevice9,
				ID3DXMesh ** ppMesh, LPDIRECT3DTEXTURE9 **pMeshTextures,
				char *texturefilename, D3DMATERIAL9 **pMeshMaterials)
{
	// Буфер для хранения используемых материалов
	LPD3DXBUFFER pD3DXMtrlBuffer;
	//Количество загруженных сеток
	
	//(D3DCOLORVALUE) Diffuse - рассеянный цвет
	//(D3DCOLORVALUE) Ambient - внешняя среда фоновый цвет
	//(D3DCOLORVALUE) Specular - цвет отражения
	//(D3DCOLORVALUE) Emissive - цвет излучения
	//(float) Power - число определеюящее резкость отражения
	D3DXMATERIAL* d3dxMaterials;
	DWORD i;

	//(LPCTSTR) pFilename - имя загружаемого файла
	//(DWORD) Options -  опции для загрузки
	//(LPDIRECT3DDEVICE9) pDevice -  указатель на интерфейс
	//(LPD3DXBUFFER*) ppAdjacency -  указатель на буфер для смежных граней
	//(LPD3DXBUFFER*) ppMaterials - указатель на буфер для материалов
	//(LPD3DXBUFFER*) ppEffectInstances - указатель на буфер для экземпляров эффектов
	//(DWORD*) pNumMaterials -  количество загруженных материалов
	//(LPD3DXMESH*) ppMesh - указатель на объект сетки
	D3DXLoadMeshFromX (filename, D3DXMESH_SYSTEMMEM, ppiD3DDevice9, NULL, &pD3DXMtrlBuffer, NULL, &dwNumMaterials, ppMesh);
	// Указатель на данные буфера с материалами
	d3dxMaterials=(D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer(); 
	// Выделяем память для хранения материалов
	(*pMeshTextures)= new LPDIRECT3DTEXTURE9[dwNumMaterials];
	// Выделяем память для хранения текстур
	(*pMeshMaterials)= new D3DMATERIAL9[dwNumMaterials];

	for (i=0;i<dwNumMaterials;i++)
	{
		(*pMeshMaterials)[i]=d3dxMaterials[i].MatD3D;
		//(LPDIRECT3DDEVICE9) - указатель на интерфейс с которым д.б связана текстура
		//(LPCTSTR) - имя файла
		//(LPDIRECT3DTEXTURE9) - указатель на интерфейс куда будет загружена текстура
		if (FAILED(D3DXCreateTextureFromFile(ppiD3DDevice9,d3dxMaterials[i].pTextureFilename, &(*pMeshTextures)[i])))
		{
			ltext="D3DXCreatetextureFromFile 1 failed\n";
			if (FAILED(D3DXCreateTextureFromFile(ppiD3DDevice9,texturefilename, &((*pMeshTextures)[i]))))
			{
				ltext="D3DXCreatetextureFromFile 2 failed\n";			
				pMeshMaterials[i]=NULL;
			}
		}	
	}
	return(dwNumMaterials);
}
Пример из книги Фленова. Книга плохая - читать не рекомендую. Как работает эта процедура, я до конца не понимаю и даже эта туча комментариев не помогает понять почему именно так, и уложить схему в голове
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 11.08.2008, 12:45   #8
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

DirectX: продвинутая анимация
Очень познавательная книженция, советую!
Kostia вне форума Ответить с цитированием
Старый 11.08.2008, 14:01   #9
Assassin
Пользователь
 
Регистрация: 09.03.2008
Сообщений: 22
По умолчанию

Франк Луна "Введение в программирование трехмерных игр с DirectX" отличная книга.
Вот теория из нее:
Цитата:
Загрузка X-файлов
Для загрузки содержащихся в X-файле данных сетки мы будем использовать показанную ниже функцию. Обратите внимание, что этот метод создает объект ID3DXMesh и загружает в него данные геометрии из X-файла.

Код:
HRESULT D3DXLoadMeshFromX(
     LPCSTR pFilename,
     DWORD Options,
     LPDIRECT3DDEVICE9 pDevice,
     LPD3DXBUFFER *ppAdjacency,
     LPD3DXBUFFER *ppMaterials,
     LPD3DXBUFFER* ppEffectInstances,
     PDWORD pNumMaterials,
     LPD3DXMESH *ppMesh
);
pFilename — Имя загружаемого X-файла.

Options — Один или несколько флагов, определяющих параметры создаваемой сетки. Полный список флагов приведен в описании перечисления D3DXMESH в документации SDK. Наиболее часто используются следующие флаги:

D3DXMESH_32BIT — Сетка будет использовать 32-разрядные индексы.

D3DXMESH_MANAGED — Сетка будет размещена в управляемом пуле памяти.

D3DXMESH_WRITEONLY — Данные сетки будут только записываться и не будут читаться.

D3DXMESH_DYNAMIC — Буферы сетки будут динамическими.

pDevice — Связанное с сеткой устройство.

ppAdjacency — Возвращает буфер ID3DXBuffer, содержащий массив значений типа DWORD, хранящий информацию о смежности граней сетки.

ppMaterials — Возвращает буфер ID3DXBuffer, содержащий массив структур D3DXMATERIAL, хранящий данные о материалах сетки. Мы подробнее поговорим о материалах сетки в следующем разделе.

ppEffectInstances — Возвращает буфер ID3DXBuffer, содержащий массив структур D3DXEFFECTINSTANCE. Мы игнорируем этот параметр и всегда будем передавать в нем 0.

pNumMaterials — Возвращает количество используемых в сетке материалов (то есть количество элементов D3DXMATERIAL в массиве, возвращаемом через указатель ppMaterials).

ppMesh — Возвращает созданный объект ID3DXMesh, заполненный данными о геометрии из X-файла.

Материалы в X-файле
Седьмой аргумент функции D3DXLoadMeshFromX возвращает количество используемых в сетке материалов, а пятый аргумент возвращает массив структур D3DXMATERIAL, содержащих данные этих материалов. Определение структуры D3DXMATERIAL выглядит так:

Код:
typedef struct D3DXMATERIAL {
     D3DMATERIAL9 MatD3D;
     LPSTR pTextureFilename;
} D3DXMATERIAL;
Это очень простая структура; она содержит базовую структуру D3DMATERIAL9 и указатель на завершающуюся нулем строку, которая является именем файла связанной с материалом текстуры.
X-файлы не содержат в себе данных текстур; вместо этого они содержат имена файлов, которые используются для обращения к графическим файлам, содержащим реальные данные текстур.
Следовательно, после загрузки X-файла с помощью функции D3DXLoadMeshFromX мы должны загрузить текстуры, используя указанные имена файлов. Мы покажем как это сделать в следующем разделе.

Особенно ценно, что функция D3DXLoadMeshFromX загружает данные из X-файла таким образом, что i-ый элемент в возвращаемом ею массиве D3DXMATERIAL соответствует i-ой подгруппе сетки.
Соответственно подгруппы нумеруются в порядке 0, 1, 2, ..., n – 1, где n — это количество подгрупп и материалов. Это позволяет визуализировать сетку с помощью простого цикла, перебирающего все подгруппы и визуализирующего их.
Assassin вне форума Ответить с цитированием
Старый 12.08.2008, 09:51   #10
Rozalinda
Пользователь
 
Аватар для Rozalinda
 
Регистрация: 11.01.2007
Сообщений: 54
По умолчанию

challengerr, красиво, конечно, только я все-таки на делфе пишу программку...

Kostia, ее в интернете можно найти в электронном виде или только в живую?

Assassin, эм... попробую разобраться, хотя сейчас все как-то загадочно )
нашедшего выход - затаптывают
Rozalinda вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учебник по DirectX AngelOfDeath Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 18.08.2008 08:06
DirectX Doom4eg Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.08.2008 13:08
Подключение DirectX softrix Общие вопросы C/C++ 2 31.05.2008 01:12
DirectX и С++ или С# AVi Общие вопросы C/C++ 9 15.04.2008 23:56
DirectX 10 для Windows XP Noor Свободное общение 1 27.08.2007 15:54