openGL 画简单的图形,不用知道太多为什么,先实践,后面慢慢远离,
windows下openGL的配置参考
http://blog.csdn.net/qq_26437925/article/details/51755173
openGL讲解文章推荐
http://www.twinklingstar.cn/2015/1532/introduce-to-opengl/
/*
标准坐标系
以屏幕中心为原点(0, 0, 0)。
你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。
长度单位这样来定: 窗口范围按此单位恰好是(-1,-1)到(1,1)。
*/
#include
#include
#include
void myDisplay(void)
{
// 用当前清除色清除颜色缓冲区,即设定窗口的背景色
glClear(GL_COLOR_BUFFER_BIT);
//设置当前绘图使用的RGB颜色
glColor3f(1.0f, 0.0f, 0.0f);
// 矩形
glRectf(-1.0f, 1.0f, -0.8f, 0.8f);
glRectf(-0.1f, 0.1f, -0.3f, 0.3f);
// 点
glColor3f(0.0f, 1.0f, 0.0f);
glPointSize(2.0f);
glBegin(GL_POINTS);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.0f);
glEnd();
// 直线
glColor3f(0.0f, 0.0f, 1.0f);
float point1[] = { -0.5f, -0.5f };
float point2[] = { 0.5f, 0.5f };
glBegin(GL_LINES);
glVertex2fv(point1);
glVertex2fv(point2);
glEnd();
// 刷新OpenGL命令队列
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
//设置窗口左上角的位置
//glutInitWindowPosition(100, 100);
//设置窗口的宽高
glutInitWindowSize(400, 500);
glutCreateWindow("第一个OpenGL程序");
// 设置窗口为白色
//glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glutDisplayFunc(&myDisplay);
glutMainLoop(); // glut事件处理循环
return 0;
}
/*
glOrtho2D函数是OpenGL中的二维裁剪函数
gluOrtho2D函数等于是定义了比例尺,确定了多少个像素表示坐标系中的单位一。
坐标系改变了,此时
坐标原点为左下角
宽,高是自己定义的大小
当画图时,坐标位置超出了范围就看不到了
*/
#include
#include
#include
#include
const int Width = 400;
const int Height = 400;
const GLfloat Pi = 3.1415926536f;
void myDisplay(void)
{
// 用当前清除色清除颜色缓冲区,即设定窗口的背景色
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
// // 画出封闭的折线 p1->p2->p3->p4-p5->p1
int p1[] = { 110, 50 };
int p2[] = { 20, 0 };
int p3[] = { 55, 80 };
int p4[] = { 90, 0 };
int p5[] = { 0, 50 };
glBegin(GL_LINE_LOOP);
glVertex2iv(p1);
glVertex2iv(p2);
glVertex2iv(p3);
glVertex2iv(p4);
glVertex2iv(p5);
glEnd();
// 绘制多边形,n足够大就会变成圆形
int cx = Width / 2; //中心点
int cy = Height / 2;
int R = 100; // 半径长
int n = 6;
int i;
glBegin(GL_POLYGON);
for (i = 0; icos(2 * Pi / n*i), cy + R*sin(2 * Pi / n*i));
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
//设置窗口左上角的位置
//glutInitWindowPosition(100, 100);
//设置窗口的宽高
glutInitWindowSize(Width, Height);
glutCreateWindow("第一个OpenGL程序");
// 重定义下像素比例
gluOrtho2D(0.0, Width, 0.0, Height);
glutDisplayFunc(&myDisplay);
glutMainLoop(); // glut事件处理循环
return 0;
}
通过一些数学函数等,可以画出任意的曲线
const GLfloat PI = 3.1415926536f;
void myDisplay(void)
{
// 用当前清除色清除颜色缓冲区,即设定窗口的背景色
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
float pointx1[] = {-1.0f,0};
float pointx2[] = { 1.0f, 0 };
float pointy1[] = { 0, 1.0f };
float pointy2[] = { 0, -1.0f};
glBegin(GL_LINES); // 画直线
glVertex2fv(pointx1);
glVertex2fv(pointx2);
glVertex2fv(pointy1);
glVertex2fv(pointy2);
glEnd();
glColor3f(0.0f, 1.0f, 0.0f);
float x;
float deltax = 0.05f; // 横坐标间隔
glBegin(GL_LINE_STRIP); // 不闭合折线
for (x = -1.0f; x <= 1.0f; x += deltax) // 画出正弦曲线
glVertex2f(x,sin(x*3*PI));
glEnd();
glFlush();
}