![]() |
Предлагаю, вот сюда кидать все вопросы по использованию DirectX и C++.
И у меня сразу вопросик: создал я вершиный и индексые буферы и нарисовал два куба. Как мне их вращать независемо друг от друга? Нужно ли создавать для каждого объекта свои буферы? Что прям вот ни одного гуру по DirectX нету?? |
Ответ: DirectX и C++
А может стоит набраться терпения и, превозмогая себя, подождать гуру больше пятнадцати минут?
|
Ответ: DirectX и C++
Ну извените:(
|
Ответ: DirectX и C++
Цитата:
1) биндишь буффер 2) устанавливаешь матрицу трансформации первого куба 3) ДИП 4)у станавливаешь матрицу трансформации второго куба 5) ДИП |
Ответ: DirectX и C++
Вот это геморой))))Буду лечить...
|
Ответ: DirectX и C++
проще быть надо. если память не жалко, то
создаешь класс для мешей в нем: -индексный буфер -вершинный буфер -текстуры -матрицы и т.д и т.п и определяешь фунцкцию рисования в ней: -устанавливаешь верш буфер(device->setStreamSource) -устанавливаешь матрицу -рисуешь кстати где-то на форуме валяется мой двиг на директе( Simple Graphics( Game? ) Engine) , там исходники в комплекте. погляди может полезно будет добавлено: http://www.forum.boolean.name/showth...?t=9373&page=3 |
Ответ: DirectX и C++
Цитата:
Цитата:
у большинства объектов всё-таки свои буферы)) но в случаем с кубиком, можно просто сменить трансформацию, да. Цитата:
|
Ответ: DirectX и C++
Код:
ну как же нет? Цитата:
|
Ответ: DirectX и C++
Ух ну вы и юмаристы!! А вот про класс я уже создаю. Думаю даже не класс написать, а целую либу.
|
Ответ: DirectX и C++
исходники огра тебе в помощь!
|
Ответ: DirectX и C++
Есть вопрос по DirectDraw.
Считываю картинку из файла, а она показывает только пол картинки и вместо другой половины какие-то помехи. С чем связано? |
Ответ: DirectX и C++
Цитата:
|
Ответ: DirectX и C++
Я не понял код чего. Всей программы слишком длинной.
Или только функцию загрузки из файла? |
Ответ: DirectX и C++
да и отрисовки
|
Ответ: DirectX и C++
//Очистка заднего буфера
ClearSurface(lpddsback); //Установка размеров копируемого блока данных SetRect(&rPic, 0, 0, 742, 128); lpddsback->BltFast(80, 80, pHero, &rPic, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT); lpddsprimary->Flip(NULL, DDFLIP_WAIT); Это отрисовка. |
Ответ: DirectX и C++
Вот создаю новую поверхность
//__________________________________________hero ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize=sizeof(ddsd); ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH; ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN; ddsd.dwHeight = 128; ddsd.dwWidth = 742; lpdd->CreateSurface(&ddsd, &pHero, NULL); //___________________________________________ А функцию загрузки из файла я списал из самоучителя. |
Ответ: DirectX и C++
pHero - здесь точно валидные данные?
|
Ответ: DirectX и C++
Да. Это вот этот тип LPDIRECTDRAWSURFACE7
|
Ответ: DirectX и C++
Проблема как оказалось не в коде. Я сохранил картинку с сжатием, и в результате отображение происходило с глюками.
|
Ответ: DirectX и C++
Вроде разобрался с DirectDraw. Но теперь проблема в DirectInput.
На строчке lpdikey->SetDataFormat(&c_dfDIKeyboard); выдаёт вот такую ошибку на стадии сборки: dinput.lib(dilib2.obj) : fatal error LNK1103 : debugging information corrupt; recompile module Error executing link.exe. Кто нибудь помогите. |
Ответ: DirectX и C++
Ну, сам спрашиваю, сам и ответы ищу.
Проблема была в том, что в папке было две либы: dinput.lib и dinput8.lib. Компилятор ругался на dinput.lib, и я переместил эту либу из папки. Почему-то это помогло. |
Ответ: DirectX и C++
Люди помогите, проблемка. Не могу понять почему, когда задаю значения цвета материала в DirectX, он принемает значения и округляет их, тоесть я не могу задать цвет.
l.Diffuse.r=1.0f; l.Diffuse.g=1.0f; l.Diffuse.b=1.0f; l.Ambient.r=0.4f; l.Ambient.g=0.5f; l.Ambient.b=0.0f; Получаеться та часть объекта, что не освещается, ярко желтого цвета, как будто я задал значения. l.Ambient.r=1.0f; l.Ambient.g=1.0f; l.Ambient.b=0.0f; Кто знает в чем проблема? |
Ответ: DirectX и C++
Вложений: 1
Создаю куб. Делаю вершинный буфер, в котором 8 вершин. ПОтом индексный буфер, в нем все 12 треугольников.
Куб рисуется верно, но при вращении наблюдается фэйл (exe в аттаче) Автор самоучителя создавал для каждой стороны куба по 4 вершины, а я решил сэкономить. Кто знает, в чем фэйл? |
Ответ: DirectX и C++
Цитата:
|
Ответ: DirectX и C++
если я прально понял "фэйл", то проблема в неправильном обходе вершин.
правь индексный буфер. p.s. если у тебя 4 вершины, то потом, когда у каждой вершины будет ещё и нормаль, увидишь ещё один занимательный "фэйл". |
Ответ: DirectX и C++
Цитата:
Цитата:
пойдут нормали и текстурные координаты и придет твоей экономии фейлец. |
Ответ: DirectX и C++
А про маю проблемку кто-нибудь, что-нибудь знает!
|
Ответ: DirectX и C++
616}[aKeP ну ты же ничего не сказал. надо код показать или ексешник хотя-бы
шейдеры там которыми рисуешь или там настройки материала еще может ты геометрию с аддиативны блендингом 15 разв одно место рисуешь? |
Ответ: DirectX и C++
C кубом разобрался. Дело оказалось в отсутствии Z-буфера, отсечения и согласованности вершин (или сторон?).
Теперь другой вопрос. У меня 2 куба. Один позади другого. Камера вращается вокруг них. Если вызывать 2 раза DrawPrimitive, они будут рисоваться поверх друг друга, или при определенных обстоятельствах задний будет перекрывать передний? |
Ответ: DirectX и C++
ну zbuffer и нужен чтобы осуществлять проверку находится ли глубина рисуемого пикселя за глубиной уже отрисованных, если да, то не рисуется, если нет, то рисуется.
2 куба правильно загородят друг друга как их не рисуй. правда лучше рисовать сначала передний, т.к. на пиксели, которые загородятся им у заднего, не надо будет считать шейдер/делать выборки. такая сортировка может давать нехилый прирост, я рендерил лес когда - без сортировки было около 8 фпс (сотни тысяч деревьев), с сортировкой - 40. а если объекты должны быть полупрозрачными то их по-любому придётся сортировать наоборот от задних к передним. |
Ответ: DirectX и C++
Ок, ясно :) Я ранее не понимал что такое Z-буфер, falcon и ты, Mr_F_, объяснили :)
|
Ответ: DirectX и C++
И опять здрасте, захотел тут узнать, как можно перенести мышь в определеные координаты с помощью DirectInput, ну или
WinApi? |
Ответ: DirectX и C++
SetCursorPos(x,y); (WinAPI)
|
Ответ: DirectX и C++
HolyDel, пасибо!
)) Еще пара вопросиков: 1) Можно ли выводить через спрайт, не квадратную картинку, так чтобы она не преобразовывалась в квадрат? 2) Есть ли какая-нибудь документация на русском о скелетной анимации? |
Ответ: DirectX и C++
1) да - альфаблендинг (альфатест?)
2) да - http://www.google.com/search?q=%26%2...0directx%20c++ хотя если не C++ а делфи и не directx а opengl то вот хорошая статья про анимацию вообще: http://xproger.mentalx.org/archives/58 |
Ответ: DirectX и C++
Пасибо,а как альфаблендинг использовать, всмысле применительно к спрайтам. Создавать квадратную картинку и делать ненужную часть прозрачной? Но это же не практично, и лишняя инфа в картинке?
|
Ответ: DirectX и C++
это очень практично
намного практичнее чем выводить все ето треугольниками хотя можешь посотреть в сторону тесселятора, да. |
Ответ: DirectX и C++
Здравствуйте, есть проблемка, опять))
Как создать динамичный массив текстур в Direct3D? Ругаеться на то, что IDirect3DTexture9 - абстрактный класс. pTexturesList=new IDirect3DTexture9*[CountMaterials]; |
Ответ: DirectX и C++
Вложений: 1
Люди, кто сталкивался с проблемой, спрайты выводяться не по размеру! Окно размером 800 на 600, а картинку такого же размера выводит только четверть(растягивает раза в 2 точно)! (((
Прикладываю файл, вам он не че не скажет там нет ядра на котором писал!)) |
Ответ: DirectX и C++
>>Прикладываю файл, вам он не че не скажет там нет ядра на котором писал!))
очень информативно, да. отвечу так же информативно - где-то там у тебя косяк. |
Ответ: DirectX и C++
Цитата:
PHP код:
[/экстрасенс] |
Ответ: DirectX и C++
Люди извиняюсь за последнее сообщение, но просто писать отдельно программу на чистом директе без своего ядра мне было лень, а ядро я пока плохо организовал и выкладывать стыдно было, так что еще раз извиняюсь.
Я решил ту проблему. Оказывается текстура для объекта спрайта должна быть с квадратной и с разрешением кратным степени двойки, а у меня размеры 800 600))) |
Ответ: DirectX и C++
Вложений: 2
А вот опять и я, и у меня опять проблема! :(
Хочу воспроизвести звук написал программу на DirectSound, но ругается на поключаемый заголовочный файл dsound.h, мол в нем ошибка. В другой программе, которая работает подключил его же и выдает ошибки в файле dsound.h, причем ругается только на одну структуру. Кто знает в чем проблема? Вот скрины ошибок: |
Ответ: DirectX и C++
Код:
typedef unsigned long DWORD_PTR; |
Ответ: DirectX и C++
На всякий случай, dsound.lib подключил?
|
Ответ: DirectX и C++
Переопределил DWORD_PTR все скомпилировалось. Вопрос, а почему в dsound этот тип не переопределен или какой хедер мне поключить, чтоб не надо было самому переопределять?
|
Ответ: DirectX и C++
Люди, а как сделать, что бы 3д объект был сглаженым, как стандартная сфера? Ведь она не такая гладкая и ровная. Я создал поверхность 20 на 20 точек и мне нужно, что бы поверхность была сглаженой.
|
Ответ: DirectX и C++
Все, ура!! Разобралься сам. Весь инет облазил. Оказывается, чтобы добиться эффекта сглажености, надо нормали высчитывать, как среднее арефметическое от нормалей смежных поверхностей.
|
Ответ: DirectX и C++
А вот и я, опять с проблемой, а точнее с вопросом и не с одним, а с несколькими.
1)Я хочу использовать прозрачность, включаю альфа смешивание, а оно происходит без учета z буфера. Тоесть за прозрачной сферой отрисовываютяся только те объекты, которые были уже отрисованы до сферы. Вопрос, как сделать если это возможно, чтобы буффер глубины учитывался при смешивании? 2)Кто-нибудь знает, где можно найти статьи по кубическим отражения и использовании IDirect3DCubeTexture, для реализации зеркала например? 3)И третий вопрось, можно ли сделать bump эффект не используя шэйдеры и если да то как? |
Ответ: DirectX и C++
Цитата:
Цитата:
Цитата:
|
Ответ: DirectX и C++
1)
Цитата:
2) Код:
меняешь взгляд камеры и D3DCUBEMAP_FACE_POSITIVE_X 3)да. Код:
device->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3 ); |
Ответ: DirectX и C++
Спасибо большое!
Я знаю как писать в кубическую текстуру. Но как накладывать, как обычную текстуру или есть различия? И еще, как сделать несколько проходов для одного уровня тукстур: device->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3 ); device->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); device->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_NORMCUBEMAP ); device->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE); device->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE); device->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TETXURE); Я правильно понимаю? |
Ответ: DirectX и C++
Что означает вот такое сообщение:
"Указанной команде требуется псевдоним либо имя файла, драйвера или устройства. Задайте его." (Английский вариант звучит, насколько я понял, так: "The specified command requires an alias, file, driver, or device name. Please supply one.") Возникает оно при попытке вызова mciExecute('play C:\\Windows\\Media\\flourish.mid') из winmm.dll Процесс гугления результатов не принес. |
Ответ: DirectX и C++
Цитата:
и с чего это тут кавычки не двойные? |
Ответ: DirectX и C++
Да, с DirectX не связано. Прошу скинуть в отдельную тему, если возможно.
Обнаружил при попытке проиграть MIDI не заморачиваясь с дополнительными библиотеками, средствами самого Windows. Кавычки одиночные потому что Python (можно и двойные, разницы нет). Но темы по Python нет, а вызов системных dll в C++ также примерно происходит. Полный код был такой: PHP код:
|
Часовой пояс GMT +4, время: 06:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot