Сообщения на форуме пользователя Andrey (197 стр.)
luabind: вызов функции с таблицы | 31 янв. 2006 | 18:54 | #1 |
---|
подпишусь
Рендер в текстуру(OpenGL) в glut приложении работает, в своем Win32 нет | 30 янв. 2006 | 2:12 | #20 |
---|
Ghost2
слушай ты внимательно смотрел те 2 проекта?
rendertotexture - это glut
TestRenderToTexture - это оконное приложение.
дак вот там все один в один за исключением glutSwapBuffers и SwapBuffers
но я исправил 2 ошибки:
>1. В функции DrawScene не надо вызывать SwapBuffers.
>2. Когда создаешь pbuffer нужно задавать и все его параметры, как для обычного контекста. glViewport, например, должен получить высоту и ширину pbuffer'a, а не основного окна. Делай это >отдельно:
но они не помогли проблеме :(
с остальнымине согласен ведбь в другом проекте работают...
что еще моджет быть не так?
слушай ты внимательно смотрел те 2 проекта?
rendertotexture - это glut
TestRenderToTexture - это оконное приложение.
дак вот там все один в один за исключением glutSwapBuffers и SwapBuffers
но я исправил 2 ошибки:
>1. В функции DrawScene не надо вызывать SwapBuffers.
>2. Когда создаешь pbuffer нужно задавать и все его параметры, как для обычного контекста. glViewport, например, должен получить высоту и ширину pbuffer'a, а не основного окна. Делай это >отдельно:
но они не помогли проблеме :(
с остальнымине согласен ведбь в другом проекте работают...
что еще моджет быть не так?
Рендер в текстуру(OpenGL) в glut приложении работает, в своем Win32 нет | 30 янв. 2006 | 0:26 | #19 |
---|
Ghost2
>Ну, ошибок много. Перечислю только осноные:
странно там 2 проекта идентичных за исключение что один стартует через glut, другой через оконное приложение.
Ок спасибо тебе :)) я посмотрю что нитак. потом скажу ты непропадай :)
>Ну, ошибок много. Перечислю только осноные:
странно там 2 проекта идентичных за исключение что один стартует через glut, другой через оконное приложение.
Ок спасибо тебе :)) я посмотрю что нитак. потом скажу ты непропадай :)
Рендер в текстуру(OpenGL) в glut приложении работает, в своем Win32 нет | 28 янв. 2006 | 19:56 | #17 |
---|
Ghost2
часть 1:
http://www.gamedev.ru/download/?id=2938
часть 2:
http://www.gamedev.ru/download/?id=2939
смотри readme.txt
часть 1:
http://www.gamedev.ru/download/?id=2938
часть 2:
http://www.gamedev.ru/download/?id=2939
смотри readme.txt
проблемак с отсечением по frustum | 28 янв. 2006 | 13:37 | #11 |
---|
-=freeman=-
замени rightPlane, leftPlane и т.д. на свои переменные.
итого для Direct3D полный код:
для OpenGL полный код:
Это должно работать.
ты пойми вычисление пирамиды видимости не изменяется, а вот заполнение матриц проекции и видовой которые заполнят API OpenGL и Direct3D будут различны. попробуй так. У меня точно работает и в OpenGL и в Direct3D.
замени rightPlane, leftPlane и т.д. на свои переменные.
итого для Direct3D полный код:
float proj[16];//Матрица проекций //Узнаем текущую матрицу проекций pDevice -> GetTransform(D3DTS_PROJECTION, reinterpret_cast<D3DXMATRIX *>(proj)); float view[16];//Матрица вида //Узнаем текущую матрицу вида pDevice -> GetTransform(D3DTS_VIEW, reinterpret_cast<D3DXMATRIX *>(view)); //Извлечение пирамиды видимости frustum.ExtractFrustum(proj, view); |
float proj[16];//Матрица проекций //Узнаем текущую матрицу проекций glGetFloatv(GL_PROJECTION_MATRIX, proj); float view[16];//Матрица вида //Узнаем текущую матрицу вида glGetFloatv(GL_MODELVIEW_MATRIX, view); //Извлечение пирамиды видимости camera.GetFrustum().ExtractFrustum(proj, view);
ты пойми вычисление пирамиды видимости не изменяется, а вот заполнение матриц проекции и видовой которые заполнят API OpenGL и Direct3D будут различны. попробуй так. У меня точно работает и в OpenGL и в Direct3D.
проблемак с отсечением по frustum | 28 янв. 2006 | 13:37 | #10 |
---|
-=freeman=-
смотри при рендере сцены нужно посчитать пирамиду видимости.
Дак вот каждый API OpenGL или Direct3D как тебе и сказали работает с разными ориентациями координат. Для этого
ты давай им 1 и туже матрицу Вида и проекций.
а вычисление ExtractFrustum оставь прежним. Direct3D и OpenGL сами эти матрицы заполнят как им надо в соответсвии с их настройками и реализацией.
вот мой код реализации выичлсния пирамиды видимости
смотри при рендере сцены нужно посчитать пирамиду видимости.
Дак вот каждый API OpenGL или Direct3D как тебе и сказали работает с разными ориентациями координат. Для этого
ты давай им 1 и туже матрицу Вида и проекций.
а вычисление ExtractFrustum оставь прежним. Direct3D и OpenGL сами эти матрицы заполнят как им надо в соответсвии с их настройками и реализацией.
вот мой код реализации выичлсния пирамиды видимости
//Функция расчета пирамиды INLINE void ExtractFrustum(const float* proj, const float* modl) { float clip[16]; //Впомогательная переменная float t; //Параметры уравнения плоскости float a,b,c,d; //Комбинируем матрицы(перемножаем) clip[0] = modl[0] * proj[0] + modl[1] * proj[4] + modl[2] * proj[8] + modl[3] * proj[12]; clip[1] = modl[0] * proj[1] + modl[1] * proj[5] + modl[2] * proj[9] + modl[3] * proj[13]; clip[2] = modl[0] * proj[2] + modl[1] * proj[6] + modl[2] * proj[10] + modl[3] * proj[14]; clip[3] = modl[0] * proj[3] + modl[1] * proj[7] + modl[2] * proj[11] + modl[3] * proj[15]; clip[4] = modl[4] * proj[0] + modl[5] * proj[4] + modl[6] * proj[8] + modl[7] * proj[12]; clip[5] = modl[4] * proj[1] + modl[5] * proj[5] + modl[6] * proj[9] + modl[7] * proj[13]; clip[6] = modl[4] * proj[2] + modl[5] * proj[6] + modl[6] * proj[10] + modl[7] * proj[14]; clip[7] = modl[4] * proj[3] + modl[5] * proj[7] + modl[6] * proj[11] + modl[7] * proj[15]; clip[8] = modl[8] * proj[0] + modl[9] * proj[4] + modl[10] * proj[8] + modl[11] * proj[12]; clip[9] = modl[8] * proj[1] + modl[9] * proj[5] + modl[10] * proj[9] + modl[11] * proj[13]; clip[10] = modl[8] * proj[2] + modl[9] * proj[6] + modl[10] * proj[10] + modl[11] * proj[14]; clip[11] = modl[8] * proj[3] + modl[9] * proj[7] + modl[10] * proj[11] + modl[11] * proj[15]; clip[12] = modl[12] * proj[0] + modl[13] * proj[4] + modl[14] * proj[8] + modl[15] * proj[12]; clip[13] = modl[12] * proj[1] + modl[13] * proj[5] + modl[14] * proj[9] + modl[15] * proj[13]; clip[14] = modl[12] * proj[2] + modl[13] * proj[6] + modl[14] * proj[10] + modl[15] * proj[14]; clip[15] = modl[12] * proj[3] + modl[13] * proj[7] + modl[14] * proj[11] + modl[15] * proj[15]; //Находим A, B, C, D для ПРАВОЙ плоскости a = clip[3] - clip[0]; b = clip[7] - clip[4]; c = clip[11] - clip[8]; d = clip[15] - clip[12]; //Приводим уравнение плоскости к нормальному виду t = static_cast<float>(sqrt(a * a + b * b + c * c)); a /= t; b /= t; c /= t; d /= t; //Вычисление правой плоскости отсечения rightPlane.computePlane(a, b, c, d); //Находим A, B, C, D для ЛЕВОЙ плоскости a = clip[3] + clip[0]; b = clip[7] + clip[4]; c = clip[11] + clip[8]; d = clip[15] + clip[12]; //Приводим уравнение плоскости к нормальному виду t = static_cast<float>(sqrt(a * a + b * b + c * c)); a /= t; b /= t; c /= t; d /= t; //Вычисление левой плоскости отсечения leftPlane.computePlane(a, b, c, d); //Находим A, B, C, D для НИЖНЕЙ плоскости a = clip[3] + clip[1]; b = clip[7] + clip[5]; c = clip[11] + clip[9]; d = clip[15] + clip[13]; //Приводим уравнение плоскости к нормальному t = static_cast<float>(sqrt(a * a + b * b + c * c)); a /= t; b /= t; c /= t; d /= t; //Вычисление нижней плоскости отсечения topPlane.computePlane(a, b, c, d); //ВЕРХНЯЯ плоскость a = clip[3] - clip[1]; b = clip[7] - clip[5]; c = clip[11] - clip[9]; d = clip[15] - clip[13]; //Нормальный вид t = static_cast<float>(sqrt(a * a + b * b + c * c)); a /= t; b /= t; c /= t; d /= t; //Вычисление верхней плоскости отсечения bottomPlane.computePlane(a, b, c, d); //ДАЛЬНЯЯ плоскость a = clip[3] - clip[2]; b = clip[7] - clip[6]; c = clip[11] - clip[10]; d = clip[15] - clip[14]; //Нормальный вид t = static_cast<float>(sqrt(a * a + b * b + c * c)); a /= t; b /= t; c /= t; d /= t; //Вычисление дальней плоскости отсечения farPlane.computePlane(a, b, c, d); //ПЕРЕДНЯЯ плоскость a = clip[3] + clip[2]; b = clip[7] + clip[6]; c = clip[11] + clip[10]; d = clip[15] + clip[14]; //Нормальный вид t = static_cast<float>(sqrt(a * a + b * b + c * c)); a /= t; b /= t; c /= t; d /= t; //Вычисление ближней плоскости отсечения nearPlane.computePlane(a, b, c, d); } |
проблемак с отсечением по frustum | 28 янв. 2006 | 9:07 | #8 |
---|
-=freeman=-
оставь реализацию ExtractFrustum такую как в NeHe уроке. и сделай что я предложил.
Дело в том что у меня так работает.
оставь реализацию ExtractFrustum такую как в NeHe уроке. и сделай что я предложил.
Дело в том что у меня так работает.
Рендер в текстуру(OpenGL) в glut приложении работает, в своем Win32 нет | 28 янв. 2006 | 9:02 | #15 |
---|
Ghost2
>Если ничего не поможет сделай два тестовых примера - где работает, а где нет и выложи тут. Будем разбираться по коду
они уже сделаны.
Там меш здоровый на 1 метр с текстурами будет, выкачаешь?
>Если ничего не поможет сделай два тестовых примера - где работает, а где нет и выложи тут. Будем разбираться по коду
они уже сделаны.
Там меш здоровый на 1 метр с текстурами будет, выкачаешь?
проблемак с отсечением по frustum | 27 янв. 2006 | 22:59 | #4 |
---|
-=freeman=-
слушай я в движке использую 2 рендера Direct3D и OpenGL у меня нет таких проблем. Но я использую единую камеру со своем матрицей
а потом преобразую ее к D3DXMATRIX * в случае работы с Direct3D рендером.
при вычислении пирамиды видимости делаю так:
для Direct3D рендера
для OpenGL рендера:
Вот камера:
Тебе надо давать для обоих API единый буфер равный 16 числам float т.е. 16 * sizeof(float)
а Direct3D и OpenGL сами разберуться кк менять этот буфер. Я думаю проблемв в этом. Но могу ошибаться.
слушай я в движке использую 2 рендера Direct3D и OpenGL у меня нет таких проблем. Но я использую единую камеру со своем матрицей
а потом преобразую ее к D3DXMATRIX * в случае работы с Direct3D рендером.
при вычислении пирамиды видимости делаю так:
для Direct3D рендера
//отображение сцены void Direct3DRender::RenderScene(float dt) { float proj[16];//Матрица проекций pDevice -> GetTransform(D3DTS_PROJECTION, reinterpret_cast<D3DXMATRIX *>(proj)); //Извлечение пирамиды видимости camera.GetFrustum().ExtractFrustum(proj, camera.GetMatrix()); .... } |
//Отображения сцены void OpenGLRender::RenderScene(float dt) { .... float proj[16];//Матрица проекций //Узнаем текущую матрицу проекций glGetFloatv(GL_PROJECTION_MATRIX, proj); //Извлечение пирамиды видимости camera.GetFrustum().ExtractFrustum(proj, camera.GetMatrix()); ... }
class Camera { private: ... Matrix4x4 Matrix; //Матрица преобразования камеры ... public: //Возвращает матрицу преобразования INLINE float *GetMatrix() { return const_cast<float *>(Matrix.GetMatrix()); };
а Direct3D и OpenGL сами разберуться кк менять этот буфер. Я думаю проблемв в этом. Но могу ошибаться.
Рендер в текстуру(OpenGL) в glut приложении работает, в своем Win32 нет | 27 янв. 2006 | 1:22 | #13 |
---|
Ghost2
>Посмотрел я повнимательнее на две верхние картинки и задался вопросом: а в чем разница?
>разницы нет просто я показал 2 кадра :) мышкой повернул и запечатлил.
>Какие там текст. координаты на чайнике?
а причем тут текстурные координаты? по моему если не ошибаюсь в glut текстурные координаты автоматом генерятся.
на чайнике искаженное изображение получается т.е. текстура сцены.
вот как с этим ращзберусь буду накладывать эту текстуру на плоскость получиться должно зеркало.
что еще не понятно? :)
>Посмотрел я повнимательнее на две верхние картинки и задался вопросом: а в чем разница?
>разницы нет просто я показал 2 кадра :) мышкой повернул и запечатлил.
>Какие там текст. координаты на чайнике?
а причем тут текстурные координаты? по моему если не ошибаюсь в glut текстурные координаты автоматом генерятся.
на чайнике искаженное изображение получается т.е. текстура сцены.
вот как с этим ращзберусь буду накладывать эту текстуру на плоскость получиться должно зеркало.
что еще не понятно? :)
как лучше рисовать плоский текст в openGL | 26 янв. 2006 | 11:10 | #6 |
---|
Illinar
глянул статью мельком неплохая :). Попробую твой подход.
глянул статью мельком неплохая :). Попробую твой подход.
Рендер в текстуру(OpenGL) в glut приложении работает, в своем Win32 нет | 25 янв. 2006 | 23:49 | #11 |
---|
Ну и еще раз попытаюсь обратиться к знатокам...
Пиксел vs Пиксель | 25 янв. 2006 | 13:04 | #58 |
---|
_Winnie
что только народ не придумает :)))
пиксель
что только народ не придумает :)))
пиксель
есть ли аналог auxDIBImageLoad в glut | 25 янв. 2006 | 13:01 | #1 |
---|
mynic
>Работаю в СБилдере6
1) очень убогий отстойный компилятор как и толку нет от навороченной тормозной и глюченной среды;
2) скорей всего этот отстой С++ Builder использует другой формат *.lib файлов, поэтому в каталоге bin найди утилитку *.exe файл(не помню как называется но он точно есть и работает т.к. сам пользовался и все линковалось) который преобразует glaux.lib в тот формат который понимает линковщик дебилдера.
>И если не трудно как заставить работать glaux.h? Вроде стандартная, идет в поставке с билдером, а трансляция не идет.....
что-то не вериться, gluax.lib бибилиотека от Microsoft к тому же еще и глюченная с ошибками.
советую перейти на Visual C++ а для загрузки графических форматов использовать DevIL или еще что нибудь.
вот можешь мою статью почитать:http://www.gamedev.ru/articles/?id=70123
>Работаю в СБилдере6
1) очень убогий отстойный компилятор как и толку нет от навороченной тормозной и глюченной среды;
2) скорей всего этот отстой С++ Builder использует другой формат *.lib файлов, поэтому в каталоге bin найди утилитку *.exe файл(не помню как называется но он точно есть и работает т.к. сам пользовался и все линковалось) который преобразует glaux.lib в тот формат который понимает линковщик дебилдера.
>И если не трудно как заставить работать glaux.h? Вроде стандартная, идет в поставке с билдером, а трансляция не идет.....
что-то не вериться, gluax.lib бибилиотека от Microsoft к тому же еще и глюченная с ошибками.
советую перейти на Visual C++ а для загрузки графических форматов использовать DevIL или еще что нибудь.
вот можешь мою статью почитать:http://www.gamedev.ru/articles/?id=70123