Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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.038 c
14-1082112857
juiceman
2004-04-16 14:54
2004.05.09
Использование Debug API - исходники


1-1082637020
killer
2004-04-22 16:30
2004.05.09
StringGrid


14-1082505360
sashko
2004-04-21 03:56
2004.05.09
Разработка интернет-приложений в Delphi


6-1079335370
avakss
2004-03-15 10:22
2004.05.09
TServerSocket+TClientSocket+передача Stream


1-1082808233
Юлия
2004-04-24 16:03
2004.05.09
как определить позицию курсора в tmemo?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский