Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

qwerty5712

open gl zmiana rozdzielczości

Rekomendowane odpowiedzi

Miałem początkowo program, który geneorował obraz o zadanym rozmiarze np 640 na 480. Dla każdego punktu robiłem coś.

Teraz przechodzę do open gl z tym obrazkiem i startowo okno ma wymiar obrazku i chciałbym, żeby teraz resize okna robil tak, że po prostu zwiększam zmniejszam ilość pikseli w obrazku. Początkowo mam 1 piksel odpowiada 1 jednostce w obrazku. Próbwałem zrobić, żeby jednostkaX = 640/Width. Jednak były problemy z dokladnością na floatach. Czy da się to zrobić lepiej.

 

Jak tak zrobie y, to wtedy rysuje OK. Muszę jednak użyć floatów dlatego, bo korzystam z czegoś co nie obsługuje doubli.

float stepY = sc->getHeight()/Y;
float stepX = sc->getWidth()/X;

for (double y = 0; y < sc->getHeight(); y +=stepY) { 
	for (int x = 0; x < sc->getWidth();x ++) {
               }
       }

 

Dobra obszedłem to algorytmem Kohana

 

               float cY = 0.0;
               for (float y = 0; y < sc->getHeight(); ) {
               ....
               float Tmp = stepY - cY;
	float t =  y + Tmp ;
	cY = (t- y) - Tmp;
	y = t;
               }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Miałem początkowo program, który geneorował obraz o zadanym rozmiarze np 640 na 480. Dla każdego punktu robiłem coś.

Teraz przechodzę do open gl z tym obrazkiem i startowo okno ma wymiar obrazku i chciałbym, żeby teraz resize okna robil tak, że po prostu zwiększam zmniejszam ilość pikseli w obrazku. Początkowo mam 1 piksel odpowiada 1 jednostce w obrazku. Próbwałem zrobić, żeby jednostkaX = 640/Width. Jednak były problemy z dokladnością na floatach. Czy da się to zrobić lepiej.

 

Jak tak zrobie y, to wtedy rysuje OK. Muszę jednak użyć floatów dlatego, bo korzystam z czegoś co nie obsługuje doubli.

float stepY = sc->getHeight()/Y;
float stepX = sc->getWidth()/X;

for (double y = 0; y < sc->getHeight(); y +=stepY) { 
	for (int x = 0; x < sc->getWidth();x ++) {
               }
       }

 

Spróbuj to sensowniej wytłumaczyć, bo to co mówisz ma sens tylko do pewnego momentu. I napisz co konkretniej chcesz tym osiągnąć (jaki jest twój cel) bo może da się to zrobić inaczej.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mam funkcję, która zwraca kolor pixela w punkcie sceny x,y. Nie jest istotne czy x jest całkowity czy rzeczywisty. Nawet jeśli poda ktoś x = miliard, y = miliard to poda kolor punktu w miejscu(x,y). Użytkownik chce jednak pewien wycinek sceny o rozmiarach przykładowo 640, 480. I tak sobie myślałem, że w open glu jeśli zmienimy rozmiar okna, żeby nie rysował jednak dalej tych punktów ze sceny, bo np wiem, że dalej nic ciekawego niema, żeby rysował po prostu dokładniej lub mniej dokładniej tą scenę, którą już mamy. Ogólnie korzystam z supersamplingu i generuje przykładową tą funkcją 4 punkty na piksel w celu uzyskania dokładniejszego obraz.

 

Plus to ma taki, że jeśli ktoś przykładowo w przyszłosci chciał zdefiniować scene na przedziale 0,1 x 0,1, to nie ma problemu. Możliwe, że da sie zrobić jakieś Quady i jakoś na nim to wszystko robić i on sam odpowiednio dostosuje nam obraz do okna, tylko ja nie umiem z tego korzystać. Rysując pixel per pixel wiem co rysuję.

 

Wadą jest to, że ogranicza mnie float.(Mogę użyć doubla, ale komputer z którego korzystam nie obsługuje doubli)(CUDA)

 

Implementuję prosty Ray marcher.

addblin.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zamiast bezpośrednio na ekran rysować utwórz własną teksturę o wymiarach x na y i tam zapisz efekty(http://www.sorgonet.com/linux/noise_textures/ generowanie na przykładzie szumu perlina). Później narysuj pełnoekranowy quad:

glBegin(GL_QUADS);

glVertex2f(-1,-1);glVertex2f(1,-1);glVertex2f(1,1);glVertex2f(-1,1);

glEnd();

i zbinduj wygenerowaną teksturę. http://nehe.gamedev.net/tutorial/texture_mapping/12038/

 

Uzyskany efekt będzie podobny do tego co chcesz(antialiasing powstanie automatycznie gdy rozmiar tekstury będzie większy niż rozmiar okna), jednak dalej będzie problem dokładności samplerów, które dostają mapowanie UV jako float.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Słyszałem o podobnym rozwiazaniu tylko chyba zamiast textury z pixel sharder.( Tylko nigdzie nie mogłem znaleść przykładu z tym). Rozwiazanie z texturami było by spoko tylko musiałbym przerobić wzory i nauczyć się stosować textury. Rysuje na buforze nie na ekranie, ale rozumiem, że użycie textury jest lepszym rozwiazaniem pobawię sie tym jak mi starczy czasu na razie mój główny problem, to zasymulowanie kamery w open glu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

O ile nie musisz wykonywać jakiś specjalnych operacji na pikselach, zabawa w shadery nic nie da - Twój shader sprowadzi się tylko do samplowania tekstury.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...