webForumDet fria alternativet

OpenGL problem!

C/C++

7 svar · 272 visningar · startad av puhbjörn

Medlem sedan juni 2001370 inlägg
Frågan#1

Jag håller på med lite Open GL programmering i C++ och har råkat ut för ett problem när jag ska göra en roterande 3d pyramid. Problemet är att när jag kompilerat programmet och ska kolla hur det ser ut så blir det ingen pyramid. Så här ser koden ut:

glBegin(GL_TRIANGLES); // Start Drawing The Pyramid

glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Front)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f(-1.0f,-1.0f, 1.0f); // Left Of Triangle (Front)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f( 1.0f,-1.0f, 1.0f); // Right Of Triangle (Front)

glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Right)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f( 1.0f,-1.0f, 1.0f); // Left Of Triangle (Right)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); // Right Of Triangle (Right)

glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Back)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f( 1.0f,-1.0f, -1.0f); // Left Of Triangle (Back)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f, -1.0f); // Right Of Triangle (Back)

glColor3f(1.0f,0.0f,0.0f); // Red
glVertex3f( 0.0f, 1.0f, 0.0f); // Top Of Triangle (Left)
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f,-1.0f,-1.0f); // Left Of Triangle (Left)
glColor3f(0.0f,1.0f,0.0f); // Green
glVertex3f(-1.0f,-1.0f, 1.0f); // Right Of Triangle (Left)
glEnd();

Någon som vet vad som är fel ?

Här finns programmet: http://www.websamba.com/plutt/files/spel.exe

Medlem sedan maj 20002 993 inlägg
#2

Vart ritar du den?

testa med
glTranslatef(0.0f, 0.0f, -10.0f);
innan glBegin() så att du inte ritar den bakom "ögats" position!

Medlem sedan juni 2001370 inlägg
#3

När jag gjort så ser jag ingenting.

Medlem sedan maj 20002 993 inlägg
#4

Kan du visa all kod? Det kan ju vara så att det är fel någon annastans! Eller är det nehe koden?

Medlem sedan maj 20002 993 inlägg
#5

Funkar det om du bara ritar en quad?
testa med den här koden i rita funktionen, fugerar inte det är det någonting som är fel med den övriga koden!

void DrawScene()
{
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  glTranslatef(0.0f, 0.0f, -10.0f);

  glColor3f(1.0f, 0.0f, 0.0f);
  glBegin(GL_QUADS);
    glVertex3f( 2.0f, -2.0f, 0.0f);
    glVertex3f(-2.0f, -2.0f, 0.0f);
    glVertex3f(-2.0f,  2.0f, 0.0f);
    glVertex3f( 2.0f,  2.0f, 0.0f);
  glEnd();
}
Medlem sedan feb. 20002 300 inlägg
#6

Kör en glFlush(); efter glEnd(); också, så tvingar du openGL att rita ut. Så det inte ligger kvar i någon buffer alltså.

Medlem sedan juni 2001370 inlägg
#7

Alpha II det blir en fin röd quad som täcker hela ytan om jag använder din kod och tar bort glTranslatef(0.0f, 0.0f, -10.0f);.
Pyramid koden kommer från nehe men resten kommer från någon annan tutorial på gamedev.

Och sen så är ju inte problemet att det inte syns någonting utan att pyramiden inte får någon botten och att den verkar ha fyra sidor.

Medlem sedan maj 20002 993 inlägg
#8

jaha!
men det beror på att du ritar en pryramid utan botton, eftersom i nehes tutorial syns aldrig botten och den behövs aldrig ritas, det står på sidan!

lägg till för bottnen:

glBegin(GL_QUADS);
glVertex3f( 1.0f, -1.0f, -1.0f );
glVertex3f(-1.0f, -1.0f, -1.0f );
glVertex3f(-1.0f, -1.0f,  1.0f );
glVertex3f( 1.0f, -1.0f,  1.0f );
glEnd();
259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)