webForumDet fria alternativet

OpenGL problem!

7 svar · 272 visningar · startad av puhbjörn

puhbjörnMedlem sedan juni 2001255 inlägg
#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

Alpha IIMedlem sedan maj 20002 579 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!

puhbjörnMedlem sedan juni 2001255 inlägg
#3

När jag gjort så ser jag ingenting.

Alpha IIMedlem sedan maj 20002 579 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?

Alpha IIMedlem sedan maj 20002 579 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();
}
PhorpherMedlem sedan feb. 20002 059 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å.

puhbjörnMedlem sedan juni 2001255 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.

Alpha IIMedlem sedan maj 20002 579 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();
128 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
124 ms — hämta tråd, inlägg och bilagor (db)