Версия: 0.9.28.2
FPC: 2.2.4
Используется OpenGLContext, GL, GLU. Есть главное окно (конт1), есть созданное в главном окно (конт2)

Главное окно:
- Код: Выделить всё
- procedure TFrmMpD.OGLCtrlMpRPaint(Sender: TObject);
 var
 ForXK, ForYK, trashLok: Integer;
 PntX, PntY :GLfloat;//PntZ
 begin
 if OGLCtrlMpR.MakeCurrent then AreaInitialized:=true;
 glClearColor(1.0, 1.0, 1.0, 1.0);
 glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT or GL_STENCIL_BUFFER_BIT);
 glClearDepth(1.0); // Разрешить очистку буфера глубины
 glDepthFunc(GL_LESS); // Тип теста глубины
 glEnable(GL_DEPTH_TEST); // разрешить тест глубины
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glShadeModel(GL_SMOOTH); // разрешить плавное цветовое сглаживание
 glMatrixMode(GL_PROJECTION); // Выбор матрицы проекции
 glLoadIdentity(); // Сброс матрицы проекции
 gluPerspective(45.0,GLfloat(OGLCtrlMpR.Width)/GLfloat(OGLCtrlMpR.Height),0.1,100.0);
 // Вычислить соотношение геометрических размеров для окна
 glMatrixMode(GL_MODELVIEW); // Выбор матрицы просмотра модели
 glLoadIdentity();
 glTranslatef((ScrollBar1.Position-127)*0.1,(127 - ScrollBar2.Position)*0.1,TrackBar1.Position*0.5);
 glEnable(GL_TEXTURE_2D); // Разрешение наложение текстуры
 glBindTexture(GL_TEXTURE_2D, Texture[4]);
 glEnable (GL_BLEND);
 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 if MapWasGenerate then
 for ForYK := (127 - (TrackBar2.Position Div 2)) to (127+ TrackBar2.Position Div 2) do
 for ForXK := (127- TrackBar2.Position Div 2) to (127 + TrackBar2.Position Div 2) do
 begin
 //Центр это 127х127х7
 //Х = (ForXK - 127)*0,3
 //Y = (ForYK - 127)*0,3
 //Z = (HeightMap[(ForYK*256)+ForXK])
 PntX := (ForXK - 127)*0.3;
 PntY := (ForYK - 127)*0.3;
 if not CheckBox1.Checked then
 glBindTexture(GL_TEXTURE_2D, Texture[0])
 else if (HeightMap[(ForYK*256)+ForXK]+1) < 6 then
 glBindTexture(GL_TEXTURE_2D, Texture[HeightMap[(ForYK*256)+ForXK]+1])
 else glBindTexture(GL_TEXTURE_2D, Texture[6]);
 glBegin(GL_QUADS);
 glTexCoord2f(1.0, 1.0);
 glVertex3f(PntX,PntY,CalkZPoint(ForYK,ForXK,1, false)*0.1);
 glTexCoord2f(1.0, 0.0);
 glVertex3f( PntX, (PntY - 0.3) , CalkZPoint(ForYK,ForXK,4, false)*0.1);
 glTexCoord2f(0.0, 0.0);
 glVertex3f((PntX - 0.3),(PntY - 0.3),CalkZPoint(ForYK,ForXK,3, false)*0.1);
 glTexCoord2f( 0.0, 1.0);
 glVertex3f((PntX - 0.3),PntY,CalkZPoint(ForYK,ForXK,2, false)*0.1);
 glEnd();
 end;
 glDisable(GL_TEXTURE_2D);
 OGLCtrlMapRed.SwapBuffers;
 OpenGLIsPain := true;
 end;
Создание второго окна:
- Код: Выделить всё
- procedure TFrmMapDesigner.MenuItem7Click(Sender: TObject);
 var
 CNTLok: Integer;
 LokTex: TOneTexture;
 LokNameTex: String;
 begin
 if not Assigned(ObjDesigner) then
 begin
 Application.CreateForm(TFrmObjDesigner, ObjDesigner);
 end;
 ObjDesigner.ListBox1.Clear;
 //Копируем список текстур
 for CNTLok := 0 to (LBxTexture.Count - 1) do
 begin
 LokTex := TOneTexture(LBxTexture.Items.Objects[CNTLok]);
 LokNameTex := LBxTexture.Items.Strings[CNTLok];
 ObjDesigner.ListBox1.Items.AddObject(LokNameTex,LokTex);
 end;
 ObjDesigner.Show;
 end;
Вывод текстур во втором окне сделан совершенно аналогично:
- Код: Выделить всё
- procedure TFrmObjDesigner.OGLViewPaint(Sender: TObject);
 begin
 if OGLView.MakeCurrent(true) then AreaInitialized:=true;
 glClearColor(1.0, 1.0, 1.0, 1.0);
 glClear(GL_DEPTH_BUFFER_BIT or GL_COLOR_BUFFER_BIT or GL_STENCIL_BUFFER_BIT);
 glClearDepth(1.0); // Разрешить очистку буфера глубины
 glDepthFunc(GL_LESS); // Тип теста глубины
 glEnable(GL_DEPTH_TEST); // разрешить тест глубины
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glShadeModel(GL_SMOOTH); // разрешить плавное цветовое сглаживание
 glMatrixMode(GL_PROJECTION); // Выбор матрицы проекции
 glLoadIdentity(); // Сброс матрицы проекции
 gluPerspective(45.0,GLfloat(OGLView.Width)/GLfloat(OGLView.Height),0.1,100.0);
 // Вычислить соотношение геометрических размеров для окна
 glMatrixMode(GL_MODELVIEW); // Выбор матрицы просмотра модели
 glLoadIdentity();
 glTranslatef(0.0,0.0,-3.1);
 glEnable (GL_BLEND);
 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 glEnable(GL_TEXTURE_2D); // Разрешение наложение текстуры
 glBindTexture(GL_TEXTURE_2D, texture0); //[b]Могут не передаться текстуры главного - сделаю новую для проверки[/b]
 glBegin(GL_QUADS);
 glColor3f(1.0,0.0,0.0); // Red
 glTexCoord2f(1.0, 1.0);
 glVertex3f(1,1,0);
 glTexCoord2f(1.0, 0.0);
 glVertex3f( 1,-1,0);
 glTexCoord2f(0.0, 0.0);
 glVertex3f(-1,-1,0);
 glTexCoord2f( 0.0, 1.0);
 glVertex3f(-1,1,0);
 glEnd();
 OGLView.SwapBuffers;
 end;
Проблему решил. Как удалить тему?







