powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / OpenGL просвечивание светом
2 сообщений из 2, страница 1 из 1
OpenGL просвечивание светом
    #39525397
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сцена. В центре (0, 0, 0) находится источник света. Вокруг него вращается объект. Проблема - когда объект находится между источником света и наблюдателем, этот объект просвечивается насквозь. Как бы убрать такой эффект?

Отрисовка
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TForm1.FormPaint(Sender: TObject);
const
  CLight: array [0..3] of GLfloat = (0, 0, 0, 1);
begin
  glPushMatrix;
  try
    glClearColor(0.5, 0.5, 0.75, 1);
    glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
    glColor3f(1, 0, 0);
    glutSolidSphere(0.1, 20, 20);
    glLightfv(GL_LIGHT0, GL_POSITION, @CLight);
    glTranslatef(0.9, 0, 0);
    glColor3f(0, 1, 0);
    glutSolidSphere(0.3, 20, 20);
  finally
    glPopMatrix;
  end;
  Win32Check(SwapBuffers(FDC));
end;


Инициализация
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
procedure TForm1.FormCreate(Sender: TObject);
var
  LFmt: TPixelFormatDescriptor;
  LIdx: Integer;
begin
  FDC := GetDC(Handle);
  FillChar(LFmt, SizeOf(LFmt), 0);
  LFmt.nSize := SizeOf(LFmt);
  LFmt.nVersion := 1;
  LFmt.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
  LFmt.iPixelType := PFD_TYPE_RGBA;
  LFmt.cColorBits := 24;

  LIdx := Win32Check(ChoosePixelFormat(FDC, @LFmt));
  Win32Check(SetPixelFormat(FDC, LIdx, @LFmt));
  FGLCtx := Win32Check(wglCreateContext(FDC));
  Win32Check(wglMakeCurrent(FDC, FGLCtx));

  glEnable(GL_DEPTH_TEST);
  glEnable(GL_COLOR_MATERIAL);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
end;



Чего я не добавил?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
OpenGL просвечивание светом
    #39530840
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел причину. Сфера резалась ближней плоскостью. Я переносил центр координат на 0.9, а потом рисовал сферу радиусом 0.3. Вот часть сферы и отсекалась. glFrustrum я с наскока не осилил, потому просто сделал перенос координат не на 0.9, а на 0.7 и все заработало.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / OpenGL просвечивание светом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]