wglChoosePixelFormatARB проинициализирован и проверку проходит, тут видать ошибка во входных параметрах( передаю что-то не то).
После инициалзации основного OpenGL'a , инициализируем PixelBuffer вот PixelBuffer и не инициализируется ,т.к. вылетает с руганью на wglChoosePixelFormatARB.
P.S. что-то я окончательно запутался в этих HDC и HGLRC, т.к. у вас есть H_DC,H_RC, затем h_dc, h_rc, и еще h_RC и FShadowBuffer.RC от pBuffer.Что к чему относится? H_DC и H_RC - это OpenGl, а h_dc, h_rc, h_RC - это откуда?
если не получится у тебя перевести , могу сам перевести весь пример под BCC =) Если вас это не затруднит))), но это было бы здорово).
JohnSmith,
Да я так тоже думаю , но после проверок , оказалось что такого случая с заклампованием либо нет либо точность которая получается её вполне достаточно.
BenTech
(в дельфи H_DC и h_dc есть одно и тоже т.к. он не чувствителен к регистру)
Есть основной H_DC и H_RC - которые относятся непосредственно к главному окну проекта, с которыми мы и работаем.
Есть DC,RC, ParentDC, ParentRC у класса PixelBuffer
Parent DC/RC (родительские хендлы главного окна)-
DC - хранит хендл вспомогательного окна
RC - дополнительный хендл PixelBuffer'a в котором мы рисуем тени.
>>Если вас это не затруднит))), но это было бы здорово).
а что тут токого трудного :D , нужно только вспомнить где валяется инсталяшка с BCC и так по помелочи.
Хм... понятно, а то я все никак допереть не мог, зачем их так много =).
Что-то не работает... Маленько не догнал, как перевести на с++ функцию UpdateShadowMap, а точнее вот этот кусок
for cs := GL_TEXTURE_CUBE_MAP_POSITIVE_X to GL_TEXTURE_CUBE_MAP_NEGATIVE_Z do
begin
glClear(GL_DEPTH_BUFFER_BIT or GL_Color_BUFFER_BIT);
glLoadIdentity;
case cs of
GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: begin
glRotatef(180, 0, 0, 1);
glRotatef(90, 0, 1, 0);
end;
GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB: begin
glRotatef(-90, 1, 0, 0);
end;
GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB: begin
glRotatef(180, 1, 0, 0);
end;
GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB: begin
glRotatef(180, 0, 0, 1);
glRotatef(-90, 0, 1, 0);
end;
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB: begin
glRotatef(90, 1, 0, 0);
end;
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB: begin
glRotatef(180, 0, 0, 1);
end;
end;
// Устанавливаем центер мира
with Position do glTranslatef(-x, -y, -z);Переписал основные классы на с++ PBO взял со Steps3d
Вот результат...

Вот классы PBO и TLighting...
Файлы.rar
Остальной код
TShaders *Shadow;
TShaders *Bump;
TObjects *Objects;
TImportTexture *TexImport;
TLighting *LightSource;
textureUnit t_Color;
textureUnit t_Normal;
objectUnit o_Model;
void Init()
{
TexImport = new TImportTexture();
Objects = new TObjects();
Shadow = new TShaders();
Bump = new TShaders();
LightSource = new TLighting[3];
Buffer =new PBuffer(256,256,1,false);
Shadow->CreateShader("Shad\\shadow.vp","Shad\\shadow.fp");
Bump->CreateShader("Shad\\bump.vp","Shad\\bump.fp");
Bump->ActiveShaders();
Bump->SetUniform1i("color_map",0);
Bump->SetUniform1i("normal_map",0);
Bump->SetUniform1i("shadow_map",0);
Bump->SetUniform1f("_exponent",48);
Bump->DestroyShaders();
LightSource[0].Create(CVector3(0,0,0),CVector3(1,1,1),2000,256);
LightSource[1].Create(CVector3(0,0,0),CVector3(0,1,1),2000,256);
LightSource[2].Create(CVector3(0,0,0),CVector3(1,0,0),2000,256);
TexImport->ImportTexture2D(&t_Color,"Tex\\rockwall.tga",IL_TGA);
TexImport->ImportTexture2D(&t_Normal,"Tex\\rockwall_normal.tga",IL_TGA);
Objects->ImportObject(&o_Model,"Model.ism",false);
}
void DrawScene()
{
glColor3f(0,0,0);
Objects->RenderObject(o_Model,t_Color.texID,t_Normal.texID,false);
glColor3f(1,1,1);
glDepthFunc(GL_EQUAL);
glDepthMask(false);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
Bump->ActiveShaders();
for(int i=0;i<3;i++)
{
Bump->SetUniform3f("light",LightSource[i].Position.x,LightSource[i].Position.y,LightSource[i].Position.z);
Bump->SetUniform1f("radius",LightSource[i].Radius);
LightSource[i].Bind();
Objects->RenderObject(o_Model,t_Color.texID,t_Normal.texID,true);
LightSource[i].UnBind();
}
Bump->DestroyShaders();
glDepthFunc(GL_LEQUAL);
glDepthMask(true);
glDisable(GL_BLEND);
}
void ModelRender()
{
Objects->RenderObject(o_Model,t_Color.texID,t_Normal.texID,false);
}
void Loop()
{
DrawScene();
for(int i=0;i<3;i++)
{
LightSource[i].Update(ModelRender,Buffer,Shadow);
}
}это нормально, что у меня тени как-то рывками перемещаются? а на ступеньках при некотором ракурсе вообще жесть какая-то творится. winXP sp2 GF7600GT
BenTech
сори что не отвечал просто работы у мну сейчас по горло =)
ну как получилось чего ? или всёже дему писать ?? под си ?
Dimich
> то нормально, что у меня тени как-то рывками перемещаются? а на ступеньках при
> некотором ракурсе вообще жесть какая-то творится. winXP sp2 GF7600GT
Видать ZBias который я установил по умолчанию слишком мал / или слишком большой =)
SVSD_VAL
если, Вам не сложно, то имхо стоит, т.к. у меня получилось нечто темое и страшное(ну точно не тени))).
Ок , сделаю =)
Мой антивирус НОД пишет, что файл - троян.
Народ, простите за глупый вопрос. Объясните мне, пожалуйста, почему камеру нужно выставлять в инвертированную позицию?
Я про эту строчку:
with Position do glTranslatef(-x, -y, -z);
Потому что мы двигаем не камеру относительно мира, а мир относительно начала координат.
Dimich
То есть, по сути, можно и камеру поместить в положение источника света? Будет тоже самое?
Угу
SVSD_VAL
А для OpenGL вообще все одно и тоже, так? Ведь на выходе получаем одну и ту же видовую матрицу.
Тема в архиве.