Da nemesis
Legacy Member
Hey,
Kben sinds een paar dagen met openGL bezig en zit al met een probleempje.
Ik probeer meerdere objecten op het scherm te tonen en daar bewerkingen op te doen (rotate), echter gaat dit supertraag.
Het zijn maar 3 objecten: 2 getexturede kubussen en 1 textured vlak (de grond).
1 van deze kubussen wil ik laten ronddraaien door op z te drukken, dit lukt ook maar gaat supertraag (lage framerate denk ik).
Ik maak al gebruik van displaylists om het opbouwen te versnellen, indien ik dit niet doe, dan roteert die kubus tegen 1 frame per 5 seconden ofzo.
Weet iemand hoe ik dit kan oplossen?
dit zijn de functies die tekenen: (sorry voor de rommeligheid
)
Weet iemand hier een oplossing voor?
Kben sinds een paar dagen met openGL bezig en zit al met een probleempje.
Ik probeer meerdere objecten op het scherm te tonen en daar bewerkingen op te doen (rotate), echter gaat dit supertraag.
Het zijn maar 3 objecten: 2 getexturede kubussen en 1 textured vlak (de grond).
1 van deze kubussen wil ik laten ronddraaien door op z te drukken, dit lukt ook maar gaat supertraag (lage framerate denk ik).
Ik maak al gebruik van displaylists om het opbouwen te versnellen, indien ik dit niet doe, dan roteert die kubus tegen 1 frame per 5 seconden ofzo.
Weet iemand hoe ik dit kan oplossen?

dit zijn de functies die tekenen: (sorry voor de rommeligheid
)
Code:
void initRendering(){
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
_displayListId = glGenLists(3); //Make room for the display list
glNewList(_displayListId, GL_COMPILE); //Begin the display list
drawCube(0,0,0,1, "texture.bmp");
glEndList(); //End the display list
glNewList(_displayListId+1, GL_COMPILE); //Begin the display list
drawCube(2,0,0,1, "baan.bmp");
glEndList(); //End the display list
glNewList(_displayListId+2, GL_COMPILE); //Begin the display list
drawGround(-3,0,-3, 7, "baan.bmp");
glEndList(); //End the display list
}
Code:
void drawCube(float x, float y, float z, float size, char *texture)
{
Image* image = loadBMP(texture);
_textureId = loadTexture(image);
delete image;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBegin(GL_QUADS);
//front
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y, z);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x+size, y, z);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x+size, y+size, z);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y+size, z);
//back
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y, z+size);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x+size, y, z+size);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x+size, y+size, z+size);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y+size, z+size);
//left
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y, z);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x, y+size, z);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x, y+size, z+size);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y, z+size);
//right
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x+size, y, z);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x+size, y+size, z);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x+size, y+size, z+size);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x+size, y, z+size);
//bottom
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y, z);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x+size, y, z);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x+size, y, z+size);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y, z+size);
//top
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y+size, z);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x+size, y+size, z);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x+size, y+size, z+size);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y+size, z+size);
glEnd();
}
Code:
void drawGround(float x, float y, float z, float size, char* texture)
{
Image* image = loadBMP(texture);
_textureId = loadTexture(image);
delete image;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBegin(GL_QUADS);
//bottom
glTexCoord2f(0.0f, 0.0f);
glVertex3f(x, y, z);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(x+size, y, z);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(x+size, y, z+size);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(x, y, z+size);
glEnd();
}
Code:
void drawScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
glLoadIdentity(); //Reset the drawing perspective
glRotatef(10, 1.0f, 0.0f, 0.0f);
glTranslatef(-0.5f,-2.0f,-6.0f); // Move Left 1.5 Units And Into The Screen 6.0
glPushMatrix();
//glColor3f(0.5f, 0.2f, 0.2f);
//glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
//drawCube(0,0,0,1, "texture.bmp");
glCallList(_displayListId);
glRotatef(-_angle, 0.0f, 1.0f, 0.0f); //Rotate about the z-axis
glCallList(_displayListId+1);
glPopMatrix();
glCallList(_displayListId+2);
glTranslatef(3.0f,0.0f,0.0f);
//glPopMatrix();
glutSwapBuffers(); //Send the 3D scene to the screen
}
Weet iemand hier een oplossing voor?