#include "openglwidget.h"
OpenglWidget::OpenglWidget(QWidget *parent)
:QGLWidget(parent)
{
initWidget();
initializeGL();
}
void OpenglWidget::initializeGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glBlendFunc( GL_SRC_ALPHA, GL_ONE );
glEnable( GL_BLEND );
}
void OpenglWidget::initWidget()
{
setGeometry( 400, 200, 640, 480 );
setWindowTitle(tr("opengl demo"));
}
void OpenglWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef( 0, 0.0, -6.0 );
glRotatef( 45, 1.0, 1.0, 1.0 );
draw3DCorDSystem();
// drawCubeObj();
}
void OpenglWidget::resizeGL(int width, int height)
{
if(0 == height)
{
height = 1;
}
glViewport(0, 0, (GLint)width, (GLint)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
GLdouble aspectRatio = (GLfloat)width/(GLfloat)height;
GLdouble zNear = 0.1;
GLdouble zFar = 100.0;
GLdouble rFov = 45.0 * 3.14159265 / 180.0;
glFrustum( -zNear * tan( rFov / 2.0 ) * aspectRatio,
zNear * tan( rFov / 2.0 ) * aspectRatio,
-zNear * tan( rFov / 2.0 ),
zNear * tan( rFov / 2.0 ),
zNear, zFar );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void OpenglWidget::draw3DCorDSystem()
{
//void glutWireCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks);
//radius 圆锥体基底的半径,height 圆锥体的高度,stacks条纬线,slice条经线
//x轴
glBegin(GL_LINES);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(1.0, 0.0f, 0.0f);
glEnd();
glPushMatrix();
glTranslatef(1.0, 0.0f, 0.0f);
glRotatef(90.0f,0.0f,1.0f,0.0f);
glutWireCone(0.027,0.09,10,10);
glPopMatrix();
//y轴
glBegin(GL_LINES);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0, 1.0f, 0.0f);
glEnd();
glPushMatrix();
glTranslatef(0.0, 1.0f, 0.0f);
glRotatef(270.0f,1.0f,0.0f,0.0f);
glutWireCone(0.027,0.09,10,10);
glPopMatrix();
//z轴
glBegin(GL_LINES);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0, 0.0f, 1.0f);
glEnd();
glPushMatrix();
glTranslatef(0.0, 0.0f, 1.0f);
glRotatef(90.0f,0.0f,0.0f,1.0f);
glutWireCone(0.027,0.09,10,10);
glPopMatrix();
}
void OpenglWidget::drawCubeObj()
{
glBegin( GL_QUADS );
glColor4f(1, 0, 0,0.4);
glVertex3f(-1,1,1);
glVertex3f(-1,1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,-1,1);
glColor4f(0, 0, 1,1);
glVertex3f(-1,1,-1);
glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);
glColor4f(0, 1, 0,0.6);
glVertex3f(1,1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
glColor4f(0, 0, 1,0.3);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glColor4f(0, 1, 0,0.2);
glVertex3f(-1,1,1);
glVertex3f(1,1,1);
glVertex3f(1,1,-1);
glVertex3f(-1,1,-1);
glColor4f(0, 0, 1,0.8);
glVertex3f(-1,-1,1);
glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,-1,1);
glEnd();
}
void OpenglWidget::drawTriangularObj()
{
glBegin( GL_TRIANGLES );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( -1.0, -1.0, -1.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( -1.0, -1.0, 1.0 );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( -1.0, -1.0, 1.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 1.0, -1.0, 1.0 );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( 1.0, -1.0, -1.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( -1.0, -1.0, -1.0 );
glEnd();
}
ubuntu下 qt5.5 利用opengl画3d坐标系
3星 · 超过75%的资源 需积分: 50 40 浏览量
2017-11-15
21:05:17
上传
评论 4
收藏 3KB GZ 举报
travel0er
- 粉丝: 19
- 资源: 9