Recreated most of basic gl functions and perspective
This commit is contained in:
parent
89fb2f7ef3
commit
d3adb5c325
2 changed files with 36 additions and 1 deletions
|
@ -1,13 +1,45 @@
|
||||||
#include "opglwidget.h"
|
#include "opglwidget.h"
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
|
#include <GL/glu.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
void OPGLWidget::initializeGL() {
|
void OPGLWidget::initializeGL() {
|
||||||
|
glClearDepth(1.0f);
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
glEnable(GL_LIGHT0);
|
||||||
|
GLfloat light_array[] = {0.4, 0.4, 0.4, 0.4};
|
||||||
|
GLfloat light_position[] = {10.0, 20.0, 10.0, 1.0};
|
||||||
|
glLightfv(GL_LIGHT0, GL_AMBIENT, light_array);
|
||||||
|
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_array);
|
||||||
|
glLightfv(GL_LIGHT0, GL_SPECULAR, light_array);
|
||||||
|
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPGLWidget::paintGL() {
|
void OPGLWidget::paintGL() {
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
glLoadIdentity();
|
||||||
|
reorient();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OPGLWidget::reorient() {
|
||||||
|
float F_mag = pow(loc[0], 2) + pow(loc[1], 2) +pow(loc[2], 2);
|
||||||
|
GLfloat f[] = {-loc[0]/F_mag, -loc[1] / F_mag, -loc[2] / F_mag};
|
||||||
|
|
||||||
|
GLfloat s[] = {-f[2], 0, f[0]};
|
||||||
|
float s_mag = pow(s[0], 2) + pow(s[1], 2) + pow(s[2], 2);
|
||||||
|
|
||||||
|
GLfloat u[] = {(s[1] * f[2] - s[2] * f[1]) / s_mag, (s[0] * f[2] - s[2] * f[0]) / s_mag, (s[0] * f[1] - s[1] * f[0]) / s_mag};
|
||||||
|
|
||||||
|
const GLfloat m[] = {s[0], u[0], -f[0], 0, s[1], u[1], -f[1], 0, s[2], u[2], -f[2], 0, 0, 0, 0, 1};
|
||||||
|
glMultMatrixf(m);
|
||||||
|
glTranslatef(-loc[0], -loc[1], -loc[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OPGLWidget::resizeGL(int w, int h) {
|
void OPGLWidget::resizeGL(int w, int h) {
|
||||||
|
|
|
@ -8,4 +8,7 @@ protected:
|
||||||
void paintGL();
|
void paintGL();
|
||||||
void initializeGL();
|
void initializeGL();
|
||||||
void resizeGL(int w, int h);
|
void resizeGL(int w, int h);
|
||||||
|
void reorient();
|
||||||
|
|
||||||
|
float loc[3] = {-10, 0, -10};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue