Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]novizio opengl e griglie

    ciao.
    Sto scancherando con opengl e non ho capito come questo codice possa creare una griglia di punti.
    glPointSize(4.0);
    glBegin(GL_POINTS);
    for (int x = 0; x < 4; x++)
    for (int z = 0; z < 4; z++)
    glVertex3f(x, 0, z);
    glEnd();

    perchè incrementa la coordinata z e non la y?non è la profondità la z?

    ho lo stesso problema con questa griglia di triangoli:

    glBegin(GL_TRIANGLES);
    for (int x = 0; x < 3; x++)
    {
    for (int z = 0; z < 3; z++)
    {
    glVertex3f(x, 0.0, z);
    glVertex3f((x+1.0), 0.0, z);
    glVertex3f(x, 0.0, (z+1.0));
    }
    }
    glEnd();

    in piu' qui non capisco l'x+1 e lo z+1.
    Ho un po di problemi a figurarmi in testa il 3d per questo chiedo a voi .
    Intanto grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    up

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Provo a spiegare io anche se non garantisco...
    per fare una griglia (da come leggo bidimensionale) la z giustamente non va incrementata.
    Essendo la griglia una serie di rette parallele (per asse x e y) devi disegnare una serie di rette che si differenziano di poco.
    Dato quindi x il primo valore, lo incrementi di 1 per spostarti un pò sulla destra e disegnare la seconda retta.
    Puoi anche diminuire l' "offset". Stessa cosa per la y
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    scusa xwolverinex ma non hio capito latua risposta,
    la z giustamente non va incrementata
    il fatto è che quel codice disegna effettivamente una griglia icrementando la z e non riesco a capire come.
    l'ho trovata su Beginning OpenGL Game Programming.
    ti allego l'immagine
    Immagini allegate Immagini allegate

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    up

  6. #6
    Posta il codice sorgente completo del progetto.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Potrebbe essere spiegato ammettendo che il programma faccia delle rotazioni tali che gli assi possiamo dire che si "scambino" dando l'effetto nella proiezione 2D
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    posto il codice:
    #ifdef _WINDOWS
    #include <windows.h>
    #endif

    #include <gl/gl.h>
    #include <gl/glu.h>
    #include <math.h>
    #include "CGfxOpenGL.h"

    // disable implicit float-double casting
    #pragma warning(disable:4305)

    CGfxOpenGL::CGfxOpenGL()
    {
    }

    CGfxOpenGL::~CGfxOpenGL()
    {
    }

    bool CGfxOpenGL::Init()
    {
    glClearColor(0.0, 0.0, 0.0, 0.0);

    return true;
    }

    bool CGfxOpenGL::Shutdown()
    {
    return true;
    }

    void CGfxOpenGL::SetupProjection(int width, int height)
    {
    if (height == 0) // don't want a divide by zero
    {
    height = 1;
    }

    glViewport(0, 0, width, height); // reset the viewport to new dimensions
    glMatrixMode(GL_PROJECTION); // set projection matrix current matrix
    glLoadIdentity(); // reset projection matrix

    // calculate aspect ratio of window
    gluPerspective(52.0f,(GLfloat)width/(GLfloat)height,1.0f,1000.0f);

    glMatrixMode(GL_MODELVIEW); // set modelview matrix
    glLoadIdentity(); // reset modelview matrix

    m_windowWidth = width;
    m_windowHeight = height;
    }

    void CGfxOpenGL::Prepare(float dt)
    {
    }

    void CGfxOpenGL::Render()
    {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear screen and depth buffer
    glLoadIdentity();
    gluLookAt(0.0, 10.0, 0.1, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

    // top left
    glPushMatrix();
    glTranslatef(-6.0f, 0.0f, -4.0f);
    DrawPoints();
    glPopMatrix();

    // top middle
    glPushMatrix();
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glTranslatef(-2.0f, 0.0f, -4.0f);
    DrawTriangles();
    glPopMatrix();

    // top right
    glPushMatrix();
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glTranslatef(2.0f, 0.0f, -4.0f);
    DrawQuads();
    glPopMatrix();

    // bottom left
    glPushMatrix();
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glTranslatef(-6.0f, 0.0f, 0.5f);
    DrawTriangleStrip();
    glPopMatrix();

    // bottom middle
    glPushMatrix();
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glTranslatef(-2.0f, 0.0f, 0.5f);
    DrawTriangleFan();
    glPopMatrix();

    // bottom right
    glPushMatrix();
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glTranslatef(2.0f, 0.0f, 0.5f);
    DrawQuadStrip();
    glPopMatrix();
    }

    // draw grid of points showing dataset we are working with
    void CGfxOpenGL:rawPoints()
    {
    glPointSize(4.0);
    glBegin(GL_POINTS);
    for (int x = 0; x < 4; x++)
    for (int z = 0; z < 4; z++)
    glVertex3f(x, 0, z);
    glEnd();
    }

    // draw grid as individual triangles
    void CGfxOpenGL:rawTriangles()
    {
    glBegin(GL_TRIANGLES);
    for (int x = 0; x < 3; x++)
    {
    for (int z = 0; z < 3; z++)
    {
    glVertex3f(x, 0.0, z);
    glVertex3f((x+1.0), 0.0, z);
    glVertex3f(x, 0.0, (z+1.0));
    }
    }
    glEnd();
    }

    // draw grid as triangle fan
    void CGfxOpenGL:rawTriangleFan()
    {
    glBegin(GL_TRIANGLE_FAN);

    // center vertex of fan
    glVertex3f(0.0, 0.0, 0.0);

    // bottom side
    for (int x = 4; x > 0; x--)
    glVertex3f(x-1, 0.0, 3.0);

    // right side
    for (int z = 4; z > 0; z--)
    glVertex3f(3.0, 0.0, z-1);

    glEnd();
    }

    // draw grid as triangle strips
    void CGfxOpenGL:rawTriangleStrip()
    {
    // 3 rows of triangle strips
    for (int x = 0; x < 3; x++)
    {
    glBegin(GL_TRIANGLE_STRIP);
    for (int z = 0; z < 3; z++)
    {
    glVertex3f(x, 0.0, z);
    glVertex3f((x+1.0), 0.0, z);
    glVertex3f(x, 0.0, (z+1.0));
    glVertex3f((x+1.0), 0.0, (z+1.0));
    }
    glEnd();
    }
    }

    // draw grid as individual quads
    void CGfxOpenGL:rawQuads()
    {
    glBegin(GL_QUADS);
    for (int x = 0; x < 3; x++)
    {
    for (int z = 0; z < 3; z++)
    {
    glVertex3f(x, 0.0, z);
    glVertex3f((x+1.0), 0.0, z);
    glVertex3f((x+1.0), 0.0, (z+1.0));
    glVertex3f(x, 0.0, (z+1.0));
    }
    }
    glEnd();
    }

    // draw grid as quad strips
    void CGfxOpenGL:rawQuadStrip()
    {
    for (int x = 0; x < 3; x++)
    {
    glBegin(GL_QUAD_STRIP);
    for (int z = 0; z < 4; z++)
    {
    glVertex3f(x, 0.0, z);
    glVertex3f((x+1.0), 0.0, z);
    }
    glEnd();
    }
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    scusate, precisazione:
    Nei sorgenti c'era un altra classe ma si occupava solo di gestire la creazione della finestra di opengl.
    magari stasera posto anche quella.
    ciao.

  10. #10
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Metti il codice tra i code tag
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.