OpenGL Study 3

原创 2007年10月10日 21:10:00

 Lesson04

实现图形的旋转

bool DrawGLScene(GLvoid)
{
    
//clear the screen and the depth buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
//reset the current modelview matrix
    glLoadIdentity();

    
//move left 1.5 units,deep 6.0 units from current position
    
//move the model from (0,0,0) to (-1.5,0.0,-6.0),it can also be implemented by move the view point
    glTranslatef(-1.5f,0.0f,-6.0f);

    
//rotate around the y axis
    glRotatef(rtri,0.0f,1.0f,0.0f);

    
//draw a triangle,with smooth coloring
    glBegin(GL_TRIANGLES);
        glColor3f(
1.0f,0.0f,0.0f);
        glVertex3f(
0.0f,1.0f,0.0f);
        glColor3f(
0.0f,1.0f,0.0f);
        glVertex3f(
-1.0f,-1.0f,0.0f);
        glColor3f(
0.0f,0.0f,1.0f);
        glVertex3f(
1.0f,-1.0f,0.0f);
    glEnd();

    
//reset the current modleview matrix
    glLoadIdentity();

    
//move from (0.0,0.0,0.0) to (1.5,0.0,-6.0)
    glTranslatef(1.5f,0.0f,-6.0f);

    
//rotate around the x axis
    glRotatef(rquad,1.0f,0.0f,0.0f);

    
//draw a quad,the vertex is represented in the model coordinate
    
//with flat coloring
    glColor3f(0.5f,0.5f,1.0f);
    glBegin(GL_QUADS);
        glVertex3f(
-1.0f,1.0f,0.0f);
        glVertex3f(
-1.0f,-1.0f,0.0f);
        glVertex3f(
1.0f,-1.0f,0.0f);
        glVertex3f(
1.0f,1.0f,0.0f);
    glEnd();

    rtri
+=0.2f;
    rquad
-=0.15f;
    
return true;
}

使用glRotatef(r,x,y,z)使图形绕向量(x,y,z)旋转r弧度,r>0时,正对环绕轴来看,逆时针旋转。

代码中两次出现了glLoadIdentity()函数,在每绘制一个图形之前都将模型视图矩阵置一,然后在移动,旋转进行必要的变换,再绘制图形,这样可以防止不同图形之间变换矩阵的影响。

Lesson05

绘制3D物体

bool DrawGLScene(GLvoid)
{
    
//clear the screen and the depth buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
//reset the current modelview matrix
    glLoadIdentity();

    
//move left 1.5 units,deep 6.0 units from current position
    
//move the model from (0,0,0) to (-1.5,0.0,-6.0),it can also be implemented by move the view point
    glTranslatef(-1.5f,0.0f,-6.0f);

    
//rotate around the y axis
    glRotatef(rtri,0.0f,1.0f,0.0f);

    
//draw a diamond made of 4 triangles,with smooth coloring
    glBegin(GL_TRIANGLES);
        
//front
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.0f,1.0f,0.0f);//green
        glVertex3f(-1.0f,-1.0f,1.0f);
        glColor3f(
0.0f,0.0f,1.0f);//blue
        glVertex3f(1.0f,-1.0f,1.0f);

        
//right
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.0f,0.0f,1.0f);//blue
        glVertex3f(1.0f,-1.0f,1.0f);
        glColor3f(
0.5f,0.5f,0.0f);//rg
        glVertex3f(1.0f,-1.0f,-1.0f);

        
//back
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.5f,0.5f,0.0f);//rg
        glVertex3f(1.0f,-1.0f,-1.0f);
        glColor3f(
0.5f,0.0f,0.5f);//rb
        glVertex3f(-1.0f,-1.0f,-1.0f);

        
//back
        glColor3f(1.0f,0.0f,0.0f);//red
        glVertex3f(0.0f,1.0f,0.0f);
        glColor3f(
0.5f,0.0f,0.5f);//rb
        glVertex3f(-1.0f,-1.0f,-1.0f);
        glColor3f(
0.0f,1.0f,0.0f);//green
        glVertex3f(-1.0f,-1.0f,1.0f);

    glEnd();

    
//reset the current modleview matrix
    glLoadIdentity();

    
//move from (0.0,0.0,0.0) to (1.5,0.0,-6.0)
    glTranslatef(1.5f,0.0f,-6.0f);

    
//rotate around the x axis
    glRotatef(rquad,1.0f,0.0f,0.0f);

    
//draw a cubic made of 6 quads,the vertex is represented in the model coordinate
    
//with flat coloring
    glBegin(GL_QUADS);
        
//top,y=1
        glColor3f(1.0f,0.0f,0.0f);
        glVertex3f(
-1.0f,1.0f,1.0f);
        glVertex3f(
1.0f,1.0f,1.0f);
        glVertex3f(
1.0f,1.0f,-1.0f);
        glVertex3f(
-1.0f,1.0f,-1.0f);

        
//bottom,y=-1
        glColor3f(0.0f,1.0f,0.0f);
        glVertex3f(
-1.0f,-1.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,-1.0f);
        glVertex3f(
1.0f,-1.0f,-1.0f);
        glVertex3f(
1.0f,-1.0f,1.0f);

        
//front,z=1
        glColor3f(0.0f,0.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,1.0f);
        glVertex3f(
1.0f,-1.0f,1.0f);
        glVertex3f(
1.0f,1.0f,1.0f);
        glVertex3f(
-1.0f,1.0f,1.0f);

        
//right,x=1
        glColor3f(1.0f,1.0f,0.0f);
        glVertex3f(
1.0f,-1.0f,1.0f);
        glVertex3f(
1.0f,-1.0f,-1.0f);
        glVertex3f(
1.0f,1.0f,-1.0f);
        glVertex3f(
1.0f,1.0f,1.0f);

        
//back,z=-1
        glColor3f(0.0f,1.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,-1.0f);
        glVertex3f(
-1.0f,1.0f,-1.0f);
        glVertex3f(
1.0f,1.0f,-1.0f);
        glVertex3f(
1.0f,-1.0f,-1.0f);

        
//left,x=-1
        glColor3f(1.0f,0.0f,1.0f);
        glVertex3f(
-1.0f,-1.0f,1.0f);
        glVertex3f(
-1.0f,1.0f,1.0f);
        glVertex3f(
-1.0f,1.0f,-1.0f);
        glVertex3f(
-1.0f,-1.0f,-1.0f);

    glEnd();

    rtri
+=0.2f;
    rquad
-=0.15f;
    
return true;
}

使用4个三角形组成一个金字塔,采用6个正方形组成一个正方体。

《Learn More,Study Less》读书笔记之自我反思

中学时代自己的学习成绩还算不错,当然这是应试教育下所定义的“不错”。     现在大学二年级,回首过去的自己,惊叹于感觉现在的自己和原来的自己仿佛身处于不同的世界,一个闭塞却专一,什么都懂实际却...
  • sinat_21595363
  • sinat_21595363
  • 2015年07月13日 00:31
  • 427

OpenGL(三)图形变换之几何变换

通常,为了把一组图形融合为一个场景,必须把他们按照批次之间的关系和与观察这的关系排列起来,这就要用到变换。变换使得能够把3D坐标投影到2D场景成为可能,变换包括旋转对象,移动对象,甚至拉伸、压缩和玩去...
  • qq_33850438
  • qq_33850438
  • 2016年07月08日 11:18
  • 2275

【一步步学OpenGL 3】-《第一个三角形》

第一个三角形原文:http://ogldev.atspace.co.uk/www/tutorial03/tutorial03.html背景这篇教程非常简短,我们只是扩展前一个教程来渲染一个三角形。 ...
  • cordova
  • cordova
  • 2016年09月10日 13:27
  • 6575

OpenGL: 概念基础和shader例子

首先来明确几个基本的概念或者说是术语吧:1.渲染:将数学和图形数据转换为3D空间图像的操作就叫渲染2.变换,投影:这里一般指的是变换矩阵和投影矩阵,变换主要是用来处理顶点的位置,而投影则主要用来将3D...
  • Augusdi
  • Augusdi
  • 2014年02月27日 09:02
  • 5695

Protocol Buffers编程指南与应用

Protocol Buffers Protocol buffers,简称Protobuf,是一个独立于编程语言,独立于平台,且可拓展的自动序列化结构数据的机制。 本文档服务于想要在程序中使用Pro...
  • u012391923
  • u012391923
  • 2017年02月07日 12:28
  • 16941

CUDA入门3.2——使用CUDA实现鱼眼转全景图(CUDA环节)1227更

算法算法借鉴了Converting a fisheye image into a panoramic, spherical or perspective projection,核心内容如下: So...
  • ems13579
  • ems13579
  • 2017年12月15日 20:19
  • 200

opengl新版本简单易懂的环境配置

opengl windows平台的环境搭建,根据红宝书的示例代码快速搭建
  • b491985496
  • b491985496
  • 2016年04月16日 10:24
  • 1816

利用Task加载DICOM的Study,Series,Image的类

这个类主要是利用了Task建立了一个一个工作列表, /******************************************************************** ...
  • muzizongheng
  • muzizongheng
  • 2013年07月10日 15:43
  • 1062

老杜(杜昶旭)GRE填空笔记部分整理-by“ 1哥”+ TTC相关资料

 GRE 句子填空题解题技巧(6常规+7快速) 老杜的逻辑很强大!理性的光芒照耀大地! (注意:在复制的时候原来所标记的颜色不见了,很无奈,但是上过老杜课程的同学,讲...
  • ashuai81
  • ashuai81
  • 2014年10月25日 02:40
  • 1501

树莓派3首次安装环境配置

1. 系统烧录 首先需要到这里下载系统,我选择全功能的官方维护版本RASPBIAN JESSIE。 然后需要将下载的系统解压缩(.img),烧录到SD卡中(推荐64G)。这里提供了Windows、...
  • zizi7
  • zizi7
  • 2016年06月29日 17:31
  • 4348
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenGL Study 3
举报原因:
原因补充:

(最多只允许输入30个字)