Renderowanie plików STL w OpenGL - jak naprawić dziury

Rozmowy na luzie np. o pogodzie lub śmiesznych kotach
Awatar użytkownika
dragonn
Zasłużony
Posty: 3693
Rejestracja: 12 gru 2016, 21:50
Lokalizacja: Opole
Drukarka: LUME
x 386

Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dragonn » 06 cze 2018, 19:21

Temat trochę nietypowy ale może akurat ktoś będzie mi w stanie pomóc :D.
Siedzę nad programem pisanym w Pythonie z GUI w PyQT. Jednym z elementów jest widget który przedstawia ruch obiektu zgodnie z obrotem akcelerometru. No i obiekt ten jest plikiem STL, nawet udało mi się załadować go już i wyrenderować :D, ale jest tylko drobny problem:
2018-06-06-191354_3840x1080_scrot.png

:lol: :lol:, jak widać sam kształt jest w pełni okej. Ogólnie to dla uproszczenia obsługuje sobie tylko plik tekstowe STL.

Kod: Zaznacz cały

 
facet normal 0 0 -1
    outer loop
      vertex -4.96713 -4.49641 -2.1
      vertex -5.12966 -4.31006 -2.1
      vertex -5.08656 -4.25868 -2.1
endloop

Niezbyt rozumiem czym są te wartości przy facet, wydaje mi się że sam problem jest w tym że biorę punkty trójkąta jak leci przez co niektóry ściany są odwrócone i wychodzi taka sieczka?
Dobrze myślę?
Jeśli tak to jak rozpoznać to jaka kolejność punktów należy brać.
Sam mój kod renderujący wygląda tak:

Kod: Zaznacz cały

 
for facet in self.stl.facets:
 for f in range(1, 3):
   vertex=facet[f]
   gl.glVertex3d(vertex['x']*0.5, vertex['y']*0.5, vertex['z']*0.5)

Gdzie facet jest tablicą zawierającą dane facet które jest tablicą zawierający te trzy punkty danego facet.
Z góry dzięki za pomoc :D .
LUME PRO - mody: E3D Lite6 w bowden + Titan, silniki 42BYGHM809
Awatar użytkownika
dziobu
Zasłużony
Posty: 1651
Rejestracja: 28 gru 2016, 16:38
Lokalizacja: Kraków
Drukarka: ZMorph 2.0(S)
x 447
Kontaktowanie:

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dziobu » 06 cze 2018, 19:44

dragonn pisze:Niezbyt rozumiem czym są te wartości przy facet, wydaje mi się że sam problem jest w tym że biorę punkty trójkąta jak leci przez co niektóry ściany są odwrócone i wychodzi taka sieczka?

Imho dobrze Ci się wydaje.

Te 3 wartości to wektor normalnej.
https://en.wikipedia.org/wiki/STL_(file_format)
Pozdrawiam
Paweł

Moje twory w 3D
Awatar użytkownika
dragonn
Zasłużony
Posty: 3693
Rejestracja: 12 gru 2016, 21:50
Lokalizacja: Opole
Drukarka: LUME
x 386

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dragonn » 06 cze 2018, 19:59

Hmmmm okej, to zrobiłem takie coś:

Kod: Zaznacz cały

         for facet in self.stl.facets:
            gl.glNormal3f(facet['normal']['x'], facet['normal']['y'], facet['normal']['z'])
            for f in range(1, 3):
                vertex=facet[f]
                gl.glVertex3d(vertex['x']*0.5, vertex['y']*0.5, vertex['z']*0.5)

I hmmm, coś to pomogło ale nie z tym czym miałem problem:
2018-06-06-195837_3840x1080_scrot.png

Naprawiło mi się światło które próbowałem dodać wcześniej :rotfl2: . Chwila, sprawdzę czy może przy ładowaniu nie pomija mi jakiś ścian, ale trochę wątpię.

EDIT
Liczba ścian się zgadza, hmmm to nie wiem co jeszcze może być źle.
LUME PRO - mody: E3D Lite6 w bowden + Titan, silniki 42BYGHM809
Awatar użytkownika
dziobu
Zasłużony
Posty: 1651
Rejestracja: 28 gru 2016, 16:38
Lokalizacja: Kraków
Drukarka: ZMorph 2.0(S)
x 447
Kontaktowanie:

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dziobu » 06 cze 2018, 20:04

Nie wiem co to masz za model, ale z tego screena to wystaje tylko jakaś masakra. Nie masz problemu znaku dziesiętnego? Plik dobrze czytasz?
Pozdrawiam
Paweł

Moje twory w 3D
Awatar użytkownika
dragonn
Zasłużony
Posty: 3693
Rejestracja: 12 gru 2016, 21:50
Lokalizacja: Opole
Drukarka: LUME
x 386

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dragonn » 06 cze 2018, 20:11

To co widzisz co wystaje to nie wystaje nic, akurat taka perspektywę złapało.
Z innej perspektywy:
2018-06-06-200808_3840x1080_scrot.png

Wrzuciłem też plik STL w załączniku
acl.stl.zip
(339.08 KiB) Pobrany 5 razy

A tak wygląda kawałek z obiektu już po załadowaniu pliku STL:

Kod: Zaznacz cały

{'normal': {'x': 0.351805, 'y': 0.936073, 'z': 0.000401691}, 1: {'x': 0.3646163537933138, 'y': 0.9311956690580432, 'z': 0.27263849176442156}, 2: {'x': 0.3411796178783677, 'y': 0.940035324101508, 'z': 0.19877573798031278}, 3: {'x': 2.37214, 'y': 6.53584, 'z': 1.38204}}]

A, zapomniałem dodać że żeby się ładnie kadrował model w oknie to normalizuje wartości jego od -1 do 1. Czy to może powodować problem z renderowaniem?
LUME PRO - mody: E3D Lite6 w bowden + Titan, silniki 42BYGHM809
Awatar użytkownika
dziobu
Zasłużony
Posty: 1651
Rejestracja: 28 gru 2016, 16:38
Lokalizacja: Kraków
Drukarka: ZMorph 2.0(S)
x 447
Kontaktowanie:

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dziobu » 06 cze 2018, 20:13

Może. Pamiętaj że biblioteka liczy na floatach/double (różnie) a te liczby nie mają nieskończonej dokładności.
Normalizuj do jakiejś dużej liczby, np 10^6 czy 10^10.
Pozdrawiam
Paweł

Moje twory w 3D
Awatar użytkownika
dragonn
Zasłużony
Posty: 3693
Rejestracja: 12 gru 2016, 21:50
Lokalizacja: Opole
Drukarka: LUME
x 386

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dragonn » 06 cze 2018, 22:37

Hmmm nie jestem pewny, normalizację robiłem po to bo nie wiem jak w OpenGL coś przeskalować/pracować na innych koordynatach niż -1 do 1 :D.
Ale dla testów wyłączyłem normalizację i niestety problem zostaje:
2018-06-06-223624_3840x1080_scrot.png

Oczywiście model się wtedy nie mieści w oknie ale jak widać problem zostaje.
LUME PRO - mody: E3D Lite6 w bowden + Titan, silniki 42BYGHM809
Awatar użytkownika
dziobu
Zasłużony
Posty: 1651
Rejestracja: 28 gru 2016, 16:38
Lokalizacja: Kraków
Drukarka: ZMorph 2.0(S)
x 447
Kontaktowanie:

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dziobu » 06 cze 2018, 22:48

A wygeneruj sobie sześcian i go załaduj.
Pozdrawiam
Paweł

Moje twory w 3D
Awatar użytkownika
dragonn
Zasłużony
Posty: 3693
Rejestracja: 12 gru 2016, 21:50
Lokalizacja: Opole
Drukarka: LUME
x 386

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dragonn » 06 cze 2018, 23:14

hahaha lol to był dobry pomysł :D, range(1,3) nie idzie 1 2 3 tylko 1 2, czeski błąd xD. Czyli tak naprawdę ładowałem tylko po 2 punkty z każdej ściany, brawo ja!
Ale został jeszcze jeden problem:
2018-06-06-231257_3840x1080_scrot.png
2018-06-06-231257_3840x1080_scrot.png (11.09 KiB) Przejrzano 223 razy

2018-06-06-231311_3840x1080_scrot.png

Testowane na kostce z otworem i tym modelu którego wcześniej ładowałem. Czy to jest już może być problem z samym światłem?
LUME PRO - mody: E3D Lite6 w bowden + Titan, silniki 42BYGHM809
Awatar użytkownika
dziobu
Zasłużony
Posty: 1651
Rejestracja: 28 gru 2016, 16:38
Lokalizacja: Kraków
Drukarka: ZMorph 2.0(S)
x 447
Kontaktowanie:

Re: Renderowanie plików STL w OpenGL - jak naprawić dziury

Postautor: dziobu » 06 cze 2018, 23:25

Niby może choć to raczej by był błąd z lat '90 ;p
Albo źle definiujesz normalną i masz odwrotnie ściany (spróbuj odwrócić wektor normalnej) albo masz kamerę za blisko. Obstawiam to pierwsze.
Pozdrawiam
Paweł

Moje twory w 3D

Wróć do „O wszystkim i o niczym”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość