.[ ČeskéHry.cz ].
[SOLVED] [OpenGL] Nesprávne vykresľovanie objektu

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Daclable



Založen: 11. 03. 2013
Příspěvky: 8

PříspěvekZaslal: 4. říjen 2013, 17:00:34    Předmět: [SOLVED] [OpenGL] Nesprávne vykresľovanie objektu Odpovědět s citátem

Zdravím,
trochu sa babrem s SFML a OpenGL, používajúc tento tutoriál.
Problém nastáva pri renderovaní 3D objektuobjektu.
Video

main.cpp
kód:
//   System libraries
#include <iostream>
//   Graphics libraries
#include <GL/glew.h>
#include <GL/glut.h>
#include <SFML/Window.hpp>
//   Custom classes and free functions
#include "../inc/main.hpp"

bool fullscreen = false;
bool vsync= true;

int main()
{
   sf::Window window(sf::VideoMode(800, 600, 32), "SFML/NeHe OpenGL"); //

   initGL();
   resizeScene(800, 600);

   while (window.isOpen())
   {
      sf::Event event;
      while (window.pollEvent(event))
      {
         if (event.type == sf::Event::Closed)
            window.close();

         if (event.type == sf::Event::Resized)
            resizeScene(event.size.width, event.size.height);

         switch (event.key.code)
         {
            case sf::Keyboard::Escape:
               window.close();
               break;
            case sf::Keyboard::F:
               fullscreen = !fullscreen;
               window.create(fullscreen ? sf::VideoMode::getDesktopMode() : sf::VideoMode(800, 600, 32) , "SFML/NeHe OpenGL",
               (fullscreen ? sf::Style::Fullscreen : sf::Style::Resize | sf::Style::Close));
               resizeScene(window.getSize().x,window.getSize().y);
               break;
            case sf::Keyboard::F5:
               vsync = !vsync;
               break;
            default:
               break;
         }
      }
      window.setVerticalSyncEnabled(vsync);
      window.setActive();

      drawScene();

      window.display();
   }

   return EXIT_SUCCESS;
}


BTW - neuvažovali ste nad zavedením [spoiler][/spoiler]?
BTW2 - Vedľajším problémom je občasné samovoľné prepínanie z a do fullscreen módu a tatktiež samovoľné vypínanie.


Naposledy upravil Daclable dne 5. říjen 2013, 09:55:50, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 4. říjen 2013, 17:06:21    Předmět: Odpovědět s citátem

Vypadá to na otočený depth test

Zkus si pohrát s tímhle
kód:

glClearDepth(1.0f);     //nemá tady být 0.0 ?


kód:

   glDepthFunc(GL_LEQUAL);
 


Jinak taky může být otočená projekční matice. Pokud v OpenGL použiješ projekci z DX, tak to udělá tohle, když neotočíš depth testy
viz. tady http://www.ceske-hry.cz/forum/viewtopic.php?t=3791
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Daclable



Založen: 11. 03. 2013
Příspěvky: 8

PříspěvekZaslal: 4. říjen 2013, 17:52:58    Předmět: Odpovědět s citátem

kód:
glClearDepth(1.0f);
glDepthFunc(GL_LEQUAL);

Tieto funkcie sú tam práve od toho. Niečo však nie je v poriadku, keďže to funguje rovnako s
glClearDepth(0.0f) bez glDepthFunc(GL_LEQUAL)
aj s glClearDepth(1.0f) a s glDepthFunc(GL_LEQUAL).
Príslušný NeHe tutoriál to má vyriešené presne takto.
V českej verzii dokonca existuje príslušný obrázok na ktorom to zjavne funguje (well, možno je to len "dobre" natočené Very Happy)
Nemyslím si, že je problém s projekčnou maticou. Mám to z NeHe tutoriálov (konvertovaných, jemne poupravených - prevažne len refactoring), skôr hľadám problém v mojich úpravách. Tie však s hĺbkou nemajú nič spoločného.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Val



Založen: 18. 06. 2013
Příspěvky: 19

PříspěvekZaslal: 4. říjen 2013, 19:50:16    Předmět: Odpovědět s citátem

Tak si stahni orginalni NeHe kod. Zkus ho a pravdepodobne bude fungovat spravne. Pak porovnej svuj kod s orginalem a voila...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 5. říjen 2013, 09:24:49    Předmět: Odpovědět s citátem

Při tvoření okna nežádáš o depth buffer, takže depth test nemůže fungovat. Viz oficiální SFML/OpenGL tutorial na http://sfml-dev.org/tutorials/2.1/window-opengl.php[/list]
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Daclable



Založen: 11. 03. 2013
Příspěvky: 8

PříspěvekZaslal: 5. říjen 2013, 09:53:15    Předmět: Odpovědět s citátem

if.then - Love ya!
Čudné je, že chlapíkovi, prekladajúcemu Nehe do SFML, kompletne ContextSettings chýba, zrejme v SFML 1.6 sa to riešilo inak.
Ešte raz Love ya!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna