美文网首页
OpenGL实现2D正方形公转和自转

OpenGL实现2D正方形公转和自转

作者: 嬴小政今天好好吃饭了吗 | 来源:发表于2018-11-13 14:47 被阅读0次

1.实验一(改进后使用glTranslate函数)


公转截图1 公转截图2
#include "pch.h"
#include <GL/glut.h>
#include <math.h>
#define Rwidth 0.15
#define Rheight 0.15
#define n 360
#define DEG_TO_RAD 0.017453
GLfloat theta = 0.0;
GLfloat th = 0.0;
const GLfloat radius = 0.6;
const GLfloat Pi = 3.1415926536;
const GLfloat ac = 0.1;   
void init() {
    glClearColor(1.0, 1.0, 1.0, 1.0);
}
void displayFcn()
{
    glClear(GL_COLOR_BUFFER_BIT);       //clear the window

    glBegin(GL_LINE_LOOP);          //draw a circle
    for (GLint i = 0; i < n; i++) {
        glColor3f(0.0, 0.0, 0.0);
        glVertex2f(radius *cos(2 * Pi / n * i), radius * sin(2 * Pi / n * i));
    }
    glEnd();

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(-radius * cos(th * DEG_TO_RAD), - radius * sin(th * DEG_TO_RAD), 0.0);     //the rectanguler's translation
    glBegin(GL_POLYGON);                        // Rotation
    glVertex2f(-Rwidth / 2, -Rheight / 2 );
    glVertex2f(Rwidth / 2 , -Rheight / 2 );
    glVertex2f(Rwidth / 2 , Rheight / 2);
    glVertex2f(-Rwidth / 2 , Rheight / 2);
    glEnd();

    glFlush();
}
void rotate()
{
    th += 0.1;
    if (th > 360.0)
        th -= 360.0;
    glutPostRedisplay();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(800, 1000);
    glutCreateWindow("rect");
    glutDisplayFunc(displayFcn);
    init();
    glutIdleFunc(rotate);
    glutMainLoop();
    return 0;
}

2.实验二(只使用了glRotare)


截图1 截图2
#include "pch.h"
#include <GL/glut.h>
#include <math.h>
#define Rwidth 0.2
#define Rheight 0.15
#define n 360
#define DEG_TO_RAD 0.017453
GLfloat theta = 0.0;
GLfloat th = 0.0;
const GLfloat radius = 0.6;
const GLfloat Pi = 3.1415926536;
const GLfloat ac = 0.1;
void init() {
    glClearColor(1.0, 1.0, 1.0, 1.0);
}
void displayFcn()
{
    glClear(GL_COLOR_BUFFER_BIT);       //clear the window

    glBegin(GL_LINE_LOOP);          //draw a circle
    for (GLint i = 0; i < n; i++) {
        glColor3f(0.0, 0.0, 0.0);
        glVertex2f(radius *cos(2 * Pi / n * i), radius * sin(2 * Pi / n * i));
    }
    glEnd();

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(-radius * cos(th * DEG_TO_RAD), -radius * sin(th * DEG_TO_RAD), 0.0);
    glRotatef(theta *4, 0.0, 0.0, 1);    //4:1
    glBegin(GL_POLYGON);            
    glVertex2f(-Rwidth / 2, -Rheight / 2);
    glVertex2f(Rwidth / 2, -Rheight / 2);
    glVertex2f(Rwidth / 2, Rheight / 2);
    glVertex2f(-Rwidth / 2, Rheight / 2);
    glEnd();

    glFlush();
}
void rotate()
{
    theta += 0.18;
    if (theta > 360.0)
        theta -= 360.0;

    th += 0.18;
    if (th > 360.0)
        th -= 360.0;
    glutPostRedisplay();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(800, 1000);
    glutCreateWindow("rect");
    glutDisplayFunc(displayFcn);
    init();
    glutIdleFunc(rotate);
    glutMainLoop();
    return 0;
}

注:注意在实验二中,glTranslatef()和glRotatef()是理解这个实验的关键。

相关文章

  • OpenGL实现2D正方形公转和自转

    1.实验一(改进后使用glTranslate函数) 2.实验二(只使用了glRotare) 注:注意在实验二中,g...

  • OpenGL案例-公转和自转

    一、案例效果: 本地案例算是对前面所学习内容的一次总结,实现步骤如下: 绘制地板->绘制大小球-> 让大球自转,小...

  • OpenGL之 公转自转

    本篇将会介绍一个大球的自转以及一个小球围绕大球公转的demo,效果如下图: 实现过程 如上图所示,整个项目的基本流...

  • 案例09:球体世界

    OpenGL + OpenGL ES +Metal 系列文章汇总 本案例是基于案例06:大球自转+小球公转+移动的...

  • OpenGL案例 -- 球体自转和公转

    初始化 main()中注册一系列回调和初始化方法 ChangeSize()设置视图大小、投影矩阵、变换管道 绘制地...

  • OpenGL 球体公转+自转案例

    声明变量 声明一个着色器管理器实例,为模型视图矩阵和投影矩阵声明GLMatrixStack实例,使用GLFrust...

  • OpenGL-公转自转demo

    开场白 本文主要介绍用OpenGL实现的效果:大球自转,小球围绕大球公转的效果。如图: 示例代码地址本例中使用的是...

  • 7.1:OpenGL 自转公转案例

    不改面向 + 平移 = 平移 改面向 + 不平移 = 自转 改面向 + 每次相同的平移 = 公转 改面向 + 每次...

  • 7-1.OpenGL综合案例(大球自转,小球公转)

    案例的实现效果是在一个场景中绘制地板、大球、小球、公转自转和相机的移动,其中结合了OpenGL中大部分知识点,最终...

  • OpenGL综合练习:大球自转+小球公转+移动

    该案例的实现效果是在一个场景中绘制地板、大球、小球、公转自转和相机的移动,其中结合了OpenGL中大部分知识点,我...

网友评论

      本文标题:OpenGL实现2D正方形公转和自转

      本文链接:https://www.haomeiwen.com/subject/qkflfqtx.html