Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Линия и цвет 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; есть только при подготовке списка линии, больше нигде не используется. Линия все равно не красится. В чем дело?


 
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;


все равно не получается..


 
Darthman ©   (2003-12-08 18:22) [3]

полный код программы, если можно.


 
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.


 
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]

Спасибо, попробую.


 
Darthman ©   (2003-12-09 10:29) [8]

hexone:
хехе... бес попутал, что-то у меня каша после выходных в голове была... действительно, ведь можно ;)



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
14-1079256575
ИМХО
2004-03-14 12:29
2004.04.11
А что в Испании творится?


14-1079619495
Rem
2004-03-18 17:18
2004.04.11
Шифрование БД Access и пароль


1-1082701946
Stas
2004-04-23 10:32
2004.04.11
Access и MDICHILD


3-1082006367
turich
2004-04-15 09:19
2004.04.11
Помогите с DBGrid


3-1081825030
rosl
2004-04-13 06:57
2004.04.11
ehlib