Jason Napisano Grudzień 23, 2010 Zgłoś Share Napisano Grudzień 23, 2010 No to super, że widać postępy Jakbyś chciał zrobić menu sterowane myszką, to możesz użyć funkcji gluUnProject do określenia położenia myszy na współrzędnych OpenGL. Ale jak nie masz czasu to wygodniej Ci będzie zrobić menu na klawiaturze. Chyba, że w ogóle z OpenGL'a zrezygnowałeś, to nie musisz stosować takich kombinacji. A co do studiów, to tak bywa. Ja akurat z przedmiotów elektronicznych słabo łapię, bo interesuje mnie głównie tworzenie gier Ale jakoś te niemiłe przedmioty przebolałem i na pracę inżynierską piszę gry w Python'ie (którego też nie mieliśmy na studiach - nikt nawet nie wspominał na wykładach - za to dużo o C# mówili jak na złość). Ja już od gimnazjum kombinowałem i się do wszystkiego od złej strony zabierałem. Za to teraz się trochę w tym orientuję i jakoś daję radę My projekty z C++ mogliśmy pisać jak chcemy, nawet konsolowe, tylko wtedy trzeba ładnie napisać obiektowo itp. Napisałem coś z OpenGL'em i było, ale dopiero grafikę komputerową (właśnie w kontekście OpenGL) mieliśmy na następny semestr Link do komentarza Udostępnij na innych stronach More sharing options...
Qbe Napisano Grudzień 23, 2010 Autor Zgłoś Share Napisano Grudzień 23, 2010 Sterowanie myszką robię w SDLu na zasadzie obsługi myszki, która wyłapuje pozycję (x,y). Mam mnóstwo instrukcji warunkowych, które w zależności od tego, w którym "ekranie" gry się znajdują, wykonują jakąś akcję typu np. done=1 gdy klikniemy w obszarze tekstury z napisem QUIT. Cały program podzieliłem tak: bool program[2]={true,false,false}; // 0-menu, 1-rozmieszczanie statków, 2-gra i przy przechodzeniu do następnego "ekranu" ustawiam odpowiednio PRAWDĘ i FAŁSZ w tablicy. Nie wiem czy się dobrze za to zabieram, ale nic mądrzejszego nie wymyśliłem... Coś mi się kurde zepsuło... Nagle SDL w ogóle nie obsługuje ani klawiatury, ani myszki... Działało wszystko. Wyłączyłem laptopa i po jego włączeniu za kilka godzin, nagle gra jest niema na oba akcesoria... Skąd to się bierze? Nie chce podczas prezentacji projektu, by coś takiego miało miejsce... Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Grudzień 23, 2010 Zgłoś Share Napisano Grudzień 23, 2010 a nie lepiej użyć do tego typu int? a później sprawdzać tak: switch(liczba) { case 0: menu(); break; case 1: rozmieszczanie(); break; default: gra(); break; } Link do komentarza Udostępnij na innych stronach More sharing options...
Qbe Napisano Grudzień 23, 2010 Autor Zgłoś Share Napisano Grudzień 23, 2010 niby można też tak, ale po co szastać tak pamięcią Typ int zajmuje więcej niż bool. Edytowałem wcześniejszy post. Może kolega pomoże z tym SDLem? Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Grudzień 23, 2010 Zgłoś Share Napisano Grudzień 23, 2010 Wątpię by typ bool dużo mniej zajmował... np. w języku C nie ma typu bool i chyba bool w C++ zajmuje przynajmniej tyle co char. Co do SDL'a to musiałeś coś sknocić w kodzie. Nie widząc kodu, ciężko ocenić, o co biega. Może obsługę myszy i klawiatury wsadziłeś w miejsce, gdzie się nie wykonuje w pętli aplikacji? Możesz wsadzić tam jakiegoś chociażby printf'a, żeby zobaczyć czy to się wykonuje. Link do komentarza Udostępnij na innych stronach More sharing options...
Qbe Napisano Grudzień 24, 2010 Autor Zgłoś Share Napisano Grudzień 24, 2010 Z tego co mnie uczono, to bool zajmuje najmniej ze wszystkich typów danych. Przecież przechowuje on jedynie 0 lub 1, więc de facto można go zapisać nawet na jednym bicie, ale w praktyce już nie pamiętam ile potrzebuje. Ale nie ma to większego znaczenia. Na 3GB pamięci nie muszę się przejmować czy tworząc 3 liczby całkowite, czy 3 logiczne braknie mi pamięci:) Po prostu tak nas uczą, by zwracać uwagę na to by oszczędzać procesor i zasoby pamięci:) Właśnie problem w tym, że fragmentu kodu z obsługą myszki, czy klawiatury nie zmieniałem... Był on cały czas zwinięty i tworzyłem w całkiem innym pliku funkcję do rysowania planszy. Problem jest natury ogólnej, bo nie działa mi obsługa tych akcesoriów na żadnym ekranie. Teraz zgłupiałem... Bo nagle działa tak jak powinno. Tylko jeśli podczas prezentacji projektu coś przestanie działać, to bardzo się zdenerwuje... Link do komentarza Udostępnij na innych stronach More sharing options...
Spider100 Napisano Grudzień 24, 2010 Zgłoś Share Napisano Grudzień 24, 2010 Jason powinieneś spłonąć w czeluściach piekła za ten kod opengl który wrzuciłeś... Toż to gwałci wydajność dla dłuższego tekstu: glPushMatrix() glBindTexture(GL_TEXTURE_2D,self.font_t.texID) glTranslatef(x,y,0) glScalef(scale,scale,1.0) while i glTranslatef(lx,0,0) ch = self.char[ ord( s )-ord(' ') ] glBegin(GL_QUADS) glTexCoord2f(ch[0],ch[1]) glVertex2d(-lx,ly) ... glEnd() i += 1 glPopMatrix() Zastanawiam się jak ciężko w pythonie zrobić tablicę i wrzucić do niej dane, a później jednym wywołaniem narysować cały napis. Jak w pythonie nie masz nowszych nagłówków do opengla, tylko te z przed 10 lat to się przenieś na jakiś porządny język programowania taki jak Delphi i po kłopocie Wesołych Świąt dla całego Unit1 www.spider.dathox.com Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Grudzień 24, 2010 Zgłoś Share Napisano Grudzień 24, 2010 W Python'ie mam nagłówki dla OpenGL 3.2, jednak moja znajomość OpenGL ogranicza się do starszych wersji Skoro zastanawiasz się, jak w Python'ie zrobić tablicę to oświecę Cię: KODtab=[] tab.append(4) Tablica jest zaimplementowana jako lista, dodany jeden element, cyfra 4. A teraz Ty mnie oświeć, jakie funkcje mają nowe nagłówki do zrobienia tego co napisałeś? A Delphi to odpal mi na Linuksie, skoro takie cudowne Link do komentarza Udostępnij na innych stronach More sharing options...
Spider100 Napisano Grudzień 24, 2010 Zgłoś Share Napisano Grudzień 24, 2010 A Delphi to odpal mi na Linuksie, skoro takie cudowne Ooo zaczyna się http://www.songho.ca/opengl/gl_vertexarray.html Wystarczy nawet ogl 1.1 czyli nadal dość stary więc pewnie na linuxie będzie działać! Możesz też poszaleć i użyć VBO jeśli tekst jest długi i nie aktualizujesz go co klatkę. www.spider.dathox.com Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Grudzień 24, 2010 Zgłoś Share Napisano Grudzień 24, 2010 CYTAT(Spider100 @ pią, 24 gru 2010 - 12:50) Ooo zaczyna się To Ty zacząłeś. To Ty wyjechałeś z Delphi ni stąd ni zowąd http://www.songho.ca/opengl/gl_vertexarray.html Czyli o to Ci chodziło To akurat znam, pewnie wprowadzę te optymalizacje, dzięki. Mi i tak trzeba było tylko coś do wypisywania ilości zdobytych punktów, to mało tekstu. Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Grudzień 24, 2010 Zgłoś Share Napisano Grudzień 24, 2010 Ooo zaczyna się http://www.songho.ca/opengl/gl_vertexarray.html Wystarczy nawet ogl 1.1 czyli nadal dość stary więc pewnie na linuxie będzie działać! Możesz też poszaleć i użyć VBO jeśli tekst jest długi i nie aktualizujesz go co klatkę. KOD# -*- coding: utf-8 -*- from OpenGL.GL import * from OpenGL.GLU import * import pygame, pygame.image from pygame.locals import * from Texture import Texture TEXDIR="data/textures/" class Font(): def __init__(self): self.font_t = Texture(TEXDIR+"Font.png") self.char=[] max_x=21 cur_x=0 cur_y=0 for i in range(ord(' '),ord('~')): self.lx = 0.18 #szerokosc znaku ly = 0.345 #wysokosc znaku index = glGenLists(1) ch=[float(cur_x)*12.0/256.0,-float(cur_y)*23.0/256.0,float(cur_x+1)*12.0/256.0,-float(cur_y+1)*23.0/256.0] glNewList(index, GL_COMPILE) glBegin(GL_QUADS) glTexCoord2f(ch[0],ch[1]) glVertex2d(-self.lx,ly) glTexCoord2f(ch[2],ch[1]) glVertex2d(0,ly) glTexCoord2f(ch[2],ch[3]) glVertex2d(0,0) glTexCoord2f(ch[0],ch[3]) glVertex2d(-self.lx,0) glEnd() glEndList() self.char.append(index) cur_x+=1 if cur_x>=max_x: cur_x=0 cur_y+=1 def draw(self,s,x=0.0,y=0.0,scale=1.0): s = str(s) i = 0 glPushMatrix() glBindTexture(GL_TEXTURE_2D,self.font_t.texID) glTranslatef(x,y,0) glScalef(scale,scale,1.0) while i < len(s): glTranslatef(self.lx,0,0) ch = self.char[ ord( s )-ord(' ') ] glCallList(ch) i += 1 glPopMatrix() def __del__(self): for lista in self.char: glDeleteLists(lista, 1) Tak może być ? I już mnie piekło nie pochłonie ? Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.