Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - Jam_Pawian

Strony: [1] 2
1
Grafika 3D / [Blender] Md2...
« dnia: Sierpień 13, 2009, 19:13:02 »
Witam

W jaki sposób zmusić blendera, żeby wyeksportował dany model z pozycją dokładnie taką, jak przy modelowaniu?
Próbowałem przenosić obiekt w edit mode, w object mode, przenosić armaturę w obu tych trybach i niewiele pomaga.
Problem leży w tym, że poruszam się trochę po omacku (czasem się uda przestawić model, a czasem nie :) ). Jakby ktoś mógł napisać, w jaki sposób to zrobić, byłbym wdzięczny.

Z góry dzięki

2
Grafika 3D / Odp: Blender - Zmiana skali po eksporcie do MD2
« dnia: Lipiec 15, 2009, 09:31:12 »
Witam

Problem pojawił się znowu gdy chcę wyeksportować model z armaturą. Kiedy zaznaczam tylko obiekt (bez kości) i daję "Save scale and rotation to ObData", obiekt W OpenGL'u wciąż jest powiększony, a kiedy próbuję to zastosować też do kości, zmienia się ich pozycja i rotacja (dziwnie się wykrzywiają...).

I drugie pytanie: Jak przenieść obiekt do punktu (0,0,0)? Kiedy naciskam N przy zaznaczonym modelu z kośćmi nie mam globalnych współrzędnych do zmiany, tylko inne wartości.

Z góry dzięki za rady

3
Szkółka / Odp: [OpenGL] Przycinająca się animacja
« dnia: Czerwiec 30, 2009, 12:50:51 »
Dzięki za sugestie. Jedyne, co pomogło to całkowite zrezygnowanie z tłumaczenia i przekazywania wiadomości. Może kiedyś wymyślę coś lepszego. Dzięki jeszcze raz.

4
Szkółka / Odp: [OpenGL] Przycinająca się animacja
« dnia: Czerwiec 24, 2009, 14:49:24 »
Ok, a co dokładnie Ci się w niej nie podoba?

5
Szkółka / [OpenGL] Przycinająca się animacja
« dnia: Czerwiec 24, 2009, 00:37:42 »
Witam

Robię grę FPP i już od pewnego czasu użeram się z tym problemem. Gdy poruszam myszką i naciskam przycisk z klawiatury animacja traci płynność(Kamera zaczyna przeskakiwać i wolniej się obraca). Animacja modeli nie zwalnia. Zmieniłem sterowanie z komunikatów Windowsowych na Direct Input. Nie pomogło.

Tak wygląda u mnie pętla komunikatów:

// main message loop


while (!done)
{

PeekMessage(&msg, hwnd, NULL, NULL, PM_REMOVE);

if (msg.message == WM_QUIT) // do we receive a WM_QUIT message?
{
done = true; // if so, time to quit the application
}



TranslateMessage(&msg); // translate and dispatch to event queue
DispatchMessage(&msg);

/*****************STEROWANIE************************************/

hr= g_lpDIKeyboard->GetDeviceState(sizeof(buffer), (LPVOID)& buffer); //Sprawdzanie stanu klawiatury

if(KEYDOWN(buffer, DIK_RIGHT))
{
  swiat->dresu->direction+= 2;
}
if(KEYDOWN(buffer, DIK_LEFT))
{
  myModel->Ustaw_stan_animacji(Bieg);
  swiat->dresu->direction-= 2;
}
if(KEYDOWN(buffer, DIK_UP))
{
  if(swiat->dresu->kolizja == false)
  if(swiat->dresu->Zwroc_predkosc() == 0)
  swiat->dresu->Ustaw_predkosc(1);
}


g_lpDIMouse->GetDeviceState(sizeof(mouse_state), (LPVOID)&mouse_state); //Pobieranie stanu myszy

mysz_y += mouse_state.lY;
                mysz_x += mouse_state.lX;
for (int i = 0; i < 4; i++)
{
if(mouse_state.rgbButtons[i] & 0x80) MouseButton[i] = true;
else MouseButton[i] = false;
}
                //Obsługa zdarzeń powodowanych przez mysz
if(MouseButton[1] == true)   //Na kliknięcie prawym przyciskiem wyjdź z pętli komunikatów
PostQuitMessage(0);


if ((mysz_x - stara_mysz_x) > 0) // mouse moved to the right
swiat->dresu->direction += 5.0f;
else if ((mysz_x - stara_mysz_x) < 0) // mouse moved to the left
swiat->dresu->direction -= 5.0f;

/********************************************************************/
/////////////////////////////////////////////
Render();
////////////////////////////////////////////
stara_mysz_x= mysz_x;
stara_mysz_y= mysz_y;

}




A tak funkcja Render():

void Render()
{

cameraX= swiat->dresu->position.x - (float)cos(DEG2RAD(swiat->dresu->direction))*20;
cameraY= swiat->dresu->position.y + 5;
cameraZ= swiat->dresu->position.z - (float)sin(DEG2RAD(swiat->dresu->direction))*20;

lookX = swiat->dresu->position.x + (float)cos(DEG2RAD(swiat->dresu->direction));
lookY = 5.0f;
lookZ = swiat->dresu->position.z + (float)sin(DEG2RAD(swiat->dresu->direction));

/************************************************************************************* TIMER*****/
//Ustala okres czasu, który upłynął od renderowania ostatniej ramki                                         
float elapsedSec= swiat->timer->GetElapsedSeconds(1);
/***********************************************************************************************/
// clear screen and depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();



// set the camera position
gluLookAt(cameraX, cameraY, cameraZ, lookX, lookY, lookZ, 0.0, 1.0, 0.0);




    /******************************RYSOWANIE I ANIMACJA OBIEKTÓW*************************************/
//Przed funkcją render sprawdzany jest stan klawiatury
swiat->Wykrywaj_kolizje();
swiat->Poruszaj_obiekty();
swiat->Rysuj_obiekty(elapsedSec);
   /*************************************************************************************/
glFlush();


SwapBuffers(g_HDC); // bring backbuffer to foreground
}


Z góry dzięki za wszelką pomoc.

6
Grafika 3D / Odp: Blender - Zmiana skali po eksporcie do MD2
« dnia: Czerwiec 14, 2009, 23:24:52 »
I działa.:)   Dzięki bardzo.

7
Grafika 3D / Blender - Zmiana skali po eksporcie do MD2
« dnia: Czerwiec 14, 2009, 17:51:15 »
Witam

Kiedy eksportuję model do md2 z Blendera, zmienia mi skalę (zwykle po dwóch osiach). Ustawienie 'Fix Scale' nie pomaga. Miał ktoś podobny problem. Prosiłbym o pomoc.

Z góry dzięki

8
Szkółka / Odp: Problem z WM_LBUTTONUP
« dnia: Maj 31, 2009, 00:05:02 »
Nie no, cienki jestem jeszcze jeśli chodzi o technologie używane w tworzeniu gier, ale C++ znam nieźle i jakbym zrobił takiego byka, to bym się tu ze wstydu spalił :)

Dzięki za sugestie, ale ja ten problem narazie sobie odpuszczam, bo jak napisałem znalazłem rozwiązanie mało eleganckie, ale wystarczające dla tego, co teraz robię.

9
OpenGL / Odp: Zamiana jednostek w pikselach na współrzędne OGL
« dnia: Maj 30, 2009, 14:56:22 »
Ha, działa :)

Dzięki wielkie za pomoc Dab. Zauważyłem też, że nie trzeba wywoływać tej funkcji  Pobierz_dane()  co klatkę, a wystarczy tylko po kliknięciu.

10
OpenGL / Odp: Zamiana jednostek w pikselach na współrzędne OGL
« dnia: Maj 30, 2009, 14:19:41 »
Dzięki za szybką odpowiedź.

Czyli z tego, co zrozumiałem, to zamiast 0.0 mam dać to, co zwróci glReadPixels?

I jeszcze jedno: co mam wysłać tej funkcji (chodzi mi o: winX, winY, winZ )?

11
OpenGL / Zamiana jednostek w pikselach na współrzędne OGL
« dnia: Maj 30, 2009, 13:43:48 »
Witam

Mam pytanie do Rega i wszystkich, którzy rozumieją funkcje gluProject i gluUnProject. Reg,  dokopałem się do tematu, w którym podałeś funkcję zamieniającą współrzędne myszy na współrzędne OpenGL:     http://forum.warsztat.gd/index.php/topic,2147.0.html
Próbowałem ją zastosować u siebie i wynik jest taki, że zamiast rysować obiekt w miejscu kliknięcia myszy, rysuje go w punkcie (0,0,0) , albo w okolicach.

Używane tablice i zmienna logiczna:
bool m_PickInfo_Saved;
int m_PickInfo_Viewport[10];
double m_PickInfo_ModelView[10];
double m_PickInfo_Projection[10];

Funkcja, którą wywołuję przy renderowaniu każdej klatki:
void CSwiat::Pobierz_dane()
{
// Pobranie informacji do testowania promienia
glGetIntegerv(GL_VIEWPORT, m_PickInfo_Viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, m_PickInfo_ModelView);
glGetDoublev(GL_PROJECTION_MATRIX, m_PickInfo_Projection);
m_PickInfo_Saved = true;
}



A tutaj funkcja, którą wywołuję po wykryciu kliknięcia myszy:

bool CSwiat::Wylicz_punkt_klikniecia(CVector* Punkt_klikniecia, CVector* Kierunek, int Mysz_x, int Mysz_y)
{

if (!m_PickInfo_Saved)
return false;

double MyWinX = static_cast<double>(Mysz_x);
double MyWinY = static_cast<double>(m_PickInfo_Viewport[3]-Mysz_y-1);
double OutX1, OutY1, OutZ1;
double OutX2, OutY2, OutZ2;

if (!gluUnProject(
MyWinX, MyWinY, 0.0,
m_PickInfo_ModelView,
m_PickInfo_Projection,
m_PickInfo_Viewport,
&OutX1, &OutY1, &OutZ1))
{
return false;
}
if (!gluUnProject(
MyWinX, MyWinY, 0.1,
m_PickInfo_ModelView,
m_PickInfo_Projection,
m_PickInfo_Viewport,
&OutX2, &OutY2, &OutZ2))
{
return false;
}

Punkt_klikniecia->x = static_cast<float>(OutX1);
Punkt_klikniecia->y = static_cast<float>(OutY1);
Punkt_klikniecia->z = static_cast<float>(OutZ1);

Kierunek->x = static_cast<float>(OutX2) - Punkt_klikniecia->x;
Kierunek->y = static_cast<float>(OutY2) - Punkt_klikniecia->y;
Kierunek->z = static_cast<float>(OutZ2) - Punkt_klikniecia->z;

return true;
}




I sam moment wywołania tej funkcji:

CVector Punkt_klikniecia, Kierunek;

Wylicz_punkt_klikniecia(&Punkt_klikniecia, &Kierunek, myszka->Click_X, myszka->Click_Y);



99% to Twój kod, zmieniłem tylko nazwy zmiennych. Wiecie co tu jest nie tak?

12
Szkółka / Odp: Problem z WM_LBUTTONUP
« dnia: Maj 30, 2009, 13:30:34 »
Jeśli chodzi o myszkę to niewiele:
case WM_LBUTTONUP:
{
swiat->Rysuj_strzalke();
}

 :)

Narazie to rozwiązałem tak, że wywołuję Rysuj_strzalke tylko, gdy pozycja myszy się zmieni względem poprzedniej. Trochę to mało eleganckie, ale puki co działa...

13
Szkółka / Problem z WM_LBUTTONUP
« dnia: Maj 27, 2009, 14:01:40 »
Witam

Mam problem z obsługą kliknięć za pomocą komunikatów windowsowych.
Chciałbym, aby po otrzymaniu komunikatu 'WM_LBUTTONUP' wywołała się funkcja:

void CSwiat::Rysuj_strzalke()
{
if(l_strzalki < 20)
{
Strzalki_stan[l_strzalki]= 1; //1 oznacza, że strzałka znajdująca się w Strzalki[l_strzalki] ma być narysowana
Strzalki[l_strzalki]->Zmien_pozycje(myszka->Zwroc_X()-400, -5, myszka->Zwroc_Y()-310);
l_strzalki++;
}
else
{
PostQuitMessage(0);
}

}

Zmienia ona wartości w tablicy Strzalki_stan[20], a na jej podstawie w każdej klatce rysowane są strzałki.

Problem w tym, że Windows jak gdyby dostawał kilka komunikatów na każde kliknięcie i wywoływał tę funkcję wiele razy.



Proszę o pomoc i z góry dziękuję

14
Matematyka i fizyka / Odp: Problem z kierunkiem poruszania postaci
« dnia: Maj 24, 2009, 16:45:54 »
Wielkie dzięki stary

Użycie funkcji atan2 rozwiązało wszystkie problemy. I masz w sumie rację z tą kosmetyką. Ładniej to nawet wygląda :).

15
Matematyka i fizyka / Problem z kierunkiem poruszania postaci
« dnia: Maj 24, 2009, 14:51:09 »
Witam.

Wiem, że te problemy pojawiały się już często i przepatrzyłem forum, ale nie znalazłem rozwiązania mojego problemu.
Mam zrobić poruszanie się postaci po krzywej Beziera, co się sprowadza do wędrówki do kolejnych punktów. Problemy są 2.

1. Postaci zdarza się iść tyłem.
2. Postać znika na początku i na końcu trasy.


A robię to tak. Najpierw wyznaczam cele, które zapisuje w tablicy wektorów Cel[10].
Potem każę mu iść do następnego celu i czekam aż tam dojdzie.

Później obracam go w stronę celu (to szwankuje) i wysyłam go w drogę:

bool CMD2Model::Przemieszczenie_automat(CVector Cel) //Jeśli dotrze do zadanego celu (CVector Cel), to zwraca true
{

CVector Kierunek= Cel - position; //Tworzenie wektora, który jest różnicą położenia wózka i jego celu
Kierunek.Normalize();             //Normalizacja

//Obrócenie w stronę celu
direction= RAD2DEG(asin((Cel.z - position.z) / (Cel.x - position.x)));


if((position.x >= Cel.x - 5 && position.x <= Cel.x + 5) && (position.z >= Cel.z - 5 && position.z <= Cel.z + 5)) //Gdy dotarł do celu, to wyznacz kolejny cel
{
return true;
}

else
{
position.x += Kierunek.x;
position.z += Kierunek.z;
}



}



A tak wygląda rysowanie postaci:

glPushMatrix();
   
   glTranslatef(dresu->Zwroc_X(), dresu->Zwroc_Y(), dresu->Zwroc_Z());  //Przemieszcza się do pumktu o współrzędnych rysowanego obiektu
   glRotatef(-dresu->direction + 90.0, 0.0, 1.0, 0.0);
   glRotatef(270.0f, 0.0f, 0.0f, 1.0f);
   dresu->Animate(39, 80, 0.5);

glPopMatrix();


Wydaje mi się, że coś jest nie tak ze zmienną direction, ale nie wiem co. Próbowałem długo, ale nie dałem rady i proszę o pomoc :)

Z góry dzięki.

Strony: [1] 2