Anonymní profil Adam – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Adam – Programujte.comAnonymní profil Adam – Programujte.com

 

Příspěvky odeslané z IP adresy 46.174.59.–

Adam
C / C++ › Hra v SDL zatěžuje CPU
18. 3. 2012   #155152

#12 yaqwsx
No páni, já něco tušil že ten kód není v pořádku.

Samozřejmě velké díky za rady. Doufám že ty hlavičkové soubory nějak zkutim, a jestli to někdy celé překopu, tak možná pošlu i odkat. DÍKY MOC KLUCI

Adam
C / C++ › Hra v SDL zatěžuje CPU
18. 3. 2012   #155149

#9 meqi
Takže pokud jsem to správně pochopil, tak mapu nevykreslit přez cykly ale zobrazit jako pozadí a pak ošetřovat, zda-li uživatel nepřekročil pevně dané souřadnice a nebo ošetřit barvou což ještě neumim. Navíc jsem se s funkcí update() zatím nesetkal. Něco podobného je SDL_Flip(), která převrací buffery.

Adam
C / C++ › Hra v SDL zatěžuje CPU
18. 3. 2012   #155146

#6 meqi
Takže vlastně vytvořit vlstní hlavičkové soubory

Adam
C / C++ › Hra v SDL zatěžuje CPU
18. 3. 2012   #155145

#3 yaqwsx
Ta nekonečná smyčka logiky programu je popsána v tutoriiálnech root, že to tak údajně je. Takže když to nějak načasuju to překreslování tak teoreticky cyklu mohou zůstat?

Adam
C / C++ › Hra v SDL zatěžuje CPU
18. 3. 2012   #155141

#2 meqi
A ten jeden soubor vadí tak moc?  A právě já moc nevymyslel to jak to dát bez těch cyklů.

Adam
C / C++ › Hra v SDL zatěžuje CPU
18. 3. 2012   #155136

Dobrý den,

Nechce se mi to věřit, ale moje čerstvě vydaná hra má takovou drobnou, ale ve skutečnosti gigantickou nepříjemnost. Na mojem procáku Intel Core i5, což je 4 jádro, mi tato hra zatíží chvilkama až na 100%. Hru jsem poslal kámošce až vyzkouší a jelikož má hodně slabého koma, tak se jí objekt se kterým má uživatel pohybovat nerozjel vůbec. Hra ale pořád jede, takže když se zavírá escapem tak funguje bez problému.

zde je soubor:

http://uloz.to/…cauition-rar

Adam
C / C++ › Instalační program
26. 2. 2012   #154100

Jo tak to funguje,

Díky myslel jsem že to bude složitější

Adam
C / C++ › Instalační program
25. 2. 2012   #154072

Jo facha ta prvni věc. Akorát při obsáhlejších projektech třeba v VS bude program vyžadovat net freemwork (nevím jak se to správně píše), a to si myslim že by už chtělo instalačku.

Adam
C / C++ › Instalační program
25. 2. 2012   #154067

Dobrý den,

Vytvořil jsem v SDL jednoduchou 2D hru, ale jak exe soubor zkopčim na flashku a spustim na jinem kompu, tak mi to napíše že chybí SDL knihovna. Takže jakmile bude chtít uživatel spustit můj výtvor, bude muset zkopírovat SDL knihovnu někde do systémových souborů, což je pro někoho naprosto nepřípustné. Takže chci vytvořit instalační program, který potřebnou knihovnu nakopíruje tam kde má. Aby to třeba byla klasika jak je pro win typické - next, next, install, finish. A pokud to bude složité, což předpokládám že bude, tak jetli je nějaká jednoduší varianta napsat takovýto program.

Adam
C / C++ › Zad nejde to OpenGL
15. 2. 2012   #153583

#7 yaqwsx
Aspoň že tak, jinak díky

Adam
C / C++ › Zad nejde to OpenGL
15. 2. 2012   #153577

A nemůžete mi poradit, kde sehnat kvalitní turotiály, protože vždy jak něco na internetu seženu, tak mi vždy někdo řekne, že je to buď napsané nějakým amatérem, nebo je to staré (což je častější)

Adam
C / C++ › Zad nejde to OpenGL
14. 2. 2012   #153554

#2 zlz
1) Z nehe článků to je, to máte pravdu

2)Už je to nějaký ten pátek co se programování zabývám, takže moc dobře vím co je to programování a co to obnáší.

3)Vrhl jsem se na 3D grafiku teď neboť kvůli toho jsem taky začal programovat a tak jsem se tedy rozhodnul po nějakých doporučeních jak od kamarádů tak z rad na internetu, že vyzkouším OpenGL.

4)Ten kód, který jsem zde uvedl je hned první jaký na nehe článcích byl, takže je to pro začátečníka programování počítačové grafiky kapku složitější.

5)Mimochodem s programováním a vykreslováním mám malé zkušenosti z GDI

Adam
C / C++ › Jak zprovoznit moje moduly
13. 2. 2012   #153528

Ne pardon, to je jiný příspěvek

jinak jsem se ale té chyby s polem vůbec nevšiml, díky za upozornění

Adam
C / C++ › Jak zprovoznit moje moduly
13. 2. 2012   #153526

Zdravím,

Nevím co už dělat, ale stále jsem ještě nespustil ani jednu aplikaci opengl. Prošel jsem snad stovky zdrojových kódu, návodu a už nevím čeho všeho. Avšak poslední kód který teď mám rozjetý v dev cpp není vyjímkou. Píše mi to tyhle chyby:

 D:\Knihovny\Plocha\main.cpp In function `GLvoid KillGLWindow()': 

77 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token 

77 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token

252 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token

252 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token

309 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token

309 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token

369 D:\Knihovny\Plocha\main.cpp `msg' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

369 D:\Knihovny\Plocha\main.cpp return-statement with a value, in function returning 'void'

D:\Knihovny\Plocha\Makefile.win [Build Error]  [main.o] Error 1

Už toho mám plné zuby. Začíná mi to připadat jak v linuxu. Věčně tomu něco chybí k tomu aby to běželo. Nemám nejmenší tušení co s tím je. Tady je kód:

Adam
C / C++ › Zad nejde to OpenGL
13. 2. 2012   #153518

Zdravím,

Nevím co už dělat, ale stále jsem ještě nespustil ani jednu aplikaci opengl. Prošel jsem snad stovky zdrojových kódu, návodu a už nevím čeho všeho. Avšak poslední kód který teď mám rozjetý v dev cpp není vyjímkou. Píše mi to tyhle chyby:

 D:\Knihovny\Plocha\main.cpp In function `GLvoid KillGLWindow()': 

77 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token 

77 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token

252 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token

252 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token

309 D:\Knihovny\Plocha\main.cpp a function-definition is not allowed here before '{' token

309 D:\Knihovny\Plocha\main.cpp expected `,' or `;' before '{' token

369 D:\Knihovny\Plocha\main.cpp `msg' undeclared (first use this function)

(Each undeclared identifier is reported only once for each function it appears in.)

369 D:\Knihovny\Plocha\main.cpp return-statement with a value, in function returning 'void'

D:\Knihovny\Plocha\Makefile.win [Build Error]  [main.o] Error 1

Už toho mám plné zuby. Začíná mi to připadat jak v linuxu. Věčně tomu něco chybí k tomu aby to běželo. Nemám nejmenší tušení co s tím je. Tady je kód:

#pragma comment (lib,"opengl32.lib")
#pragma comment (lib,"glu32.lib")
#pragma comment (lib,"glaux.lib")

#include <windows.h>// Hlavi?kový soubor pro Windows
#include <gl\gl.h>// Hlavi?kový soubor pro OpenGL32 knihovnu
#include <gl\glu.h>// Hlavi?kový soubor pro Glu32 knihovnu
#include <gl\glaux.h>// Hlavi?kový soubor pro Glaux knihovnu

HDC hDC = NULL;// Privátní GDI Device Context
HGLRC hRC = NULL;// Trvalý Rendering Context
HWND hWnd = NULL;// Obsahuje Handle našeho okna
HINSTANCE hInstance;// Obsahuje instanci aplikace

bool keys[256];// Pole pro ukládání vstupu z klávesnice
bool active = TRUE;// Ponese informaci o tom, zda je okno aktivní
bool fullscreen = TRUE;// Ponese informaci o tom, zda je program ve fullscreenu
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);// Deklarace procedury okna (funk?ní prototyp)

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)// Zm?na velikosti a inicializace OpenGL okna
{
     
      if (height==0)// Zabezpe?ení proti d?lení nulou
      {               
                 height=1;// Nastaví výšku na jedna
      }
     
      glViewport(0,0,width,height);// Resetuje aktuální nastavení
      glMatrixMode(GL_PROJECTION);// Zvolí projek?ní matici
      glLoadIdentity();// Reset matice
      gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);// Výpo?et perspektivy
      glMatrixMode(GL_MODELVIEW);// Zvolí matici Modelview
      glLoadIdentity();// Reset matice
}

int InitGL(GLvoid)// Všechno nastavení OpenGL
{
    glShadeModel(GL_SMOOTH);// Povolí jemné stínování
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);// ?erné pozadí
    glClearDepth(1.0f);// Nastavení hloubkového bufferu
    glEnable(GL_DEPTH_TEST);// Povolí hloubkové testování
    glDepthFunc(GL_LEQUAL);// Typ hloubkového testování
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// Nejlepší perspektivní korekce
    return TRUE;// Inicializace prob?hla v po?ádku
}

int DrawGLScene(GLvoid)// Vykreslování
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Smaže obrazovku a hloubkový buffer
glLoadIdentity();// Reset matice
// Sem m?žete kreslit

return TRUE;// Vykreslení prob?hlo v po?ádku
}

GLvoid KillGLWindow(GLvoid)// Zavírání okna
{
       if (fullscreen)// Jsme ve fullscreenu?
       {
                         ChangeDisplaySettings(NULL,0);// P?epnutí do systému
                         ShowCursor(TRUE);// Zobrazí kurzor myši
       }
      
       if (hRC)// Máme rendering kontext?
       {
                  if (!wglMakeCurrent(NULL,NULL))// Jsme schopni odd?lit kontexty?
                  {
                        MessageBox(NULL,"Release Of DC And RC Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
                  }
                  if (!wglDeleteContext(hRC))// Jsme schopni smazat RC?
                  {
                        MessageBox(NULL,"Release Rendering Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
                  }
                  hRC=NULL;// Nastaví hRC na NULL
       }
       BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
       {
            GLuint PixelFormat;// Ukládá formát pixel?
            WNDCLASS wc;// Struktura Windows Class
            DWORD dwExStyle;// Rozší?ený styl okna
            DWORD dwStyle;// Styl okna
            RECT WindowRect;// Obdélník okna

            WindowRect.left = (long)0;// Nastaví levý okraj na nulu
            WindowRect.right = (long)width;// Nastaví pravý okraj na zadanou hodnotu
            WindowRect.top = (long)0;// Nastaví horní okraj na nulu
            WindowRect.bottom = (long)height;// Nastaví spodní okraj na zadanou hodnotu
           
            fullscreen = fullscreenflag;// Nastaví prom?nnou fullscreen na správnou hodnotu
            hInstance = GetModuleHandle(NULL);// Získá instanci okna

            wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;// P?ekreslení p?i zm?n? velikosti a vlastní DC
            wc.lpfnWndProc = (WNDPROC) WndProc;// Definuje proceduru okna
            wc.cbClsExtra = 0;// Žádná extra data
            wc.cbWndExtra = 0;// Žádná extra data
            wc.hInstance = hInstance;// Instance
            wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);// Standardní ikona
            wc.hCursor = LoadCursor(NULL, IDC_ARROW);// Standardní kurzor myši
            wc.hbrBackground = NULL;// Pozadí není nutné
            wc.lpszMenuName = NULL;// Nechceme menu
            wc.lpszClassName = "OpenGL";// Jméno t?ídy okna
           
            if (!RegisterClass(&wc))// Registruje t?ídu okna
            {
                                       MessageBox(NULL,"Failed To Register The Window Class.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                                       return FALSE;// P?i chyb? vrátí false
            }
           
            if (fullscreen)// Budeme ve fullscreenu?
            {
                              DEVMODE dmScreenSettings;// Mód za?ízení

                              memset(&dmScreenSettings,0,sizeof(dmScreenSettings));// Vynulování pam?ti
                              dmScreenSettings.dmSize=sizeof(dmScreenSettings);// Velikost struktury Devmode
                              dmScreenSettings.dmPelsWidth= width;// Ší?ka okna
                              dmScreenSettings.dmPelsHeight= height;// Výška okna
                              dmScreenSettings.dmBitsPerPel= bits;// Barevná hloubka
                              dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
                             
                              // Pokusí se použít práv? definované nastavení
                              if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
                              {
                                      // Nejde-li fullscreen, m?že uživatel spustit program v okn? nebo ho opustit
                                      if (MessageBox(NULL,"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?","NeHe GL",MB_YESNO|
                                      MB_ICONEXCLAMATION)==IDYES)
                                      {
                                            fullscreen=FALSE;// B?h v okn?
                                      }
                              else
                                  {
                                      // Zobrazí uživateli zprávu, že program bude ukon?en
                                      MessageBox(NULL,"Program Will Now Close.","ERROR",MB_OK|MB_ICONSTOP);
                                      return FALSE;// Vrátí FALSE
                                  }                             
                              }
             }
             if (fullscreen)// Jsme stále ve fullscreenu?
             {
                               dwExStyle=WS_EX_APPWINDOW;// Rozší?ený styl okna

                               dwStyle=WS_POPUP;// Styl okna

                               ShowCursor(FALSE);// Skryje kurzor

             }
             else
                 {
                               dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;// Rozší?ený styl okna
                               dwStyle=WS_OVERLAPPEDWINDOW;// Styl okna   
                 }
             AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);// P?izp?sobení velikosti okna
            
             // Vytvo?ení okna
             if (!(hWnd=CreateWindowEx(dwExStyle,// Rozší?ený styl
                  "OpenGL",// Jméno t?ídy
                  title,// Titulek
                  dwStyle |// Definovaný styl
                  WS_CLIPSIBLINGS |// Požadovaný styl
                  WS_CLIPCHILDREN,// Požadovaný styl
                  0, 0,// Pozice
                  WindowRect.right-WindowRect.left,// Výpo?et ší?ky
                  WindowRect.bottom-WindowRect.top,// Výpo?et výšky
                  NULL,// Žádné rodi?ovské okno
                  NULL,// Bez menu
                  hInstance,// Instance
                  NULL)))// Nep?edat nic do WM_CREATE
             {
                  KillGLWindow();// Zruší okno
                  MessageBox(NULL,"Window Creation Error.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                  return FALSE;// Vrátí chybu
             }
            
             static PIXELFORMATDESCRIPTOR pfd=// Oznámíme Windows jak chceme vše nastavit
             {
                    sizeof(PIXELF ORMATDESCRIPTOR),// Velikost struktury
                    1,// ?íslo verze
                    PFD_DRAW_TO_WINDOW |// Podpora okna
                    PFD_SUPPORT_OPENGL |// Podpora OpenGL
                    PFD_DOUBLEBUFFER,// Podpora Double Bufferingu
                    PFD_TYPE_RGBA,// RGBA Format
                    bits,// Zvolí barevnou hloubku
                    0, 0, 0, 0, 0, 0,// Bity barev ignorovány
                    0,// Žádný alpha buffer
                    0,// Ignorován Shift bit
                    0,// Žádný akumula?ní buffer
                    0, 0, 0, 0,// Akumula?ní bity ignorovány
                    16,// 16-bitový hloubkový buffer (Z-Buffer)
                    0,// Žádný Stencil Buffer
                    0,// Žádný Auxiliary Buffer
                    PFD_MAIN_PLANE,// Hlavní vykreslovací vrstva
                    0,// Rezervováno
                    0, 0, 0// Maska vrstvy ignorována

              };
             
              if (!(hDC=GetDC(hWnd)))// Poda?ilo se p?ipojit kontext za?ízení?
              {
                 KillGLWindow();// Zav?e okno
                 MessageBox(NULL,"Can't Create A GL Device Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                 return FALSE;// Ukon?í program
              }
             
              if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))// Poda?ilo se najít Pixel Format?
              {
                 KillGLWindow();// Zav?e okno
                 MessageBox(NULL,"Can't Find A Suitable PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                 return FALSE;// Ukon?í program
              }
             
              if(!SetPixelFormat(hDC,PixelFormat,&pfd))// Poda?ilo se nastavit Pixel Format?
              {
                 KillGLWindow();// Zav?e okno
                 MessageBox(NULL,"Can't Set The PixelFormat.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                 return FALSE;// Ukon?í program
              }
             
              if (!(hRC=wglCreateContext(hDC)))// Poda?ilo se vytvo?it Rendering Context?
              {
                 KillGLWindow();// Zav?e okno
                 MessageBox(NULL,"Can't Create A GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                 return FALSE;// Ukon?í program
              }
             
              if(!wglMakeCurrent(hDC,hRC))// Poda?ilo se aktivovat Rendering Context?
              {
                  KillGLWindow();// Zav?e okno
                  MessageBox(NULL,"Can't Activate The GL Rendering Context.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                  return FALSE;// Ukon?í program
              }
             
              ShowWindow(hWnd,SW_SHOW);// Zobrazení okna
              SetForegroundWindow(hWnd);// Do pop?edí
              SetFocus(hWnd);// Zam??í fokus
              ReSizeGLScene(width, height);// Nastavení perspektivy OpenGL scény
             
              if (!InitGL())// Inicializace okna
              {
                 KillGLWindow();// Zav?e okno
                 MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION);
                 return FALSE;// Ukon?í program
              }
             
              return TRUE;// Vše prob?hlo v po?ádku

       }
      
       LRESULT CALLBACK WndProc(HWND hWnd,// Handle okna
               UINT uMsg,// Zpráva pro okno
               WPARAM wParam,// Dopl?kové informace
               LPARAM lParam)// Dopl?kové informace

               {
                      switch (uMsg);// V?tvení podle p?íchozí zprávy
                      {
                             case WM_ACTIVATE:// Zm?na aktivity okna
                             {
                                  if (!HIWORD(wParam))// Zkontroluje zda není minimalizované
                                  {
                                     active=TRUE;// Program je aktivní
                                  }
                                  else{
                                       active=FALSE;// Program není aktivní
                                       }
                                  return 0;// Návrat do hlavního cyklu programu
                             }
                            
                             case WM_SYSCOMMAND:// Systémový p?íkaz
                             {
                                  switch (wParam)// Typ systémového p?íkazu
                                  {
                                         case SC_SCREENSAVE:// Pokus o zapnutí šet?i?e obrazovky
                                         case SC_MONITORPOWER:// Pokus o p?echod do úsporného režimu?
                                         return 0;// Zabrání obojímu
                                  }
                                  break;// Návrat do hlavního cyklu programu
                             }
                            
                             case WM_CLOSE:// Povel k ukon?ení programu
                             {
                                  PostQuitMessage(0);// Pošle zprávu o ukon?ení
                                  return 0;// Návrat do hlavního cyklu programu
                             }
                            
                             case WM_KEYDOWN:// Stisk klávesy
                             {
                                  keys[wParam] = TRUE;// Oznámí to programu
                                  return 0;// Návrat do hlavního cyklu programu
                             }
                            
                             case WM_KEYUP:// Uvoln?ní klávesy
                             {
                                  keys[wParam] = FALSE;// Oznámí to programu
                                  return 0;// Návrat do hlavního cyklu programu
                             }
                            
                             case WM_SIZE:// Zm?na velikosti okna
                             {
                                  ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Ší?ka, HiWord=Výška
                                  return 0;// Návrat do hlavního cyklu programu
                             }
                      }
                      return DefWindowProc(hWnd, uMsg, wParam, lParam);// P?edání ostatních zpráv systému
               }

        int WINAPI WinMain(HINSTANCE hInstance,// Instance
            HINSTANCE hPrevInstance,// P?edchozí instance
            LPSTR lpCmdLine,// Parametry p?íkazové ?ádky
            int nCmdShow)// Stav zobrazení okna
            {
                MSG msg;// Struktura zpráv systému
                BOOL done=FALSE;// Prom?nná pro ukon?ení programu
               
                // Dotaz na uživatele pro fullscreen/okno
                if (MessageBox(NULL,"Would You Like To Run In Fullscreen Mode?", "Start FullScreen?", MB_YESNO | MB_ICONQUESTION) == IDNO)
                {
                   fullscreen=FALSE;// B?h v okn?
                }
               
                if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))// Vytvo?ení OpenGL okna
                {
                   return 0;// Konec programu p?i chyb?
                }
               
                while(!done)// Hlavní cyklus programu
                {
                               if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))// P?išla zpráva?
                               {
                                    if (msg.message==WM_QUIT)// Obdrželi jsme zprávu pro ukon?ení?
                                    {
                                       done=TRUE;// Konec programu
                                    }
                                    else// P?edáme zprávu procedu?e okna
                                    {
                                           TranslateMessage(&msg);// P?eloží zprávu
                                           DispatchMessage(&msg);// Odešle zprávu
                                    }
                               }
                               else
                               {
                                   if (active)// Je program aktivní?
                                   {
                                      if (keys[VK_ESCAPE])// Byl stisknut ESC?
                                      {
                                         done=TRUE;// Ukon?íme program
                                      }
                                   }
                                   else// P?ekreslení scény
                                   {
                                          DrawGLScene();// Vykreslení scény
                                          SwapBuffers(hDC);// Prohození buffer? (Double Buffering)
                                   }
                                  
                                   if (keys[VK_F1])// Byla stisknuta klávesa F1?
                                   {
                                      keys[VK_F1]=FALSE;// Ozna? ji jako nestisknutou
                                      KillGLWindow();// Zruší okno
                                      fullscreen=!fullscreen;// Negace fullscreen
                                      // Znovuvytvo?ení okna
                                      if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))
                                      {
                                         return 0;// Konec programu pokud nebylo vytvo?eno
                                      }
                                   }
                               }
                }
            }
           
        KillGLWindow();// Zav?e okno
        return (msg.wParam);// Ukon?ení programu
}

Adam
C / C++ › Jak zprovoznit moje moduly
12. 2. 2012   #153468

Dobrý den,

V ediroru devcpp jsem vytvořil tenhle svůj modul nazvaný "lasak.c":

extern int secti(int cislo1, int cislo2);
int main()
{   
}
extern int secti(int cislo1, int cislo2)
{
    return cislo1 + cislo2;
}

Dále jsem jej předělal na "lasak.h":

#ifndef _LASAK_
#define _LASAK_

extern int secti(int cislo1, int cislo2);

#endif

Pak jsem soubor "lasak.h", nakopíroval do složky kde je nainstalovaný devcpp konkrétně do složky "include". Jak jsem chtěl zkompilovat tenhle zdrojový kód: (omlouvám se za nepromyšlenost, ale to je mi teď naprosto jedno)

#include <stdio.h>
#include <lasak.h>
int main()
{
    int cisla[1];
   
    for (int i = 0; i <= 2; ++i){
        printf("Zadejte %d cislo: ", i);
        scanf("%d", cisla[i]);
        }
    printf("\n%d\n", secti(cisla[0], cisla[1]));
    getchar();
    return 0;
}

ale tohle mi nefuguje. Pak jsem  našel někde na vašich stránkách: "Vytvořte nový C++ projekt (nejlépe asi Windows Application), jděte do Projekt->Vlastnosti projektu->Parametry a do linkeru připište:" je to ze seriálu o SDL a myslím se že jak se includují knihovny o sdl tak by to mohlo fungovat i na moje. Jenže celý tenhle postup taky nefungoval. Pořád mi to háže chybu linkeru. Proto se Vás všech chci zeptat, jak se tvoří moduly, tak aby mi fungovali.

Adam
C / C++ › Funkce nedělá to co má
4. 1. 2012   #151975

#2 KIIV
No ty blaho!!!!!!!! Takova chyba!!!!! Pardon moje chyba. Ani jsem si toho nevšiml.

Adam
C / C++ › Funkce nedělá to co má
4. 1. 2012   #151973

Dobrý den,

Zde je program který má vypočítat délku řetězce zadaného uživatelem. Ale pokaždé mi to vypíše 0 znaků. Nevím proč.

#include <stdio.h>

#define A 100     //velikost pole pro retezce
#define B 0       //pro cyklus

int vratDelku(char r[]);

int main()
{
      do{  
            char retezec[A];
     
            printf("Zadejte retezec do %d znaku: ", A);
            gets(retezec);
            printf("Velikost retezce je %d znaku.\n", vratDelku(retezec));
      }while (B == 0);
      //vyprazdneni bufferu
      while(getchar() != '\n');
      getchar();
      return 0;
}

//vratDelku: vraci delku retezce predaneho argumentem
int vratDelku(char r[])
{
    int delka;
   
    for (int i = 0; i <= A; ++i){
        if (r[i] == '\0'){
           delka = 0;
           return 0;
           }
        else
            delka = i;
    }
    return delka;
}

Adam
C / C++ › Zbytek po celočíselném dělení
2. 1. 2012   #151873

#7 ondra.holub
Jo to je ono, to sem potřeboval vědět. 

Díky moc

Adam
C / C++ › Zbytek po celočíselném dělení
2. 1. 2012   #151870

#4 _tomas
Právě proto jestli to jde převádět pomocí atoi

int a, b;

a = atoi(vyjmi());

b = atoi(vloz());

a pak by bylo tohle

a % b

jenže tenhle způsob mi nejde

Adam
C / C++ › Zbytek po celočíselném dělení
2. 1. 2012   #151868

#2 ondra.holub
Mám k tomu ale použít operátor %

Adam
C / C++ › Zbytek po celočíselném dělení
2. 1. 2012   #151865

Dobrý den,

Učím se programovat podle knihy Karninghana a Ritchieho. Podle knihy jsem napsal kód (viz. níže). Program je vlastně jednoduchá kalkulačka podle obrácené polské notace (př.: 1 - 2 se musí zapisovat jako 1 2 -). K tomuto programu mám za úkol doplnit operátor zbytku dělení (%) a postarat se ještě o záporná čísla.

#include <stdio.h>
#include <stdlib.h> //pro atof()
#include <ctype.h> //pro isdigit()

#define MAXOP 100   //maximalni velikost operatoru nebo operandu
#define CISLO '0'   //signal oznamujici nalezeni cisla
#define MAXHODNOTA 100  //maximalni hloubka zasobniku
#define VELVPAMETI 100  //velikost vyrovnavaci pameti ve funkci vratz

int rp = 0;        //dalsi volna pozice na zasobniku
double zasobnik[MAXHODNOTA];      //zasobnik hodnot
char vpamet[VELVPAMETI];        //vyrovnavaci pamet pro vratz
int vpametp = 0;

int nactioperator(char []);
void vloz(double);
double vyjmi(void);
int nactiz(void);
void vratz(int);

/*Kazdy operand se umisti do zasobniku, jakmile se objevi operator
  ze zasobniku vyjmeme spravny pocet operandu (dva), na ne aplikujeme
  operator a vysledek se vrati zpet do zasobniku*/
main()
{
      int typ;
      double op2;
      char s[MAXOP], r[] = "";
     
      printf("\t****************************************\n");
      printf("\t* Tento program je jednoducha kalkulac-*\n");
      printf("\t* ka, podle obracene polske notace.    *\n");
      printf("\t* (1-2)*(4+5) zapisujte 1 2 - 4 5 + *  *\n");
      printf("\t* Program vytvoril Adam Lasak podle    *\n");
      printf("\t* algoritmu Kernighana a Ritchieho.    *\n");
      printf("\t* ver [1.0]                            *\n");
      printf("\t****************************************\n");
     
      scanf("%s", &r);
      while ((typ = nactioperator(r)) != EOF){
            switch(typ){
                case CISLO:
                     vloz(atof(r));
                     break;
                case '+':
                     vloz(vyjmi() + vyjmi());
                     break;
                case '*':
                     vloz(vyjmi() * vyjmi());
                     break;
                case '-':
                     /*zadani napr.: 1 2 - znamena, ze hodnota 2 se ulozi
                       pozdeji nez hodnota 1. => op2 = vyjmi() znamena
                       ze se od promenne rp odecte 1, a pri dalsim volani
                       vyjmi() bude jako prvni hodnota 1 (pri vypoctu)*/
                     op2 = vyjmi();
                     vloz(vyjmi() - op2);
                     break;
                case '/':
                     //uplne to stejne, akorat je zde podminka kvuli deleni 0
                     op2 = vyjmi();
                     if (op2 != 0.0)
                        vloz(vyjmi() / op2);
                     else
                         printf("Chyba: deleno nulou\n");
                     break;
                case '\n':
                     printf("\t%.8g\n", vyjmi());
                     break;
                case '%':
                     //ZDE JE CELOCISELNE DELENI
                     vloz(vyjmi() % vyjmi());
                     break;
                default:
                        printf("Chyba: neznamy prikaz %s\n", s);
                        break;
                        }
      }
      return 0;
}

//vloz: vlozi hodnoty do zasobniku
void vloz(double f)
{
     if (rp < MAXHODNOTA)
        zasobnik[rp++] = f;
     else
         printf("Chyba: plny zasobnik, nelze vlozit %g\n", f);
}

//vyjmi: vyjme hodnotu z vrcholu zasobniku
double vyjmi(void)
{
       if (rp > 0)
          return zasobnik[--rp];
       else {
            printf("Chyba: prazdny zasobnik\n");
            return 0.0;
            }
}

//nactioperator: ziska nasledujici operator nebo ciselny operand
int nactioperator(char r[])
{
    int i, z;
   
    while ((r[0] = z = nactiz()) == ' ' || z == '\t')
          ;
    r[1] = '\0';
    if (!isdigit(z) && z != '.')
       return z;    //neni cislem
    i = 0;
    if (isdigit(z)) //ziskej celociselnou cast
       while (isdigit(r[++i] = z = nactiz()))
             ;
    if (z == '.')   //ziskej zlomkovou cast
       while (isdigit(r[++i] = z = nactiz()))
             ;
    r[i] = '\0';
    if (z != EOF)
       vratz(z);
    return CISLO;
}

/*vratz vlozi vracene znaky do sdilene vyrovnavaci pameti - pole znaku. nactiz
  vyjme znak z vyrovnavaci pameti, neni-li prazdna, jestli je, zavolame getchar()*/
 
//nactiz: vrati nasledujici znak na vstupu
int nactiz(void)
{
    return (vpametp > 0) ? vpamet[--vpametp] : getchar();
}

//vratz: vrati znak zpet na vstup
void vratz(int z)
{
     if (vpametp >= VELVPAMETI)
        printf("Chyba: prilis mnoho znaku\n");
     else
         vpamet[vpametp++] = z;

}

HÁZÍ MI TO TUHLE CHYBU: 71 D:\Knihovny\Dokumenty\IT\C_C++\09_Externi_promenne\expromenne.cpp invalid operands of types `double' and `double' to binary `operator%'

takže jsem se pokoušel vracené hodnoty z funkce vyjmi() převést na celá čísla pomocí funkce atoi() z knihovny stdlib.h. Ale tohle bylo taky neúspěšné. Vubec nevim co s tim. 

Adam
C / C++ › K čemu je ?
1. 1. 2012   #151853

#3 nosko
Aháá, šikovná to věcička. Díky

Adam
C / C++ › K čemu je ?
1. 1. 2012   #151849

#5 volftomas
Dobrý den,

Prosím Vás, co znamená ten otazník v tomhle kódu?

(vpametp > 0) ? vpamet[--vpametp] : getchar();

Adam
C / C++ › Jde DirectX v devc++
31. 12. 2011   #151810

#5 volftomas
Díky všem za radu. Ale raději bych zůstal u DX, i když vím, že se jenom pouhé základy budu učit půl roku. Taky mi to pomůže ve škole, hlavně jak jste říkali v matematice. 3D a 2D grafiku totiž budeme brát na 110 % a  DX taky. Takže ještě jednou díky.

Adam
C / C++ › Prevod z dekadickych cisel n…
29. 12. 2011   #151756

#23 JoDiK
Aha, škoda no, tak dik

Adam
C / C++ › pomoc s programy
29. 12. 2011   #151748

Dobrý den,

U jazyka C nejsem zrovna dlouho a nějak takhle bych to udělal já. Čísla zadané uživatelem se raději ukládají jako čísla s pohyblivou čárkou (kdyby náhodou zadal desetinné číslo). Snad to mám dobře. Je to sice nepromyšlené, ale za to přehledné, protože každý výpočet má svoji funkci. Výpočet ve funkcích si musíte už udělat sama. Jelikož se u takovýchto výpočtů používají goniometrické funkce je na začátku nadeklarovaná knihovna math.h.     Zde je kód:

#include <stdio.h>
#include <math.h>

float strany(float uhel, float strana1, float strana2);
float uhel1(float uhel, float strana1, float strana2);
float uhel2(float uhel, float strana1, float strana2);

int main()
{
    float uhel, strana1, strana2;
    //ziskani hodnot od uzivatele
    printf("Zadejte uhel: ");
    scanf("%f", &uhel);
    printf("Zadejte stranu prilehlou uhlu: ");
    scanf("%f", &strana1);
    printf("Zadejte druhou stranu: ");
    scanf("%f", &strana2);
    //zobrazeni vysledku na obrazovku
    printf("\nStrany trojuhelniku jsou: %.2f, %.2f, %.2f.\n", strana1, strana2, strany(uhel, strana1, strana2));
    printf("Uhly trojuhelniku jsou: %.2f, %.2f, %.2f.\n",uhel, uhel1(uhel, strana1, strana2), uhel2(uhel, strana1, strana2));
   
    while (getchar() != '\n');
    getchar();
    return 0;
}

//funkce pro vypocet treti strany trojuhelniku
float strany(float uhel, float strana1, float strana2){
}

//funkce pro vypocet druheho uhlu trojuhelniku
float uhel1(float uhel, float strana1, float strana2){
}

//funkce pro vypocet tretiho uhlu trujuhelniku
float uhel2(float uhel, float strana1, float strana2){
}

Adam
C / C++ › Prevod z dekadickych cisel n…
29. 12. 2011   #151745

Ještě jeden takový drobný dotaz. Zde jsem vytvořil program pro převod z dekadické do ostatních soustav:

#include <stdio.h>
int main()
{
do{
    int cislo;

    printf("\nZadejte cislo v dekadicke soustave: ");
    scanf("%d", &cislo);
    printf("\nDecimalni soustava: %d\n", cislo);
    printf("Oktalova soustava: %o\n", cislo);
    printf("Hexadecimalni soustava: %x\n", cislo);
   
} while (getchar() != '\t');

//vyprazdneni bufferu
while (getchar() != '\n');
getchar();
return 0;   
}

Jak můžete vidět tak %o = oktalová, %x = hexadecimální.... A právě mě zajímá jestli něco takového právě existuje i na binární soustavu. 

Adam
C / C++ › Nejde program v OGL
29. 12. 2011   #151744

#4 KIIV
diky

Adam
C / C++ › Jde DirectX v devc++
29. 12. 2011   #151743

Dobrý den,

Sice jsem chtěl začít programovat OpenGL ale kámoši vysokoškoláci mi doporučili DirectX. Čtu návody na těchto stránkách: http://programovani.net-mag.cz/?action=art&num=69  a po dlouhém proklikávání se odkazy mi to nabídlo, že když chci programovat DirectX tak mám mít Visual C++, což má za následek stažení Visual Studia (třeba 2010). Jenže VS je placený a proto se chci zeptat jestli jde programovat DirectX i v obyčejném Dev C++, a jestli jo, tak kde můžu sehnat knihovny?

Adam
C / C++ › Nejde program v OGL
23. 12. 2011   #151598

ale jich tam je víc

Adam
C / C++ › Problém s programem v OpenGL
23. 12. 2011   #151596

Dobrý den,

Postupoval jsem podle vašeho tutoriálu na OGL, zde je ten kód:

#include <gl/glut.h>

void onResize(int w, int h) {
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
     glViewport(0, 0, w, h);
  gluPerspective(45,(double)w/(double)h,1,100);
  glMatrixMode(GL_MODELVIEW);
}

void init() {
     glEnable(GL_DEPTH_TEST);
     glClearColor(1.0,1.0,1.0,1.0);
     glEnable(GL_LIGHTING);
     glEnable(GL_LIGHT0);
}

void onDisplay(void){
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
     glLoadIdentity();
   
     glTranslatef(0.0, 0.0, -2.0);
     glRotatef(20,1.0,1.0,1.0);
    
     glBegin(GL_QUADS);
     glNormal3f(0.0,0.0,1.0); //normála mí?í sm?rem k nám po ose z
     glVertex3f(-0.1,0.1,0.0);
     glVertex3f(0.1,0.1,0.0);
     glVertex3f(0.1,-0.1,0.0);
     glVertex3f(-0.1,-0.1,0.0);
     glEnd();
    
       
     glutSwapBuffers();                               
}

int main (int argc, char **argv) {
   
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutCreateWindow("okno");  
   
    glutDisplayFunc(init);
    glutIdleFunc(onDisplay);
    glutReshapeFunc(onResize);

    glutMainLoop();  
    return 0;
}

Adam
C / C++ › Nejde program v OGL
23. 12. 2011   #151595

Dobrý den,

Postupoval jsem podle vašeho tutoriálu na OGL, zde je ten kód:

#include <gl/glut.h>

void onResize(int w, int h) {
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
     glViewport(0, 0, w, h);
  gluPerspective(45,(double)w/(double)h,1,100);
  glMatrixMode(GL_MODELVIEW);
}

void init() {
     glEnable(GL_DEPTH_TEST);
     glClearColor(1.0,1.0,1.0,1.0);
     glEnable(GL_LIGHTING);
     glEnable(GL_LIGHT0);
}

void onDisplay(void){
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
     glLoadIdentity();
   
     glTranslatef(0.0, 0.0, -2.0);
     glRotatef(20,1.0,1.0,1.0);
    
     glBegin(GL_QUADS);
     glNormal3f(0.0,0.0,1.0); //normála mí?í sm?rem k nám po ose z
     glVertex3f(-0.1,0.1,0.0);
     glVertex3f(0.1,0.1,0.0);
     glVertex3f(0.1,-0.1,0.0);
     glVertex3f(-0.1,-0.1,0.0);
     glEnd();
    
       
     glutSwapBuffers();                               
}

int main (int argc, char **argv) {
   
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(640,480);
    glutInitWindowPosition(10,10);
    glutCreateWindow("okno");  
   
    glutDisplayFunc(init);
    glutIdleFunc(onDisplay);
    glutReshapeFunc(onResize);

    glutMainLoop();  
    return 0;
}

jakmile chci zkompilovat hodí mi to tyhle chyby: 

  [Linker error] undefined reference to `_imp____glutInitWithExit@12' 

a další podobné se opakují ještě tak 15x a na konci je tohle

D:\Programy\Dev_C\Dev_Cpp\Makefile.win [Build Error]  [Projekt4.exe] Error 1

postupoval jsem přesně při stahování updatu OGL, takže nevím v čem jsem udělal chybu

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý