Сообщения на форуме пользователя Andrey (208 стр.)
Корректная обработка результатов столкновения камеры и объектов сцены | 23 ноя. 2005 | 13:31 | #5 |
---|
Gaco
Не вектор у меня не большой по длине...
All
Еще есть варианты?
Не вектор у меня не большой по длине...
All
Еще есть варианты?
Корректная обработка результатов столкновения камеры и объектов сцены | 22 ноя. 2005 | 19:36 | #4 |
---|
Gaco
>Не думаю что коректно обрабатывать попадания вершин в ббоксы - на больших скоростях ты будеш просто проскакивать >через обьекты.
>Лучше соединять предыдущее положение и текущее отрезком и проверять ббоксы и отрезок на пересечение.
поподробнее расскажи что-то не совсем понятно
>Попробуй поставить после вычислений Vpr:
>assert( length(Vpr) < 100.0f );
>Возможно неправильно считаеш вектор.
ага попробую но только такой длины он не может быть...
Scart
>Ты не пробовал использовать первый алгоритм, но проверять возможность прохода заранее, т.е. если можно двигаться в этом направлении на шаг (не знаю чему он у тебя равен), то двигай, а если нет, то оставляй положение камеры без изменения.
над этим немного думал но не совсем так.
тут есть определенные сложности нужно дополнительно 4 переменные определяющие
куда будет двинаться камера при следующем шаге. Но я его еще раз попробую...
All
Есть еще варианты?
>Не думаю что коректно обрабатывать попадания вершин в ббоксы - на больших скоростях ты будеш просто проскакивать >через обьекты.
>Лучше соединять предыдущее положение и текущее отрезком и проверять ббоксы и отрезок на пересечение.
поподробнее расскажи что-то не совсем понятно
>Попробуй поставить после вычислений Vpr:
>assert( length(Vpr) < 100.0f );
>Возможно неправильно считаеш вектор.
ага попробую но только такой длины он не может быть...
Scart
>Ты не пробовал использовать первый алгоритм, но проверять возможность прохода заранее, т.е. если можно двигаться в этом направлении на шаг (не знаю чему он у тебя равен), то двигай, а если нет, то оставляй положение камеры без изменения.
над этим немного думал но не совсем так.
тут есть определенные сложности нужно дополнительно 4 переменные определяющие
куда будет двинаться камера при следующем шаге. Но я его еще раз попробую...
All
Есть еще варианты?
Корректная обработка результатов столкновения камеры и объектов сцены | 22 ноя. 2005 | 15:05 | #1 |
---|
?
Корректная обработка результатов столкновения камеры и объектов сцены | 22 ноя. 2005 | 4:54 | #0 |
---|
Привет всем!!!
эта тема поднималась долго но мне ничего подходящего не пригодилось :(
Я построил Octree дерево сцены.Хочу реализовать реалистичные столкновения камеры с полигональной моделью.
Пока у меня сделано определение столкновений. В этом случае касмеру просто откидывает на предыдйущее место столкновения.
Реализовано это за счет хранения предыдущего вектора положения в камере.
Камера хранит Bounding Box игрока.
Алгоритм у меня такой:
1) Если попали в узел Octree дерева который является листом;
2) проходимся по полигонам внутри его(их как раз там не много);
3) если хотя-бы 1 из вершин полигона попала в Bounding Box камеры то мы вектор присваиваем ей предыдущее положение.
4) выход из цикла...
Я его хочу изменить алгоритм при столкновении сделать плавное скольжение вдоль стены.
для этого я делал так:
После столкновения:
эта тема поднималась долго но мне ничего подходящего не пригодилось :(
Я построил Octree дерево сцены.Хочу реализовать реалистичные столкновения камеры с полигональной моделью.
Пока у меня сделано определение столкновений. В этом случае касмеру просто откидывает на предыдйущее место столкновения.
Реализовано это за счет хранения предыдущего вектора положения в камере.
Камера хранит Bounding Box игрока.
Алгоритм у меня такой:
1) Если попали в узел Octree дерева который является листом;
2) проходимся по полигонам внутри его(их как раз там не много);
3) если хотя-бы 1 из вершин полигона попала в Bounding Box камеры то мы вектор присваиваем ей предыдущее положение.
4) выход из цикла...
Я его хочу изменить алгоритм при столкновении сделать плавное скольжение вдоль стены.
для этого я делал так:
После столкновения:
1) строим плоскость по 3 точкам полигона
2) берем проекцию вектора нправления на плоскость X0Z т.е. на плоскость земли (у меня ось Y направлена вверх)
пусить это вектор Vpr;
3) берем проекцию вектора Vpr на плоскость полигона;
4) вычисляем новое положение камеры как ее текущее + Vpr
Это иногда корректно работает когда сталкиваешься с объектом не больших габаритов например со столбом,
если объекты больших габаритов, то иногда вылетаешь в другой конец сцены...
Прошу помощи над этим долго бьюсь зашел в тупик, стою на месте...
Что я делаю не так? Есои нужно привести необходимый код, скажите я приведу.
Нужен исходник примера из DirectX 9 SDK | 19 ноя. 2005 | 15:04 | #10 |
---|
Morpeh
и мне пожалуйста, пригодится :)
правка синтаксис...
и мне пожалуйста, пригодится :)
правка синтаксис...
Правка: 19 ноя. 2005 15:05
CubeMap в Direct3D 9.0 | 19 ноя. 2005 | 0:58 | #17 |
---|
User007
спасибо за подсказку действительно надо очищать!!!
я разобрался и нашел ошибку оказывается
1) надо было в сцене вызывать Clear и не вызывать Begin() и End()
2) далее я не удалил
IDirect3DCubeTexture9*
т.е. надо добавить pCubeMap -> Release();
спасибо вам всем за помощь!!! :)
спасибо за подсказку действительно надо очищать!!!
я разобрался и нашел ошибку оказывается
1) надо было в сцене вызывать Clear и не вызывать Begin() и End()
2) далее я не удалил
IDirect3DCubeTexture9*
т.е. надо добавить pCubeMap -> Release();
спасибо вам всем за помощь!!! :)
CubeMap в Direct3D 9.0 | 18 ноя. 2005 | 21:25 | #15 |
---|
User007
>не понял - ты при рендере в cubemap не очишаешь предварительно z & color? Попробуй очищать.
дак надо же не очищать вроде?
ладно я попробую...
>не понял - ты при рендере в cubemap не очишаешь предварительно z & color? Попробуй очищать.
дак надо же не очищать вроде?
ладно я попробую...
Вывод текста в OpenGL | 18 ноя. 2005 | 15:01 | #3 |
---|
Ferrum Mamuth
незачто...
надо теперь почитать доки... :)
незачто...
надо теперь почитать доки... :)
Вывод текста в OpenGL | 18 ноя. 2005 | 14:44 | #1 |
---|
Ferrum Mamuth
GLvoid BuildFont(GLvoid)
{
HFONT font;
base = glGenLists(96);
hDC = GetDC(NULL); //надо контекст окна получить
font = CreateFont( -24, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY, FF_DONTCARE|DEFAULT_PITCH, "Courier New");
SelectObject(hDC, font);
wglUseFontBitmaps(hDC, 32, 96, base);
}
[/code]
лучше использовать glut там есть средства для вывода текста...
GLvoid BuildFont(GLvoid)
{
HFONT font;
base = glGenLists(96);
hDC = GetDC(NULL); //надо контекст окна получить
font = CreateFont( -24, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY, FF_DONTCARE|DEFAULT_PITCH, "Courier New");
SelectObject(hDC, font);
wglUseFontBitmaps(hDC, 32, 96, base);
}
[/code]
лучше использовать glut там есть средства для вывода текста...
Правка: 18 ноя. 2005 14:54
CubeMap в Direct3D 9.0 | 18 ноя. 2005 | 12:58 | #12 |
---|
IronBunny
>попробуй так:
>сначала своим цыклом отрендерить все в cubemap,
>затем после hr = pRenderToEnvMap -> End(0); пройтись по всем фейсам и сохранить их.
>а то ведь пытаешься сохранить то, что установлено как rendertarget
я тебя понял, завел 6 IDirect3DSurface9*, все сделал после цикла деинициализацию и сохранение текстур ситуация
такая-же :(
Paronator
Попробую твой код спасибо :)
User007
нет естественно!! там я флаг ставлю если рендер в CubeMap то не очищаю...
>попробуй так:
>сначала своим цыклом отрендерить все в cubemap,
>затем после hr = pRenderToEnvMap -> End(0); пройтись по всем фейсам и сохранить их.
>а то ведь пытаешься сохранить то, что установлено как rendertarget
я тебя понял, завел 6 IDirect3DSurface9*, все сделал после цикла деинициализацию и сохранение текстур ситуация
такая-же :(
Paronator
Попробую твой код спасибо :)
User007
нет естественно!! там я флаг ставлю если рендер в CubeMap то не очищаю...
CubeMap в Direct3D 9.0 | 18 ноя. 2005 | 0:11 | #9 |
---|
User007
IronBunny
>а если в другой формат - bmp?
то-же самое :(
User007
там целый двиг :) на 8 МБ с ресурсами :)
All
а Вот тоже самое вставляю в пример DirectX SDK 9.0 и все ок сохраняет моджет у меня глюк?
IronBunny
>а если в другой формат - bmp?
то-же самое :(
User007
там целый двиг :) на 8 МБ с ресурсами :)
All
а Вот тоже самое вставляю в пример DirectX SDK 9.0 и все ок сохраняет моджет у меня глюк?
CubeMap в Direct3D 9.0 | 17 ноя. 2005 | 21:14 | #7 |
---|
IronBunny
>а если в другой формат - bmp?
попробую...
>D3DXSaveSurfaceToFile - что возвращает?
в том то и дело что S_OK!!!
Ilia
>Сохранение в jpg в DX9 глючное...Так и должно быть.
хм... во как :)
>а если в другой формат - bmp?
попробую...
>D3DXSaveSurfaceToFile - что возвращает?
в том то и дело что S_OK!!!
Ilia
>Сохранение в jpg в DX9 глючное...Так и должно быть.
хм... во как :)
CubeMap в Direct3D 9.0 | 17 ноя. 2005 | 15:38 | #4 |
---|
CubeMap в Direct3D 9.0 | 17 ноя. 2005 | 12:23 | #2 |
---|
User007
>Чего ЗДЕСЬ происходит??
>remove(buf); <------------------------
удаляется предыдуший файл(если даже и не был создан) на всякий случай...
о остальное
сохранение поверхность в файл т.е. screenshot плоскосити куба
т.к. i меняется от 0 до 6 то файлы записываются под именами cube1.jpg,...,cube6.jpg
или ты не это имел ввиду?
>Чего ЗДЕСЬ происходит??
>remove(buf); <------------------------
удаляется предыдуший файл(если даже и не был создан) на всякий случай...
о остальное
сохранение поверхность в файл т.е. screenshot плоскосити куба
т.к. i меняется от 0 до 6 то файлы записываются под именами cube1.jpg,...,cube6.jpg
или ты не это имел ввиду?
CubeMap в Direct3D 9.0 | 17 ноя. 2005 | 1:35 | #0 |
---|
Привет всем!!!
пробую разобраться с кубическими текстурами.
Я хочу сохранить 6 текстур.
2 проблемы
- ошибка при деиницилизации IDirect3DSurface9;
- некорректно сохраняет 6 текстур.
Все делал по примеру из DirectX SDK 9.0
Видеокарта Radeon 9200SE, Visual C++ .Net 2003, Windows XP
вот код:
что я делаю не так?
Спасибо всем заранее.
С Уважением Андрей.
пробую разобраться с кубическими текстурами.
Я хочу сохранить 6 текстур.
2 проблемы
- ошибка при деиницилизации IDirect3DSurface9;
- некорректно сохраняет 6 текстур.
Все делал по примеру из DirectX SDK 9.0
Видеокарта Radeon 9200SE, Visual C++ .Net 2003, Windows XP
вот код:
void DrawScene() { ... enum {CUBEMAP_RESOLUTION = 256}; ... D3DSURFACE_DESC d3dsdBackBuffer; IDirect3DSurface9* pFace = NULL; HRESULT hr = 0; hr = pDevice -> GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pFace); hr = pFace -> GetDesc(&d3dsdBackBuffer); hr = pFace -> Release(); IDirect3DCubeTexture9* pCubeMap = NULL; enum {SIZE = 256}; hr = pDevice -> CreateCubeTexture(SIZE, 1, D3DUSAGE_RENDERTARGET, d3dsdBackBuffer.Format, D3DPOOL_DEFAULT, &pCubeMap, NULL); ... //рендер в текстуру ID3DXRenderToEnvMap* pRenderToEnvMap = NULL; // Create RenderToEnvMap object hr = D3DXCreateRenderToEnvMap(pDevice, CUBEMAP_RESOLUTION, 1, d3dsdBackBuffer.Format, TRUE, D3DFMT_D16, &pRenderToEnvMap); ... // Save transformation matrices of the device. D3DXMATRIX matProjSave; D3DXMATRIX matViewSave; pDevice -> GetTransform(D3DTS_VIEW, &matViewSave); pDevice -> GetTransform(D3DTS_PROJECTION, &matProjSave); // Set the projection matrix for a field of view of 90 degrees D3DXMATRIX matProj; D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI * 0.5f, 1.0f, camera.GetzNear(), camera.GetzFar()); pDevice -> GetTransform(D3DTS_PROJECTION, &matProj); // Standard view that will be overridden below. D3DXMATRIX matView; hr = pRenderToEnvMap -> BeginCube(pCubeMap); for(unsigned int i = 0; i < 6; i++ ) { hr = pRenderToEnvMap -> Face(static_cast<D3DCUBEMAP_FACES>(i), 0 ); D3DXVECTOR3 vEnvEyePt; vEnvEyePt.x = 0.0f; vEnvEyePt.y = 0.0f; vEnvEyePt.z = 0.0f; D3DXVECTOR3 vLookatPt; D3DXVECTOR3 vUpVec; switch(i) { case D3DCUBEMAP_FACE_POSITIVE_X: vLookatPt = D3DXVECTOR3( 1.0f, 0.0f, 0.0f ); vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); break; case D3DCUBEMAP_FACE_NEGATIVE_X: vLookatPt = D3DXVECTOR3(-1.0f, 0.0f, 0.0f); vUpVec = D3DXVECTOR3(0.0f, 1.0f, 0.0f); break; case D3DCUBEMAP_FACE_POSITIVE_Y: vLookatPt = D3DXVECTOR3(0.0f, 1.0f, 0.0f); vUpVec = D3DXVECTOR3(0.0f, 0.0f,-1.0f); break; case D3DCUBEMAP_FACE_NEGATIVE_Y: vLookatPt = D3DXVECTOR3(0.0f,-1.0f, 0.0f); vUpVec = D3DXVECTOR3(0.0f, 0.0f, 1.0f); break; case D3DCUBEMAP_FACE_POSITIVE_Z: vLookatPt = D3DXVECTOR3(0.0f, 0.0f, 1.0f); vUpVec = D3DXVECTOR3(0.0f, 1.0f, 0.0f); break; case D3DCUBEMAP_FACE_NEGATIVE_Z: vLookatPt = D3DXVECTOR3(0.0f, 0.0f,-1.0f); vUpVec = D3DXVECTOR3(0.0f, 1.0f, 0.0f); break; } D3DXMatrixLookAtLH(&matView, &vEnvEyePt, &vLookatPt, &vUpVec); pDevice -> SetTransform(D3DTS_VIEW, &matView); RenderScene(); if (pCubeMap) hr = pCubeMap -> GetCubeMapSurface(static_cast<D3DCUBEMAP_FACES>(i), 0, &pFace); char buf[20] = {'\0'}; //получить имя файла sprintf(buf, "cube%d%s", i + 1, ".jpg"); //удалить remove(buf); //сохранить D3DXSaveSurfaceToFile(buf, D3DXIFF_JPG, pFace, NULL, NULL); if (pFace) hr = pFace -> Release(); //вот тут ошибка hr = 0x00000002 Не удается найти указанный файл. } hr = pRenderToEnvMap -> End(0); hr = pRenderToEnvMap -> Release(); // Restore the original transformation matrices. pDevice -> SetTransform(D3DTS_VIEW, &matViewSave); pDevice -> SetTransform(D3DTS_PROJECTION, &matProjSave); } |
Спасибо всем заранее.
С Уважением Андрей.
Правка: 17 ноя. 2005 1:36