Skip to main content

Thread: [OpenGL] Add perspective projection


hi,
can please add perspective projection code below?
learned how multiply matrices, vectors, dot/cross products are, etc except how setup perspective projection matrix , use - can't it.

php code:
#include <gl/glew.h>
#include <gl/freeglut.h>
#include <stdio.h>

gluint appbuf;
glint locposloccolor;
const 
glfloat data[] = {
    -
0.5f, -0.5f,
    
1.0f0.0f0.0f,
    
    
0.5f, -0.5f,
    
0.0f1.0f0.0f,
    
    
0.0f0.5f,
    
0.0f0.0f1.0f
};

gluint createshadertype(const glenum type, const glchar *src, const char *progname) {
    
gluint shader glcreateshader(type);
    if(
shader == 0) {
        return 
0;
    }
    
    
glshadersource(shader1, &srcnull);
    
glcompileshader(shader);
    
    
glint status;
    
glgetshaderiv(shadergl_compile_status, &status);
    if(
status != gl_false) {
        return 
shader;
    }
    
    
glint len;
    
glgetshaderiv(shadergl_info_log_length, &len);
    if(
len 0) {
        
char *log = new char[len];
        
glgetshaderinfolog(shaderlennulllog);
        const 
char *sztype;
        if(
type == gl_vertex_shader) {
            
sztype "vertex";
        } else if(
type == gl_fragment_shader) {
            
sztype "fragment";
        } else {
            
sztype "unknown";
        }
        
printf("error compiling %s shader of %s: %s\n"sztypeprognamelog);
        
delete[] log;
    }
    
gldeleteshader(shader);
    return 
0;
}

gluint createshader(const glchar *vertsrc, const glchar *fragsrc, const char *progname) {
    
gluint vertshader createshadertype(gl_vertex_shadervertsrcprogname);
    if(
vertshader == 0) {
        return 
0;
    }
    
    
gluint fragshader createshadertype(gl_fragment_shaderfragsrcprogname);
    if(
fragshader == 0) {
        
gldeleteshader(vertshader);
        return 
0;
    }
    
    
gluint prog glcreateprogram();
    
glattachshader(progvertshader);
    
glattachshader(progfragshader);
    
gllinkprogram(prog);
    
gldeleteshader(vertshader);
    
gldeleteshader(fragshader);
    
    
glint status;
    
glgetprogramiv(proggl_link_status, &status);
    if(
status != gl_false) {
        return 
prog;
    }
    
    
glint len;
    
glgetprogramiv(proggl_info_log_length, &len);
    if(
len 0) {
        
char *log = new char[len];
        
glgetprograminfolog(proglennulllog);
        
printf("error linking %s program: %s\n"prognamelog);
        
delete[] log;
    }
    
gldeleteprogram(prog);
    return 
0;
}

bool
appsetup
() {
    
glclearcolor(0.0f0.0f0.0f1.0f);
    
    
glgenbuffers(1, &buf);
    
glbindbuffer(gl_array_bufferbuf);
    
glbufferdata(gl_array_buffersizeof(data), datagl_static_draw);
    
glbindbuffer(gl_array_buffer0);
    
    const 
glchar *vertsrc =
    
"#version 330\n"
    "in vec2 vpos;\n"
    "in vec3 vcolor;\n"
    "out vec3 vpasscolor;\n"
    "void main() {\n"
    "    vpasscolor = vcolor;\n"
    "    gl_position = vec4(vpos, 0.0f, 1.0f);\n"
    "}\n"
;
    
    const 
glchar *fragsrc =
    
"#version 330\n"
    "in vec3 vpasscolor;\n"
    "out vec4 voutcolor;\n"
    "void main() {\n"
    "    voutcolor = vec4(vpasscolor, 1.0f);\n"
    "}\n"
;
    
    
app createshader(vertsrcfragsrc"main shader");
    if(
app == 0) {
        return 
false;
    }
    
    
locpos glgetattriblocation(app"vpos");
    
loccolor glgetattriblocation(app"vcolor");
    
    
    return 
true;
}

void
winclose
() {
    if(
app != 0) {
        
gldeleteprogram(app);
    }
}

void
windraw
() {
    
glclear(gl_color_buffer_bit);
    
    
gluseprogram(app);
    
    
glbindbuffer(gl_array_bufferbuf);
    
glenablevertexattribarray(locpos);
    
glenablevertexattribarray(loccolor);
    
    
glvertexattribpointer(locpos2gl_floatgl_falsesizeof(glfloat)*50);
    
glvertexattribpointer(loccolor3gl_floatgl_falsesizeof(glfloat)*5, (void*) (sizeof(glfloat)*2));
    
    
gldrawarrays(gl_triangles03);
    
    
gldisablevertexattribarray(locpos);
    
gldisablevertexattribarray(loccolor);
    
glbindbuffer(gl_array_buffer0);
    
    
glutswapbuffers();
}

void
winresize
(int wint h) {
    
glviewport(00wh);
}


int main(int argcchar *argv[]) {
    
    
glutinit(&argcargv);
    
glutinitdisplaymode(glut_rgba glut_double glut_depth);
    
glutinitwindowsize(800500);
    
glutcreatewindow("gl 3.3");
    
    
glutdisplayfunc(windraw);
    
glutreshapefunc(winresize);
    
glutclosefunc(winclose);
    
    
glenum status glewinit();
    if(
status != glew_ok) {
        
printf("glew init failed %s\n"glewgeterrorstring(status));
        return 
0;
    }
    
    if(!
appsetup()) {
        return 
0;
    }
    
    
glutmainloop();
    return 
0;

edit: i'll try out this , see if works.



Forum The Ubuntu Forum Community Ubuntu Specialised Support Development & Programming Programming Talk [SOLVED] [OpenGL] Add perspective projection


Ubuntu

Comments

Popular posts from this blog

Could not place because the source rectangle is empty

Thread: Using smartcard reader with vpnc

Adobe Font Folio 7.0 or just 7?