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:



include - reshape

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: include - reshape

Autor: nou

16:44:32 29.11.2011

globalne premenne su zlo. maju sa pouzivat len vinimocne. ano maly by byt ako parameter tej funkcie.

ale pre doplnenie vedomosti. na jednom z tych miest treba danu premennu deklarovat ako extern teda:

extern float xpos;

Citovat příspěvek

 

Re: include - reshape

Autor: martinTrnka

21:50:17 27.11.2011

Funguje to. No a teraz som urobil [bold]rovnakym sposobom[/bold] funkciu Camera():


[bold]camera.cpp[/bold]

[code]
#include "camera.h"

#include

void camera(void)
{
glRotatef(xrot, 1.0,0.0,0.0);
glRotatef(yrot, 0.0,1.0,0.0);
glTranslated(-xpos, -ypos, -zpos);
}
[/code]


Ibaze premenne xrot, yrot, xpos, ypos, zpos, mam v subore main.cpp deklarovane ako [bold]globalne[/bold], pretoze ta Camera() bola povodne tam. Ak ich zadeklarujem v camera.cpp, tak ich nebudem mat v main.cpp, ibaze ja ich tam potrebujem mat, lebo s nimi dalej robim. Ak ich zadeklarujem v main.cpp ...tak mi napise, ze su na dvoch miestach deklarovane.....tak potom ako to mam napisat ?

Ani ked ich dam do camera.h tak to nejde. Teda ako sa pracuje s globalnymi premennymi ? ..ktore musia byt spolocne pre dva subory..

..alebo by sa to dalo urobit ako parametre funkcie Camera() ?

Citovat příspěvek

 

Re: include - reshape

Autor: michalferko

18:35:18 27.11.2011

1. Includuj resh.h, nie resh.cpp
2. Mas resh.cpp pridany (nech to robis v hocicom) medzi subory projektu/zdrojaky? Je mozne ze sa nekompiluje resh.cpp.

Nicim inym to imho byt nemoze.

Citovat příspěvek

 

include - reshape

Autor: martinTrnka

17:43:40 27.11.2011

zdravim

Samotny program je funkcny, bez chyby. Potrebujem len vybrat funkciu [bold]Reshape()[/bold] z hlavneho suboru main.cpp a ulozit ju do suboru resh.cpp, kvoli prehladnosti kodu. To potom urobim aj s ostatnymi funkciami. Ale uz tato mi nejde.


[bold]main.cpp[/bold]

[code]
#include
#include
#include
#include
#include

[bold]#include "resh.cpp"[/bold] //nacitanie Reshape funkcie



#ifndef CALLBACK
#define CALLBACK
#endif

GLuint startList;

void CALLBACK errorCallback(GLenum errorCode)
{
const GLubyte *estring;

estring = gluErrorString(errorCode);
fprintf(stderr, "Quadric Error: %s\n", estring);
exit(0);
}

void init(void)
{
GLUquadricObj *qobj;
GLfloat mat_ambient[] = { 0.5, 0.5, 0.5, 1.0 };
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat mat_shininess[] = { 50.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
GLfloat model_ambient[] = { 0.5, 0.5, 0.5, 1.0 };

glClearColor(0.0, 0.0, 0.0, 0.0);

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, model_ambient);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);

/* Create 4 display lists, each with a different quadric object.
* Different drawing styles and surface normal specifications
* are demonstrated.
*/
startList = glGenLists(4);
qobj = gluNewQuadric();
// gluQuadricCallback(qobj, GLU_ERROR, errorCallback);

gluQuadricDrawStyle(qobj, GLU_FILL); /* smooth shaded */
gluQuadricNormals(qobj, GLU_SMOOTH);
glNewList(startList, GL_COMPILE);
gluSphere(qobj, 0.75, 15, 10);
glEndList();

gluQuadricDrawStyle(qobj, GLU_FILL); /* flat shaded */
gluQuadricNormals(qobj, GLU_FLAT);
glNewList(startList+1, GL_COMPILE);
gluCylinder(qobj, 0.5, 0.3, 1.0, 15, 5);
glEndList();

gluQuadricDrawStyle(qobj, GLU_LINE); /* all polygons wireframe */
gluQuadricNormals(qobj, GLU_NONE);
glNewList(startList+2, GL_COMPILE);
gluDisk(qobj, 0.25, 1.0, 20, 4);
glEndList();

gluQuadricDrawStyle(qobj, GLU_SILHOUETTE); /* boundary only */
gluQuadricNormals(qobj, GLU_NONE);
glNewList(startList+3, GL_COMPILE);
gluPartialDisk(qobj, 0.0, 1.0, 20, 4, 0.0, 225.0);
glEndList();
}

void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();

glEnable(GL_LIGHTING);
glShadeModel (GL_SMOOTH);
glTranslatef(-1.0, -1.0, 0.0);
glCallList(startList);

glShadeModel (GL_FLAT);
glTranslatef(0.0, 2.0, 0.0);
glPushMatrix();
glRotatef(300.0, 1.0, 0.0, 0.0);
glCallList(startList+1);
glPopMatrix();

glDisable(GL_LIGHTING);
glColor3f(0.0, 1.0, 1.0);
glTranslatef(2.0, -2.0, 0.0);
glCallList(startList+2);

glColor3f(1.0, 1.0, 0.0);
glTranslatef(0.0, 2.0, 0.0);
glCallList(startList+3);

glPopMatrix();

glFlush();
}


void snapshot(int windowWidth, int windowHeight, char* filename)
{

byte* bmpBuffer = (byte*)malloc(windowWidth*windowHeight*3);
if (!bmpBuffer)
return;

glReadPixels((GLint)0, (GLint)0,
(GLint)windowWidth-1, (GLint)windowHeight-1,
GL_RGB, GL_UNSIGNED_BYTE, bmpBuffer);

FILE *filePtr = fopen(filename, "wb");
if (!filePtr)
return;

BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER bitmapInfoHeader;

bitmapFileHeader.bfType = 0x4D42; //"BM"
bitmapFileHeader.bfSize = windowWidth*windowHeight*3;
bitmapFileHeader.bfReserved1 = 0;
bitmapFileHeader.bfReserved2 = 0;
bitmapFileHeader.bfOffBits =
sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);

bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmapInfoHeader.biWidth = windowWidth-1;
bitmapInfoHeader.biHeight = windowHeight-1;
bitmapInfoHeader.biPlanes = 1;
bitmapInfoHeader.biBitCount = 24;
bitmapInfoHeader.biCompression = BI_RGB;
bitmapInfoHeader.biSizeImage = 0;
bitmapInfoHeader.biXPelsPerMeter = 0; // ?
bitmapInfoHeader.biYPelsPerMeter = 0; // ?
bitmapInfoHeader.biClrUsed = 0;
bitmapInfoHeader.biClrImportant = 0;

fwrite(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr);
fwrite(&bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr);
fwrite(bmpBuffer, windowWidth*windowHeight*3, 1, filePtr);
fclose(filePtr);

free(bmpBuffer);
}


void keyboard(unsigned char key, int x, int y)
{
switch (key)
{
case 27:
exit(0);
break;
case 'a':
snapshot(500,500,"aaa.bmp");
break;
}
}


int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}

[/code]



[bold]resh.cpp[/bold]

[code]
#include "resh.h"
#include

void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w,
2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
else
glOrtho(-2.5*(GLfloat)w/(GLfloat)h,
2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
[/code]


[bold]resh.h[/bold]

[code]
void reshape (int w, int h);
[/code]



[bold]Pri kompilacii main.cpp mi vypisuje nieco v zmysle, "redefined..unresolve.."...[/bold]

Citovat příspěvek

 

 

 

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

Uživatelské jméno:

Heslo: