[C/openGL]lijn wordt niet getekend??

Pagina: 1
Acties:

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 22-08 19:17
Hey,

Ik ben bezig met het leren van openGL, en wat ik nu gedaan heb ik een functie maken die een rechthoek tekend. die ziet er zo uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*-----------------------------
     Drawing a cube
  A-------------------B
  |                   |
  |                   |
  |                   |
  |                   |
  |                   |
  |                   | 
  |                   |
  C-------------------D
             
    A = x1, y1;
    D = x2, y2;
               
    C = x1, y2;
    B = x2, y1; */
              

void draw_cube(float x1, float y1, float x2, float y2)
{
  
  glClear (GL_COLOR_BUFFER_BIT);
  glColor3f (1.0, 1.0, 1.0);

  glVertex2f  (x1, y1);     *
  glVertex2f  (x2, y1);       * 
                      
  glVertex2f  (x2, y1);       
  glVertex2f  (x2, y2);      
                     
  glVertex2f  (x2, y2);       
  glVertex2f  (x1, y2);      
              
  glVertex2f  (x1, y2);       
  glVertex2f  (x1, y1);       
              
  return;
}

Je geeft dus A en D op, en de rest is een combinatie daarvan. Dit werkt opzich goed, met 1 fout: AB wordt niet getekend :? (de regels met een *) als ik glVertex2f (x2, y1); verander in glVertex2f (x2, 1); werkt het echter WEL :?

Ik heb me rot lopen zoeken, maar ik heb geen duidelijke oplossing gevonden. de andere 3 lijnen worden immers WEL getekend.

Heeft iemand ervaring met dit soort problemen of wil iemand een schop in de goed richting geven?

  • Wirf
  • Registratie: April 2000
  • Laatst online: 27-08 16:03
Ik paste wel ff een klein voorbeeld programmatje wat ik ooit heb gemaakt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <GL/glut.h>

// een schaal zodat het figuur snel groter en kleiner te maken is
const float schaal = 25;

// twee offsets om het figuur snel te verplaatsen
const float offsetX = 0.2;
const float offsetY = 0.5;

// een kleine funtie om een lijn te tekenen
void line(float x1, float y1, float x2, float y2) {
        glBegin(GL_LINES);
                glVertex2f(x1 / schaal + offsetX, y1 / schaal + offsetY);
                glVertex2f(x2 / schaal + offsetX, y2 / schaal + offsetY);
        glEnd();
}

void display() {

        glClear(GL_COLOR_BUFFER_BIT);

        //Vanaf hier beginnen de lijnen voor het huis
        line(0, 0, 4, 0);
        //Veel geknipt hier :)
        line(6, -2, 0, -2);
        line(6, -2, 4, 0);

        // Schrijf alles naar het beeldscherm
        glFlush();
}

void main(int argc, char** argv){
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
        glutInitWindowSize(1024, 786); //Een redelijk groot venstertje

        glutCreateWindow("Huis plattegrond");
        glutDisplayFunc(display);
        glutMainLoop();

}


aan de hand hiervan kun je vast wel wat vinden :)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 22-08 19:17
Ik heb zitten kloten maar ik snap het nog niet echt. Waarom werkt het niet als ik:
DrawLine (x1, y1, x2, y1) doe, en WEL als ik DrawLine (x1, y1, x2, 1) doe ?? (heb ook maar een lijntekenfunctie gemaakt :)

Verwijderd

No offence, maar wat voor dingen teken je? lines, polys? Zomaar wat glVertex calls tekent op zich niets, want je hebt je glBegin() call er niet bijvermeld. Dit is wel essentieel. Ik ga er verder vanuit dat je camera verder goed staat en je een orthogonal projection ingesteld hebt, maar ook daar geen info over. Wellicht wat meer info posten?

/me , coder DemoGL http://www.demogl.com , OpenGL effect execution system

  • Thijsch
  • Registratie: Februari 2002
  • Laatst online: 22-08 19:17
Otis, sorry.

glBegin(GL_LINES);

gebruik ik. dat camera punt is vast goed. ik ben mar 2d bezig en verder niets moelijks.

Oja: Ik heb het nu opgelost. ik heb ipv y1, y1+1 gedaan en het werkt. Ik snap alleen niet waarom dat werkt en dat andere niet?

Verwijderd

GL_LINES verwacht telkens pairs van vertices die samen 1 lijn vormen. Je kunt beter GL_LINE_STRIP gebruiken en dan telkens de nieuwe vertex aangeven, opengl tekent dan de lijn vanaf de vorige vertex. Je kunt ook GL_LINE_LOOP gebruiken voor een complete loop tussen een begin en een eindpunt, wat jij dus wilt. zie docs omtrent glBegin(), als je MSDN hebt, kijk daar ff in (zit bij VC++), de msdn bevat een goede glBegin reference manual.

voor the red book: (OpenGL bijbel)
http://fly.srk.fer.hr/~unreal/theredbook/

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

ParaDot schreef op 30 november 2002 @ 12:55:
Ik heb zitten kloten maar ik snap het nog niet echt. Waarom werkt het niet als ik:
DrawLine (x1, y1, x2, y1) doe, en WEL als ik DrawLine (x1, y1, x2, 1) doe ?? (heb ook maar een lijntekenfunctie gemaakt :)


hoe staat het vierkant op je scherm? Is er niet een mogelijkheid dat de bovenste/onderste lijn toevallig buiten de viewport valt?

Ik zeg bovenste/onderste omdat ik niet weet hoe je projection matrix is opgebouwd. Let er op dat standaard de positieve y-richting naar boven wijst. Als y1 dus kleiner is dan y2 dan is de lijn (x1,y1) - (x2,y1) dus de lijn CD in je tekeningetje in je eerste post, en niet AB

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1