Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



wireframe

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: wireframe

Autor: JSH

18:50:19 24.09.2011

Nejsem si jistý, co chceš přesně udělat. Chceš vykreslit otexturovaný model a hrany obtáhnout čarami? Jestli jo, tak napřed vykresli otexturovaný model a pak ty hrany.

Citovat příspěvek

 

Re: wireframe

Autor: timwood

22:34:55 23.09.2011

vrela vdaka. funguje to :). Skusal som ten model aj otexturovat, funguje to tiez. Ale zislo by sa, keby tieto dve funkcie fungovali sucasne - teda [bold]wireframe + textura[/bold].

Napisal som to nasledujucim sposobom, ale nerobi to to co by malo, teda hrany objektu su otexturovane, ale nie samotny model. Osobitne to ide, spolu nie.

V [bold]Display()[/bold] mam toto:
[code]
glDepthFunc(GL_LEQUAL);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);


model();


glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

model();


glEnable(GL_TEXTURE_2D);
model();
[/code]


[bold]Model()[/bold] obsahuje toto:
[code]
glBindTexture(GL_TEXTURE_2D, texture[0]);

int res = 5;
float d = 2*PI/res;
float a = 0;

glBegin(GL_TRIANGLE_FAN);

for(int i = 0; i < res; i++)
{
glTexCoord2f(2*cos(a), 2*sin(a));
glVertex3f(2*cos(a), 2*sin(a), 0);
a += d;
}

glEnd();

a = 0;
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(0, 0);
glVertex3f(0,0,3);

for(int i = 0; i < res; i++)
{
glTexCoord2f(2*cos(a), 2*sin(a));
glVertex3f(2*cos(a), 2*sin(a), 0);
a += d;
}
glEnd();
[/code]

Citovat příspěvek

 

Re: wireframe

Autor: JSH

11:32:25 21.09.2011

1) Aby světlo fungovalo, jsou normálové vektory nutné. U objektů z GLUTu jsou zadané. U vlastních objektů se musí pomocí glNormal zadat. Ne, OpenGL je samo spočítat neumí. Můžeš si je ručně spočítat pomocí vektorového součinu hran trojúhelníků, jen pozor na orientaci.

2) Jestli jsem dotaz pochopil správně, tak by to mohlo jít zhruba takhle :
[code]
//Vykreslíme jen do z-bufferu
glDepthFunc(GL_LEQUAL);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
kresliModel();
//Vykreslíme hrany jen tam, kde by byly vidět
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
kresliModel();
[/code]
Nastavení z-testu na <= je důležité. Překresluje se stejná hloubka v z-bufferu.

Citovat příspěvek

 

wireframe

Autor: timwood

22:27:39 20.09.2011

zdravim


Mal by som 2 take problemy:

1.
Skusam osvetlenie a texturovanie. Funguje mi to. Ale problem je ten, ze zle:). Zadam si v programe zakladne osvetlenie (light0..nastavim diffuse, specular,...). Pomocou toho svetla osvetlujem 3D objekty, ale len tie z kniznice GLUT (glutSphere,...). Tie mi celkom pekne osvetluje, tienuje...ok.

Ale akonahle urobim "cez vertexy" - glVertex3f() - rucne nejaky objekt, napr. som spravil 5-boky ihlan, tak tie plochy su zliate v kope, nevidno tam len jednu farbu (bez textury to mam). Docital som sa, ze treba pocitat normalove vektory(definovat indices..). [bold]Otazka: Daju sa tie plochy zviditelnit nejak automaticky ? Aby som to nemusel robit rucne ?[/bold]


2.
Mam vytvoreny ten 5-boky ihlan. Nechal som si ho vykreslit ako Wireframe, cez:

[code]
glPolygonMode( GL_FRONT, GL_LINE );
[/code]

Ide to, ale vykresluje to vsetky hrany, aj tie ktore by z pohladu nemalo byt vidno. Teda ako docielit, aby nevykreslovalo zadne polygony ? Zase treba definovat kazdu plochu ? Skusal som rozne kombinacie aj s glCullFace()..ale nic.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: