Главная страница
    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.186 c
8-1076071591
mfasakhov
2004-02-06 15:46
2004.05.09
Воспроизвести AVI на видеовыходе Pinnacle DV500


7-1079955956
compic
2004-03-22 14:45
2004.05.09
Обновление программы из под пользователя


3-1081949308
Term
2004-04-14 17:28
2004.05.09
Как программно получить информацию о ROLE


7-1079529307
Dastin
2004-03-17 16:15
2004.05.09
Определение буквы CD


1-1082724306
ivn
2004-04-23 16:45
2004.05.09
TGridDrawInfo?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский