Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизЛиния и цвет OpenGl Найти похожие ветки
← →
zzet © (2003-12-08 16:21) [0]Не могу окрасить линию в красный цвет. Делаю так:
procedure TfrmMain.Init;
{Здесь происходит подготовка списков, текстур,
вызов glColor НИГДЕ не происходит}
glNewList (lin, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix;
glTranslatef(50.0, 50.0, 151.5);
glLineWidth (5);
glEnable(GL_LINE_SMOOTH);
glBegin (GL_LINES);
glNormal3f(0.0, 0.0, 1.0);
glColor3f (1.0, 0.0, 0.0); // - вызов здесь, но НИЧЕГО не окрашивается.
glVertex(-1.665, 0.03);
glVertex(1.63, 0.03);
glEnd;
glDisable(GL_LINE_SMOOTH);
glPopMatrix;
glPopAttrib;
glEndList;
end;
procedure TfrmMain.WMPaint(var Msg: TWMPaint);
{ Здесь рисуется сцена}
if line1 then glCallList(lin); // - линия рисуется серым цветом.
end;
Вызов glColor3f; есть только при подготовке списка линии, больше нигде не используется. Линия все равно не красится. В чем дело?
← →
zzet © (2003-12-08 16:21) [0]Не могу окрасить линию в красный цвет. Делаю так:
procedure TfrmMain.Init;
{Здесь происходит подготовка списков, текстур,
вызов glColor НИГДЕ не происходит}
glNewList (lin, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix;
glTranslatef(50.0, 50.0, 151.5);
glLineWidth (5);
glEnable(GL_LINE_SMOOTH);
glBegin (GL_LINES);
glNormal3f(0.0, 0.0, 1.0);
glColor3f (1.0, 0.0, 0.0); // - вызов здесь, но НИЧЕГО не окрашивается.
glVertex(-1.665, 0.03);
glVertex(1.63, 0.03);
glEnd;
glDisable(GL_LINE_SMOOTH);
glPopMatrix;
glPopAttrib;
glEndList;
end;
procedure TfrmMain.WMPaint(var Msg: TWMPaint);
{ Здесь рисуется сцена}
if line1 then glCallList(lin); // - линия рисуется серым цветом.
end;
Вызов glColor3f; есть только при подготовке списка линии, больше нигде не используется. Линия все равно не красится. В чем дело?
← →
Darthman © (2003-12-08 16:42) [1]glColor3f нельзя использовать в операторных скобках glBegin GlEnd;
← →
Darthman © (2003-12-08 16:42) [1]glColor3f нельзя использовать в операторных скобках glBegin GlEnd;
← →
zzet © (2003-12-08 18:10) [2]>Darthman © (08.12.03 16:42) [1]
пробовал и так:glNewList (lin, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix;
glTranslatef(50.0, 50.0, 151.5);
glColor3f (1.0, 0.0, 0.0);
glLineWidth (5);
glEnable(GL_LINE_SMOOTH);
glBegin (GL_LINES);
glNormal3f(0.0, 0.0, 1.0);
glVertex(-1.665, 0.03);
glVertex(1.63, 0.03);
glEnd;
glDisable(GL_LINE_SMOOTH);
glPopMatrix;
glPopAttrib;
glEndList;
все равно не получается..
← →
zzet © (2003-12-08 18:10) [2]>Darthman © (08.12.03 16:42) [1]
пробовал и так:glNewList (lin, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix;
glTranslatef(50.0, 50.0, 151.5);
glColor3f (1.0, 0.0, 0.0);
glLineWidth (5);
glEnable(GL_LINE_SMOOTH);
glBegin (GL_LINES);
glNormal3f(0.0, 0.0, 1.0);
glVertex(-1.665, 0.03);
glVertex(1.63, 0.03);
glEnd;
glDisable(GL_LINE_SMOOTH);
glPopMatrix;
glPopAttrib;
glEndList;
все равно не получается..
← →
Darthman © (2003-12-08 18:22) [3]полный код программы, если можно.
← →
Darthman © (2003-12-08 18:22) [3]полный код программы, если можно.
← →
zzet © (2003-12-08 19:02) [4]код длинный, щас попробую пообрезать.
← →
zzet © (2003-12-08 19:02) [4]код длинный, щас попробую пообрезать.
← →
zzet © (2003-12-08 20:12) [5]Вот вроде так:
procedure TfrmMain.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;
begin
glEnable(GL_DEPTH_TEST);
glLightfv(GL_LIGHT0, GL_DIFFUSE, @light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, @light_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, @mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, @mat_shininess);
glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glNewList (fon, GL_COMPILE);
glEnable(GL_TEXTURE_2D);
PrepareImage ("IntFase.bmp");
glBegin(GL_QUADS);
glNormal3f(0.0,0.0,1.0);
glTexCoord2f(0.0,0.0);
glVertex3f(0.0,0.0,0.0);
glTexCoord2f(1.0,0.0);
glVertex3f(100.0,0.0,0.0);
glTexCoord2f(1.0,1.0);
glVertex3f(100.0,100.0,0.0);
glTexCoord2f(0.0,1.0);
glVertex3f(0.0,100.0,0.0);
glEnd;
glDisable(GL_TEXTURE_2D);
glEndList;
glNewList (bar1, GL_COMPILE);
glEnable(GL_TEXTURE_2D);
gluQuadricTexture (quadObj, TRUE);
PrepareImage ("sprit.bmp");
glEndList;
glNewList (lin1, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix;
glColor3f (1.0, 0.0, 0.0);
glTranslatef(50.0, 50.0, 151.5);
glLineWidth (5);
glEnable(GL_LINE_SMOOTH);
glBegin (GL_LINES);
glNormal3f(0.0, 0.0, 1.0);
glVertex(-1.665, 0.03);
glVertex(1.63, 0.03);
glEnd;
glDisable(GL_LINE_SMOOTH);
glPopMatrix;
glPopAttrib;
glEndList;
PrepareImage ("logo.bmp");
end;
procedure TfrmMain.WMPaint(var Msg: TWMPaint);
var
ps : TPaintStruct;
begin
BeginPaint(Handle, ps);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix;
glLoadIdentity;
glOrtho(-50.0, 50.0, -50.0, 50.0, 200.0, 300.0);
glMatrixMode(GL_MODELVIEW);
// без записи в буфер глубины
glDepthMask(FALSE);
glEnable(GL_TEXTURE_2D);
if logo then begin glCallList(logot);
glDisable(GL_TEXTURE_2D); glDepthMask(TRUE);
glMatrixMode(GL_PROJECTION); glPopMatrix; glMatrixMode(GL_MODELVIEW);
end
else begin glCallList(fon);
glDisable(GL_TEXTURE_2D); glDepthMask(TRUE);
glMatrixMode(GL_PROJECTION); glPopMatrix; glMatrixMode(GL_MODELVIEW);
glCallList(bar1);
glPushMatrix;
glTranslatef(48.34, dist, 150.0);
glRotatef(Angle1, 0.0, 0.0, 1.0);
gluCylinder (quadObj, rad, rad, 0.653, 50, 10);
glPopMatrix;
glPushMatrix;
glTranslatef(50.952, dist, 150.0);
glRotatef(90, 0.0, 1.0, 0.0);
glRotatef(Angle5, 0.0, 0.0, 1.0);
gluCylinder (quadObj, rad, rad, 0.653, 50, 10);
glPopMatrix;
if line1 then glCallList(lin1);
SwapBuffers(DC);
EndPaint(Handle, ps);
InvalidateRect(Handle, nil, False);
end;
procedure TfrmMain.FormResize(Sender: TObject);
begin
clientheight:=round(clientwidth/aspect);
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glFrustum(-1.0, 1.0, -1.0, 1.0, 50.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(-50.0, -50.0, -250.0);
InvalidateRect(Handle, nil, False);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
DC := GetDC(Handle);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
quadObj := gluNewQuadric;
Init;
end;
procedure TfrmMain.SetDCPixelFormat;
var
nPixelFormat: Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd, SizeOf(pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
end;
procedure TfrmMain.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F5 then line1 := false;
end;
end.
← →
zzet © (2003-12-08 20:12) [5]Вот вроде так:
procedure TfrmMain.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;
begin
glEnable(GL_DEPTH_TEST);
glLightfv(GL_LIGHT0, GL_DIFFUSE, @light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, @light_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, @mat_specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, @mat_shininess);
glColorMaterial(GL_FRONT_AND_BACK,GL_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glNewList (fon, GL_COMPILE);
glEnable(GL_TEXTURE_2D);
PrepareImage ("IntFase.bmp");
glBegin(GL_QUADS);
glNormal3f(0.0,0.0,1.0);
glTexCoord2f(0.0,0.0);
glVertex3f(0.0,0.0,0.0);
glTexCoord2f(1.0,0.0);
glVertex3f(100.0,0.0,0.0);
glTexCoord2f(1.0,1.0);
glVertex3f(100.0,100.0,0.0);
glTexCoord2f(0.0,1.0);
glVertex3f(0.0,100.0,0.0);
glEnd;
glDisable(GL_TEXTURE_2D);
glEndList;
glNewList (bar1, GL_COMPILE);
glEnable(GL_TEXTURE_2D);
gluQuadricTexture (quadObj, TRUE);
PrepareImage ("sprit.bmp");
glEndList;
glNewList (lin1, GL_COMPILE);
glPushAttrib(GL_CURRENT_BIT);
glPushMatrix;
glColor3f (1.0, 0.0, 0.0);
glTranslatef(50.0, 50.0, 151.5);
glLineWidth (5);
glEnable(GL_LINE_SMOOTH);
glBegin (GL_LINES);
glNormal3f(0.0, 0.0, 1.0);
glVertex(-1.665, 0.03);
glVertex(1.63, 0.03);
glEnd;
glDisable(GL_LINE_SMOOTH);
glPopMatrix;
glPopAttrib;
glEndList;
PrepareImage ("logo.bmp");
end;
procedure TfrmMain.WMPaint(var Msg: TWMPaint);
var
ps : TPaintStruct;
begin
BeginPaint(Handle, ps);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glPushMatrix;
glLoadIdentity;
glOrtho(-50.0, 50.0, -50.0, 50.0, 200.0, 300.0);
glMatrixMode(GL_MODELVIEW);
// без записи в буфер глубины
glDepthMask(FALSE);
glEnable(GL_TEXTURE_2D);
if logo then begin glCallList(logot);
glDisable(GL_TEXTURE_2D); glDepthMask(TRUE);
glMatrixMode(GL_PROJECTION); glPopMatrix; glMatrixMode(GL_MODELVIEW);
end
else begin glCallList(fon);
glDisable(GL_TEXTURE_2D); glDepthMask(TRUE);
glMatrixMode(GL_PROJECTION); glPopMatrix; glMatrixMode(GL_MODELVIEW);
glCallList(bar1);
glPushMatrix;
glTranslatef(48.34, dist, 150.0);
glRotatef(Angle1, 0.0, 0.0, 1.0);
gluCylinder (quadObj, rad, rad, 0.653, 50, 10);
glPopMatrix;
glPushMatrix;
glTranslatef(50.952, dist, 150.0);
glRotatef(90, 0.0, 1.0, 0.0);
glRotatef(Angle5, 0.0, 0.0, 1.0);
gluCylinder (quadObj, rad, rad, 0.653, 50, 10);
glPopMatrix;
if line1 then glCallList(lin1);
SwapBuffers(DC);
EndPaint(Handle, ps);
InvalidateRect(Handle, nil, False);
end;
procedure TfrmMain.FormResize(Sender: TObject);
begin
clientheight:=round(clientwidth/aspect);
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glFrustum(-1.0, 1.0, -1.0, 1.0, 50.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(-50.0, -50.0, -250.0);
InvalidateRect(Handle, nil, False);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
DC := GetDC(Handle);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
quadObj := gluNewQuadric;
Init;
end;
procedure TfrmMain.SetDCPixelFormat;
var
nPixelFormat: Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd, SizeOf(pfd), 0);
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
end;
procedure TfrmMain.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_F5 then line1 := false;
end;
end.
← →
hexone © (2003-12-09 09:37) [6]
> Darthman © (08.12.03 16:42) [1]
> glColor3f нельзя использовать в операторных скобках glBegin
> GlEnd;
Можно. Как же тогда vertex color делать.
Ты применил освещение, материал и текстуру на линию. Текстура наложена без смешивания с основным цветом. Отключи текстуру, освещение и нарисуй линию. Потом включи опять.
← →
hexone © (2003-12-09 09:37) [6]
> Darthman © (08.12.03 16:42) [1]
> glColor3f нельзя использовать в операторных скобках glBegin
> GlEnd;
Можно. Как же тогда vertex color делать.
Ты применил освещение, материал и текстуру на линию. Текстура наложена без смешивания с основным цветом. Отключи текстуру, освещение и нарисуй линию. Потом включи опять.
← →
zzet © (2003-12-09 10:02) [7]>hexone © (09.12.03 09:37) [6]
Спасибо, попробую.
← →
zzet © (2003-12-09 10:02) [7]>hexone © (09.12.03 09:37) [6]
Спасибо, попробую.
← →
Darthman © (2003-12-09 10:29) [8]hexone:
хехе... бес попутал, что-то у меня каша после выходных в голове была... действительно, ведь можно ;)
← →
Darthman © (2003-12-09 10:29) [8]hexone:
хехе... бес попутал, что-то у меня каша после выходных в голове была... действительно, ведь можно ;)
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.043 c