
Да все с тобой понятно, внимательнее поищи создание контекста. MakeCurrent дословно как переводится?
Модератор: Модераторы
TehnikHarlan писал(а):procedure TForm1.FormCreate(Sender: TObject);
begin
glClearColor(220/255, 220/255, 220/255, 1); //задаю цвет
Alex2013 писал(а):Проверил "пустая процедура" действительно работает . ( Возможно в старой версии DC получали при создании OpenGLContro-а или в программе все-же была рабочая ссылка в OpenGLControl1.OnPaint )
zub писал(а): В OnPaint контрола рисовать то что надо.
zub писал(а):Можно. Если есть понимание как это работает и почему может не работать.
olegy123 писал(а):Можно хардкорно, даже в TThread, без няшных OnPaint
procedure Draw3DModel(OutX,OutY,W,H,T,Ax,Ay,Az: Integer;Var OutBMP:TBitmap );
const ScrBitmap:TBitmap=nil;
Var Sx,Sy:Longint;
hrc:HDC;
procedure Init;
const
light_diffuse : Array [0..3] of GLfloat = (1.0, 1.0, 1.0, 0.0);
light_specular : Array [0..3] of GLfloat = (1.0, 1.0, 1.0, 0.0);
mat_specular : Array [0..3] of GLfloat = (1.0, 1.0, 1.0, 1.0);
lmodel_ambient : Array [0..3] of GLfloat = (0.0, 0.0, 0.0, 0.0);
mat_shininess : GLfloat = 50.0;
var
CanvasHandle:HDC;
pfd: TPixelFormatDescriptor;
nPixelFormat: Integer;
FormatIndex: Integer;
lFDC: HDC;
ps : TPaintStruct;
b:TBitMap;
begin
if ScrBitmap=nil then begin ScrBitmap:=TBitmap.Create;
Sx:=500;Sy:=500; //Speed:=2;
ScrBitmap.PixelFormat:=pf24bit;ScrBitmap.Canvas.Brush.Color:=0;
ScrBitmap.SetSize(500,500);
end;
lFDC := ScrBitmap.Canvas.Handle;
FillChar(PFD, SizeOf(PFD), 0);
With PFD do begin
nSize := SizeOf(PFD); nVersion := 1;
dwFlags := pfd_Draw_to_Bitmap or pfd_Support_OpenGL
or PFD_GENERIC_ACCELERATED;
iPixelType := pfd_Type_RGBA;
cColorBits := 24; cDepthBits := 32;
iLayerType := pfd_Main_Plane;
end;
FormatIndex := ChoosePixelFormat(lFDC, @PFD);
SetPixelFormat(lFDC, FormatIndex, @PFD);
HRC := wglCreateContext(lFDC);
wglMakeCurrent(lFDC, HRC);
glEnable(GL_DEPTH_TEST);
glLightfv(GL_LIGHT0, GL_DIFFUSE, @light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, @light_specular);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glColor3f(1.5, 1.5, 1.5);
glViewport(0, 0, ScrBitmap.Width, ScrBitmap.Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glFrustum(-1.0, 1.0, -1.0, 1.0, 50.0, 300.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(-50.0, -50.0, -250.0);
end;
procedure WMPaint;
var
ps : TPaintStruct;
b:TBitMap;
MM:Real;
begin
Init; //Инициализация битмапа
// Стандартная настройка OpenGL (Обычный OpenGL код )
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
//... У меня там куча тестового и закомментированного кода так что "замну для ясности"
// Тут идет "универсальная" загрузка модели
Load3e.OGL_DrawLoad3e(0,0,100,nil);
//----------------------------------------------------
glPopMatrix;
glFlush;// вместо SwapBuferrs
wglDeleteContext(hrc);
end;
var B,buf,buf2:TBitMap;
begin
WMPaint;
B:= ScrBitmap;
....
end;
приходится сейчас работать с машинным зрением
По моему достаточно близкая тема что-бы прорабатывать как-то скооперироваться. Как идея ?
Alex2013 писал(а):Хм, причем тут поток ? Просто можно инициализировать API-OpenGL в обход OpenGLControl (Что я и делаю при "выводе на битмап" )
TehnikHarlan писал(а):Я под виндовс 10, через cmd запустилось да и все) ниче не написало. Кстате принесенное откомпилированое тестовое приложение с нового компа на старий, заработало на старом) Может не хватает каких то компонентов для свежоустановленого вин 10 на новом компютере?)
zub писал(а):olegy123, Alex2013
У человека элементарная проблема и ему нужно простое и правильное решение.
olegy123 писал(а):Отдельном потоке фризы можно свести к нулю и фопсы увеличить за 1000, c WM_PAINT таких кулс не реалити.
Pavia писал(а):Именно так. Надо поставить DirectX.
TehnikHarlan писал(а):По моему достаточно близкая тема что-бы прорабатывать как-то скооперироваться. Как идея ?
Спасибо за предложение, запомню) Но не в ближайшем будущем, у меня тут свой армагедон надолго, да и я не особо по програмной части таких проектов. Моя работа заключается в разработке электронных устройств.
Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 15